diff options
Diffstat (limited to 'meta-openembedded/meta-oe/recipes-support/open-vm-tools')
16 files changed, 1437 insertions, 146 deletions
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch index b7a405835..0736572b3 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-configure.ac-don-t-use-dnet-config.patch @@ -1,4 +1,4 @@ -From 929150608c16644695f19cd2e0cc8a06a41cd497 Mon Sep 17 00:00:00 2001 +From fc9bf1ce9f1a21150b10736a1c968d4ca6d4eaa3 Mon Sep 17 00:00:00 2001 From: Martin Kelly <mkelly@xevo.com> Date: Fri, 7 Apr 2017 15:20:30 -0700 Subject: [PATCH] configure.ac: don't use dnet-config @@ -11,14 +11,14 @@ Upstream-Status: Inappropriate [embedded specific] Signed-off-by: Martin Kelly <mkelly@xevo.com> --- - configure.ac | 4 ++-- + open-vm-tools/configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -Index: open-vm-tools/configure.ac -=================================================================== ---- open-vm-tools.orig/configure.ac -+++ open-vm-tools/configure.ac -@@ -944,7 +944,7 @@ if test "$with_dnet" = "yes"; then +diff --git a/open-vm-tools/configure.ac b/open-vm-tools/configure.ac +index 325a39f5..713ea683 100644 +--- a/open-vm-tools/configure.ac ++++ b/open-vm-tools/configure.ac +@@ -949,7 +949,7 @@ if test "$with_dnet" = "yes"; then AC_VMW_CHECK_LIB([dnet], [DNET], [], @@ -27,7 +27,7 @@ Index: open-vm-tools/configure.ac [], [dnet.h], [intf_open], -@@ -954,7 +954,7 @@ if test "$with_dnet" = "yes"; then +@@ -959,7 +959,7 @@ if test "$with_dnet" = "yes"; then if test $have_dnet = "no"; then AC_MSG_ERROR( diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch index f905601d5..34628ffbe 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-add-include-sys-sysmacros.h.patch @@ -1,7 +1,7 @@ -From 5818acc8032e3247257730376e947330340a07b3 Mon Sep 17 00:00:00 2001 +From 3fa237b3afabc293e563292b8d89265a871626ad Mon Sep 17 00:00:00 2001 From: Martin Kelly <mkelly@xevo.com> Date: Mon, 22 May 2017 17:00:05 -0700 -Subject: [PATCH 2/2] add #include <sys/sysmacros.h> +Subject: [PATCH] add #include <sys/sysmacros.h> In newer glibc versions, the definition for major() has been moved to sys/sysmacros.h, and using the older version in <sys/types.h> has been @@ -11,14 +11,14 @@ Upstream-Status: Pending Signed-off-by: Martin Kelly <mkelly@xevo.com> --- - lib/wiper/wiperPosix.c | 3 +++ + open-vm-tools/lib/wiper/wiperPosix.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/open-vm-tools/lib/wiper/wiperPosix.c b/open-vm-tools/lib/wiper/wiperPosix.c -index d389eee..1f221fc 100644 ---- a/lib/wiper/wiperPosix.c -+++ b/lib/wiper/wiperPosix.c -@@ -40,6 +40,9 @@ +index bd542410..ccf06293 100644 +--- a/open-vm-tools/lib/wiper/wiperPosix.c ++++ b/open-vm-tools/lib/wiper/wiperPosix.c +@@ -43,6 +43,9 @@ # include <libgen.h> # endif /* __FreeBSD_version >= 500000 */ #endif @@ -28,6 +28,3 @@ index d389eee..1f221fc 100644 #include <unistd.h> #include "vmware.h" --- -2.7.4 - diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-Use-configure-test-for-struct-timespec.patch index f02d00f84..6d2e49814 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-Use-configure-test-for-struct-timespec.patch @@ -1,7 +1,7 @@ -From bf1eafb07297711baf9320b1edcca8a3376f117d Mon Sep 17 00:00:00 2001 +From bf9292ff9bd25467a014d6c2070805d163daa4c9 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Wed, 18 Nov 2015 09:03:00 +0000 -Subject: [PATCH 05/11] Use configure test for struct timespec +Subject: [PATCH] Use configure test for struct timespec Use the configure script to test for struct time spec instead of trying to keep track of what platforms has it. @@ -12,11 +12,11 @@ Signed-off-by: Natanael Copa <ncopa@alpinelinux.org> open-vm-tools/lib/include/hgfsUtil.h | 8 +------- 2 files changed, 2 insertions(+), 7 deletions(-) -Index: open-vm-tools/configure.ac -=================================================================== ---- open-vm-tools.orig/configure.ac -+++ open-vm-tools/configure.ac -@@ -1127,6 +1127,7 @@ AC_TYPE_OFF_T +diff --git a/open-vm-tools/configure.ac b/open-vm-tools/configure.ac +index 713ea683..48ff1ef3 100644 +--- a/open-vm-tools/configure.ac ++++ b/open-vm-tools/configure.ac +@@ -1208,6 +1208,7 @@ AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) @@ -24,10 +24,10 @@ Index: open-vm-tools/configure.ac AC_HEADER_TIME AC_STRUCT_TM AC_C_VOLATILE -Index: open-vm-tools/lib/include/hgfsUtil.h -=================================================================== ---- open-vm-tools.orig/lib/include/hgfsUtil.h -+++ open-vm-tools/lib/include/hgfsUtil.h +diff --git a/open-vm-tools/lib/include/hgfsUtil.h b/open-vm-tools/lib/include/hgfsUtil.h +index 609f4c00..a3a022d4 100644 +--- a/open-vm-tools/lib/include/hgfsUtil.h ++++ b/open-vm-tools/lib/include/hgfsUtil.h @@ -53,13 +53,7 @@ # include <time.h> # endif diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch index d1f4eff9b..e107ecf23 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch @@ -1,7 +1,7 @@ -From 31ae6f42458f90d4994a4ad8e2b7673691612c36 Mon Sep 17 00:00:00 2001 +From 5a795b234c617150915a607776c76377948870a6 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Wed, 18 Nov 2015 09:10:14 +0000 -Subject: [PATCH 06/11] Fix definition of ALLPERMS and ACCESSPERMS +Subject: [PATCH] Fix definition of ALLPERMS and ACCESSPERMS The ALLPERMS and ACCESSPERMS defines are not specified in POSIX so assume it is not there instead of testing for specific implementations. @@ -14,11 +14,11 @@ Signed-off-by: Natanael Copa <ncopa@alpinelinux.org> open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c | 3 +-- 2 files changed, 6 insertions(+), 5 deletions(-) -Index: open-vm-tools/lib/hgfsServer/hgfsServerLinux.c -=================================================================== ---- open-vm-tools.orig/lib/hgfsServer/hgfsServerLinux.c -+++ open-vm-tools/lib/hgfsServer/hgfsServerLinux.c -@@ -107,11 +107,13 @@ typedef struct DirectoryEntry { +diff --git a/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c b/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c +index f2b7ce67..0e6351a9 100644 +--- a/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c ++++ b/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c +@@ -105,11 +105,13 @@ typedef struct DirectoryEntry { #endif /* @@ -35,11 +35,11 @@ Index: open-vm-tools/lib/hgfsServer/hgfsServerLinux.c # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) #endif -Index: open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c -=================================================================== ---- open-vm-tools.orig/services/plugins/dndcp/dnd/dndLinux.c -+++ open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c -@@ -51,7 +51,7 @@ +diff --git a/open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c b/open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c +index 89133652..7e9c3a91 100644 +--- a/open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c ++++ b/open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c +@@ -52,7 +52,7 @@ #define DND_ROOTDIR_PERMS (S_IRWXU | S_IRWXG | S_IRWXO) #define DND_STAGINGDIR_PERMS (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) @@ -48,7 +48,7 @@ Index: open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) #endif #ifdef __ANDROID__ -@@ -60,7 +60,6 @@ +@@ -61,7 +61,6 @@ */ #define NO_SETMNTENT #define NO_ENDMNTENT diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-to-test-for-feature-instead-of-platfor.patch index ad19fb24b..c6378b808 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-to-test-for-feature-instead-of-platfor.patch @@ -1,7 +1,7 @@ -From 6cc1c22cc30320f56da552a76bd956db8f255b6a Mon Sep 17 00:00:00 2001 +From 719d60978f979cf2e03771a9b8a62e36c92639f9 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Wed, 18 Nov 2015 10:05:07 +0000 -Subject: [PATCH 07/11] Use configure to test for feature instead of platform +Subject: [PATCH] Use configure to test for feature instead of platform Test for various functions instead of trying to keep track of what platform and what version of the given platform has support for what. @@ -21,15 +21,15 @@ This is needed for musl libc. Signed-off-by: Natanael Copa <ncopa@alpinelinux.org> --- open-vm-tools/configure.ac | 4 ++++ - open-vm-tools/lib/misc/idLinux.c | 30 ++++++++++++++---------------- - open-vm-tools/lib/nicInfo/nicInfoPosix.c | 8 ++++++-- - 3 files changed, 24 insertions(+), 18 deletions(-) + open-vm-tools/lib/misc/idLinux.c | 30 +++++++++++------------- + open-vm-tools/lib/nicInfo/nicInfoPosix.c | 6 ++++- + 3 files changed, 23 insertions(+), 17 deletions(-) -Index: open-vm-tools/configure.ac -=================================================================== ---- open-vm-tools.orig/configure.ac -+++ open-vm-tools/configure.ac -@@ -892,6 +892,7 @@ AC_CHECK_FUNCS( +diff --git a/open-vm-tools/configure.ac b/open-vm-tools/configure.ac +index 48ff1ef3..71e684bb 100644 +--- a/open-vm-tools/configure.ac ++++ b/open-vm-tools/configure.ac +@@ -897,6 +897,7 @@ AC_CHECK_FUNCS( AC_CHECK_FUNCS([ecvt]) AC_CHECK_FUNCS([fcvt]) @@ -37,7 +37,7 @@ Index: open-vm-tools/configure.ac AC_CHECK_FUNC([mkdtemp], [have_mkdtemp=yes]) -@@ -1076,10 +1077,13 @@ AC_PATH_PROG( +@@ -1145,10 +1146,13 @@ fi ### AC_CHECK_HEADERS([crypt.h]) @@ -51,10 +51,10 @@ Index: open-vm-tools/configure.ac AC_CHECK_HEADERS([sys/inttypes.h]) AC_CHECK_HEADERS([sys/io.h]) AC_CHECK_HEADERS([sys/param.h]) # Required to make the sys/user.h check work correctly on FreeBSD -Index: open-vm-tools/lib/misc/idLinux.c -=================================================================== ---- open-vm-tools.orig/lib/misc/idLinux.c -+++ open-vm-tools/lib/misc/idLinux.c +diff --git a/open-vm-tools/lib/misc/idLinux.c b/open-vm-tools/lib/misc/idLinux.c +index b950cf84..1dcfb508 100644 +--- a/open-vm-tools/lib/misc/idLinux.c ++++ b/open-vm-tools/lib/misc/idLinux.c @@ -27,12 +27,9 @@ #include <sys/syscall.h> #include <string.h> @@ -114,10 +114,10 @@ Index: open-vm-tools/lib/misc/idLinux.c #endif } #endif -Index: open-vm-tools/lib/nicInfo/nicInfoPosix.c -=================================================================== ---- open-vm-tools.orig/lib/nicInfo/nicInfoPosix.c -+++ open-vm-tools/lib/nicInfo/nicInfoPosix.c +diff --git a/open-vm-tools/lib/nicInfo/nicInfoPosix.c b/open-vm-tools/lib/nicInfo/nicInfoPosix.c +index a22981d5..b4e08681 100644 +--- a/open-vm-tools/lib/nicInfo/nicInfoPosix.c ++++ b/open-vm-tools/lib/nicInfo/nicInfoPosix.c @@ -34,9 +34,13 @@ #include <sys/socket.h> #include <sys/stat.h> diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Use-configure-test-for-sys-stat.h-include.patch index 78722390e..9a227f9ec 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Use-configure-test-for-sys-stat.h-include.patch @@ -1,7 +1,7 @@ -From 95c6184d9ff70a47c41768850923a96de9e544aa Mon Sep 17 00:00:00 2001 +From 11adcf43a1e7aa39ee4d82fa567f37e5b0c6ca81 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Wed, 18 Nov 2015 10:41:01 +0000 -Subject: [PATCH 11/11] Use configure test for sys/stat.h include +Subject: [PATCH] Use configure test for sys/stat.h include This is needed for musl libc. @@ -10,10 +10,10 @@ Signed-off-by: Natanael Copa <ncopa@alpinelinux.org> open-vm-tools/services/plugins/vix/vixTools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Index: open-vm-tools/services/plugins/vix/vixTools.c -=================================================================== ---- open-vm-tools.orig/services/plugins/vix/vixTools.c -+++ open-vm-tools/services/plugins/vix/vixTools.c +diff --git a/open-vm-tools/services/plugins/vix/vixTools.c b/open-vm-tools/services/plugins/vix/vixTools.c +index e5273786..cabc4137 100644 +--- a/open-vm-tools/services/plugins/vix/vixTools.c ++++ b/open-vm-tools/services/plugins/vix/vixTools.c @@ -66,7 +66,7 @@ #include <unistd.h> #endif diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Fix-subdir-objects-configure-error.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Fix-subdir-objects-configure-error.patch new file mode 100644 index 000000000..11be2d4a0 --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Fix-subdir-objects-configure-error.patch @@ -0,0 +1,24 @@ +From cf1284fda8fb22a2b27cb2ce7962f166166e74c3 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Wed, 13 Jun 2018 23:48:04 -0700 +Subject: [PATCH] Fix subdir objects configure error + +Fix build on musl while here + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + open-vm-tools/configure.ac | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/open-vm-tools/configure.ac b/open-vm-tools/configure.ac +index 71e684bb..b76a7966 100644 +--- a/open-vm-tools/configure.ac ++++ b/open-vm-tools/configure.ac +@@ -303,6 +303,7 @@ AC_ARG_ENABLE( + [], + [enable_resolutionkms="auto"]) + ++AM_INIT_AUTOMAKE([subdir-objects]) + AM_INIT_AUTOMAKE + + ### diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-include-poll.h-instead-of-sys-poll.h.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0008-include-poll.h-instead-of-sys-poll.h.patch index 882058119..814b9e3b2 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-include-poll.h-instead-of-sys-poll.h.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0008-include-poll.h-instead-of-sys-poll.h.patch @@ -1,4 +1,4 @@ -From 4981bb3013d7f1e40e44618076d99af3484eedea Mon Sep 17 00:00:00 2001 +From e4f0b99d90e26b15106f634caad1c3dea9e09cb8 Mon Sep 17 00:00:00 2001 From: Khem Raj <raj.khem@gmail.com> Date: Wed, 13 Jun 2018 23:02:50 -0700 Subject: [PATCH] include poll.h instead of sys/poll.h @@ -10,10 +10,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> open-vm-tools/lib/asyncsocket/asyncsocket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/lib/asyncsocket/asyncsocket.c b/lib/asyncsocket/asyncsocket.c -index 13908679..e0a68e7e 100644 ---- a/lib/asyncsocket/asyncsocket.c -+++ b/lib/asyncsocket/asyncsocket.c +diff --git a/open-vm-tools/lib/asyncsocket/asyncsocket.c b/open-vm-tools/lib/asyncsocket/asyncsocket.c +index 65b07109..b41aa29d 100644 +--- a/open-vm-tools/lib/asyncsocket/asyncsocket.c ++++ b/open-vm-tools/lib/asyncsocket/asyncsocket.c @@ -69,8 +69,8 @@ #else #include <stddef.h> diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-Rename-poll.h-to-vm_poll.h.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0009-Rename-poll.h-to-vm_poll.h.patch index 4d6a0fd6a..5c1aa7c40 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0002-Rename-poll.h-to-vm_poll.h.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0009-Rename-poll.h-to-vm_poll.h.patch @@ -1,4 +1,4 @@ -From 92955b3a6180b4285d11ef79766df01b9ab60dbd Mon Sep 17 00:00:00 2001 +From 8793466326dd10b0d2dbb83c64beff5cc8c0fc7d Mon Sep 17 00:00:00 2001 From: Khem Raj <raj.khem@gmail.com> Date: Wed, 13 Jun 2018 23:11:58 -0700 Subject: [PATCH] Rename poll.h to vm_poll.h @@ -19,10 +19,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> 7 files changed, 7 insertions(+), 7 deletions(-) rename open-vm-tools/lib/include/{poll.h => vm_poll.h} (99%) -diff --git a/lib/asyncsocket/asyncsocket.c b/lib/asyncsocket/asyncsocket.c -index e0a68e7e..b9675674 100644 ---- a/lib/asyncsocket/asyncsocket.c -+++ b/lib/asyncsocket/asyncsocket.c +diff --git a/open-vm-tools/lib/asyncsocket/asyncsocket.c b/open-vm-tools/lib/asyncsocket/asyncsocket.c +index b41aa29d..8691309d 100644 +--- a/open-vm-tools/lib/asyncsocket/asyncsocket.c ++++ b/open-vm-tools/lib/asyncsocket/asyncsocket.c @@ -86,7 +86,7 @@ #include "random.h" #include "asyncsocket.h" @@ -32,10 +32,10 @@ index e0a68e7e..b9675674 100644 #include "log.h" #include "err.h" #include "hostinfo.h" -diff --git a/lib/hgfsServer/hgfsServer.c b/lib/hgfsServer/hgfsServer.c -index 991a7941..ed0c09f9 100644 ---- a/lib/hgfsServer/hgfsServer.c -+++ b/lib/hgfsServer/hgfsServer.c +diff --git a/open-vm-tools/lib/hgfsServer/hgfsServer.c b/open-vm-tools/lib/hgfsServer/hgfsServer.c +index 7ea3b7f4..740c4fed 100644 +--- a/open-vm-tools/lib/hgfsServer/hgfsServer.c ++++ b/open-vm-tools/lib/hgfsServer/hgfsServer.c @@ -48,7 +48,7 @@ #include "hgfsServerOplock.h" #include "hgfsDirNotify.h" @@ -45,10 +45,10 @@ index 991a7941..ed0c09f9 100644 #include "mutexRankLib.h" #include "vm_basic_asm.h" #include "unicodeOperations.h" -diff --git a/lib/include/asyncsocket.h b/lib/include/asyncsocket.h -index 524147ea..103f944f 100644 ---- a/lib/include/asyncsocket.h -+++ b/lib/include/asyncsocket.h +diff --git a/open-vm-tools/lib/include/asyncsocket.h b/open-vm-tools/lib/include/asyncsocket.h +index ec9b45aa..dc91e738 100644 +--- a/open-vm-tools/lib/include/asyncsocket.h ++++ b/open-vm-tools/lib/include/asyncsocket.h @@ -164,7 +164,7 @@ typedef struct AsyncSocket AsyncSocket; * Or the client can specify its favorite poll class and locking behavior. * Use of IVmdbPoll is only supported for regular sockets and for Attach. @@ -58,10 +58,10 @@ index 524147ea..103f944f 100644 struct IVmdbPoll; typedef struct AsyncSocketPollParams { int flags; /* Default 0, only POLL_FLAG_NO_BULL is valid */ -diff --git a/lib/include/pollImpl.h b/lib/include/pollImpl.h +diff --git a/open-vm-tools/lib/include/pollImpl.h b/open-vm-tools/lib/include/pollImpl.h index 46442e55..8bc66997 100644 ---- a/lib/include/pollImpl.h -+++ b/lib/include/pollImpl.h +--- a/open-vm-tools/lib/include/pollImpl.h ++++ b/open-vm-tools/lib/include/pollImpl.h @@ -44,7 +44,7 @@ #define INCLUDE_ALLOW_USERLEVEL #include "includeCheck.h" @@ -71,13 +71,13 @@ index 46442e55..8bc66997 100644 #include "vm_basic_asm.h" #if defined(__cplusplus) -diff --git a/lib/include/poll.h b/lib/include/vm_poll.h +diff --git a/open-vm-tools/lib/include/poll.h b/open-vm-tools/lib/include/vm_poll.h similarity index 99% rename from open-vm-tools/lib/include/poll.h rename to open-vm-tools/lib/include/vm_poll.h -index 988fe6d0..e9e74fb5 100644 ---- a/lib/include/poll.h -+++ b/lib/include/vm_poll.h +index 6acd4f35..fbc88494 100644 +--- a/open-vm-tools/lib/include/poll.h ++++ b/open-vm-tools/lib/include/vm_poll.h @@ -60,7 +60,7 @@ extern "C" { #if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0 #include <sys/kernel.h> @@ -87,10 +87,10 @@ index 988fe6d0..e9e74fb5 100644 #define HZ 100 #endif #ifdef __ANDROID__ -diff --git a/lib/rpcIn/rpcin.c b/lib/rpcIn/rpcin.c -index c2c51583..d6c62f10 100644 ---- a/lib/rpcIn/rpcin.c -+++ b/lib/rpcIn/rpcin.c +diff --git a/open-vm-tools/lib/rpcIn/rpcin.c b/open-vm-tools/lib/rpcIn/rpcin.c +index 8eea7d86..c48f5be2 100644 +--- a/open-vm-tools/lib/rpcIn/rpcin.c ++++ b/open-vm-tools/lib/rpcIn/rpcin.c @@ -57,7 +57,7 @@ #if defined(VMTOOLS_USE_VSOCKET) @@ -100,10 +100,10 @@ index c2c51583..d6c62f10 100644 # include "asyncsocket.h" # include "vmci_defs.h" #include "dataMap.h" -diff --git a/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c b/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c +diff --git a/open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c b/open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c index 03700937..f0b49ad7 100644 ---- a/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c -+++ b/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c +--- a/open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c ++++ b/open-vm-tools/services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c @@ -48,7 +48,7 @@ #include "rpcout.h" #include "rabbitmqProxyConst.h" diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-use-posix-strerror_r-unless-on-gnu-libc-system.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0010-use-posix-strerror_r-unless-on-gnu-libc-system.patch index c7d34c5cf..784b4fc6c 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0003-use-posix-strerror_r-unless-on-gnu-libc-system.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0010-use-posix-strerror_r-unless-on-gnu-libc-system.patch @@ -1,4 +1,4 @@ -From a2e7d9273261c5c5cbc33796900f415097f5455e Mon Sep 17 00:00:00 2001 +From e86a259e1ce19c70ecfdece69ab53a07c63a34e1 Mon Sep 17 00:00:00 2001 From: Khem Raj <raj.khem@gmail.com> Date: Wed, 13 Jun 2018 23:16:53 -0700 Subject: [PATCH] use posix strerror_r unless on gnu libc system @@ -8,10 +8,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> open-vm-tools/lib/err/errPosix.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) -diff --git a/lib/err/errPosix.c b/lib/err/errPosix.c +diff --git a/open-vm-tools/lib/err/errPosix.c b/open-vm-tools/lib/err/errPosix.c index c81b4c13..7a403640 100644 ---- a/lib/err/errPosix.c -+++ b/lib/err/errPosix.c +--- a/open-vm-tools/lib/err/errPosix.c ++++ b/open-vm-tools/lib/err/errPosix.c @@ -31,6 +31,7 @@ #include <errno.h> #include <string.h> diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Use-uintmax_t-for-handling-rlim_t.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-uintmax_t-for-handling-rlim_t.patch index e802dca4e..0a1d00873 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0004-Use-uintmax_t-for-handling-rlim_t.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-uintmax_t-for-handling-rlim_t.patch @@ -1,4 +1,4 @@ -From e694a122c1ff32d8b951ae55756796f9576d23ed Mon Sep 17 00:00:00 2001 +From 18eea61a7a768c6c3b57c6683c7bef7049f0f6ab Mon Sep 17 00:00:00 2001 From: Khem Raj <raj.khem@gmail.com> Date: Wed, 13 Jun 2018 23:37:09 -0700 Subject: [PATCH] Use uintmax_t for handling rlim_t @@ -12,10 +12,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> open-vm-tools/lib/hgfsServer/hgfsServerLinux.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/lib/hgfsServer/hgfsServerLinux.c b/lib/hgfsServer/hgfsServerLinux.c -index 2e73707d..a2fdb850 100644 ---- a/lib/hgfsServer/hgfsServerLinux.c -+++ b/lib/hgfsServer/hgfsServerLinux.c +diff --git a/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c b/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c +index 0e6351a9..a2ee1740 100644 +--- a/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c ++++ b/open-vm-tools/lib/hgfsServer/hgfsServerLinux.c @@ -5294,8 +5294,8 @@ HgfsWriteCheckIORange(off_t offset, // IN: goto exit; } diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Use-off64_t-instead-of-__off64_t.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0012-Use-off64_t-instead-of-__off64_t.patch index 432496f27..d69b74e23 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Use-off64_t-instead-of-__off64_t.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0012-Use-off64_t-instead-of-__off64_t.patch @@ -1,4 +1,4 @@ -From 43d859f9d5eecdc0fdc1a6bf539bcde4a152e6f5 Mon Sep 17 00:00:00 2001 +From 123c690f12f560022305b0cf19499e7f81a690ae Mon Sep 17 00:00:00 2001 From: Khem Raj <raj.khem@gmail.com> Date: Mon, 27 Aug 2018 23:22:21 -0700 Subject: [PATCH] Use off64_t instead of __off64_t @@ -9,13 +9,13 @@ unknown type name '__off64_t' Upstream-Status: Pending Signed-off-by: Khem Raj <raj.khem@gmail.com> --- - lib/file/fileIOPosix.c | 4 ++-- + open-vm-tools/lib/file/fileIOPosix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/lib/file/fileIOPosix.c b/lib/file/fileIOPosix.c +diff --git a/open-vm-tools/lib/file/fileIOPosix.c b/open-vm-tools/lib/file/fileIOPosix.c index 23108279..bcd2ddc5 100644 ---- a/lib/file/fileIOPosix.c -+++ b/lib/file/fileIOPosix.c +--- a/open-vm-tools/lib/file/fileIOPosix.c ++++ b/open-vm-tools/lib/file/fileIOPosix.c @@ -206,10 +206,10 @@ static AlignedPool alignedPool; * the symbols (and anyone building XOPEN<700 gets nothing). */ diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-misc-Do-not-print-NULL-string-into-logs.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0013-misc-Do-not-print-NULL-string-into-logs.patch index 7af265a99..88f4f694c 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-misc-Do-not-print-NULL-string-into-logs.patch +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0013-misc-Do-not-print-NULL-string-into-logs.patch @@ -1,4 +1,4 @@ -From e25d00d8297cba044c3a4d2e38749e54adac66c1 Mon Sep 17 00:00:00 2001 +From cfc6839362bd96bf2f42954160f16a60bf1de377 Mon Sep 17 00:00:00 2001 From: Khem Raj <raj.khem@gmail.com> Date: Sat, 22 Dec 2018 19:59:02 -0800 Subject: [PATCH] misc: Do not print NULL string into logs @@ -14,10 +14,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> open-vm-tools/lib/misc/util_misc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git open-vm-tools/lib/misc/util_misc.c b/open-vm-tools/lib/misc/util_misc.c +diff --git a/open-vm-tools/lib/misc/util_misc.c b/open-vm-tools/lib/misc/util_misc.c index 198c23d2..0ac0a335 100644 ---- open-vm-tools/lib/misc/util_misc.c -+++ open-vm-tools/lib/misc/util_misc.c +--- a/open-vm-tools/lib/misc/util_misc.c ++++ b/open-vm-tools/lib/misc/util_misc.c @@ -719,8 +719,8 @@ Util_ExpandString(const char *fileName) // IN file path to expand ASSERT(!freeChunk[i]); chunks[i] = expand; diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch new file mode 100644 index 000000000..b5ccffd14 --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch @@ -0,0 +1,1281 @@ +From af9eca8689c97ea8e792902b458a31608286655e Mon Sep 17 00:00:00 2001 +From: Martin Jansa <martin.jansa@lge.com> +Date: Thu, 13 Jun 2019 16:01:03 +0000 +Subject: [PATCH] Fix new warnings from gcc9 + +Imported from Fedora: +https://src.fedoraproject.org/rpms/open-vm-tools/raw/master/f/gcc9-warnings.patch + +Upstream bug: +https://github.com/vmware/open-vm-tools/issues/330 + +Upstream-Status: Pending +--- + open-vm-tools/hgfsmounter/hgfsmounter.c | 14 +- + open-vm-tools/lib/hgfsServer/hgfsServer.c | 24 ++- + open-vm-tools/vmhgfs-fuse/dir.c | 175 ++++++++--------- + open-vm-tools/vmhgfs-fuse/file.c | 217 +++++++++++++--------- + open-vm-tools/vmhgfs-fuse/filesystem.c | 46 ++--- + open-vm-tools/vmhgfs-fuse/fsutil.c | 63 ++++--- + open-vm-tools/vmhgfs-fuse/link.c | 125 +++++++------ + 7 files changed, 367 insertions(+), 297 deletions(-) + +diff --git a/open-vm-tools/hgfsmounter/hgfsmounter.c b/open-vm-tools/hgfsmounter/hgfsmounter.c +index 0921b700..3f6798dc 100644 +--- a/open-vm-tools/hgfsmounter/hgfsmounter.c ++++ b/open-vm-tools/hgfsmounter/hgfsmounter.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2006-2017 VMware, Inc. All rights reserved. ++ * Copyright (C) 2006-2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -514,11 +514,13 @@ ParseFmask(const char *option, // IN: option string along with value + HgfsMountInfo *mountInfo, // OUT: mount data + int *flags) // OUT: mount flags + { ++ unsigned short fmask = 0; + ASSERT(option); + ASSERT(mountInfo); + +- if (ParseMask(option, &mountInfo->fmask)) { +- LOG("Setting mount fmask to %o\n", mountInfo->fmask); ++ if (ParseMask(option, &fmask)) { ++ LOG("Setting mount fmask to %o\n", fmask); ++ mountInfo->fmask = fmask; + return TRUE; + } + +@@ -548,11 +550,13 @@ ParseDmask(const char *option, // IN: option string along with value + HgfsMountInfo *mountInfo, // OUT: mount data + int *flags) // OUT: mount flags + { ++ unsigned short dmask = 0; + ASSERT(option); + ASSERT(mountInfo); + +- if (ParseMask(option, &mountInfo->dmask)) { +- LOG("Setting mount dmask to %o\n", mountInfo->dmask); ++ if (ParseMask(option, &dmask)) { ++ LOG("Setting mount dmask to %o\n", dmask); ++ mountInfo->dmask = dmask; + return TRUE; + } + +diff --git a/open-vm-tools/lib/hgfsServer/hgfsServer.c b/open-vm-tools/lib/hgfsServer/hgfsServer.c +index 740c4fed..422383cd 100644 +--- a/open-vm-tools/lib/hgfsServer/hgfsServer.c ++++ b/open-vm-tools/lib/hgfsServer/hgfsServer.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 1998-2018 VMware, Inc. All rights reserved. ++ * Copyright (C) 1998-2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -159,7 +159,7 @@ struct HgfsTransportSessionInfo { + HgfsServerChannelData channelCapabilities; + }; + +-/* The input request paramaters object. */ ++/* The input request parameters object. */ + typedef struct HgfsInputParam { + const void *request; /* Hgfs header followed by operation request */ + size_t requestSize; /* Size of Hgfs header and operation request */ +@@ -2682,8 +2682,8 @@ HgfsSearchHandle2Search(HgfsHandle handle, // IN: handle + * None + * + * Side effects: +- * If there isnt enough memory to accomodate the new names, those file nodes +- * that couldnt be updated are deleted. ++ * If there isn't enough memory to accommodate the new names, those file nodes ++ * that couldn't be updated are deleted. + * + *----------------------------------------------------------------------------- + */ +@@ -3399,7 +3399,7 @@ HgfsServerSessionReceive(HgfsPacket *packet, // IN: Hgfs Packet + + /* Send error if we fail to process the op. */ + if (HGFS_ERROR_SUCCESS != status) { +- LOG(4, ("Error %d occured parsing the packet\n", (uint32)status)); ++ LOG(4, ("Error %d occurred parsing the packet\n", (uint32)status)); + HgfsServerCompleteRequest(status, 0, input); + } + } +@@ -4131,7 +4131,7 @@ HgfsServerSetSessionCapability(HgfsOp op, // IN: operation code + result = TRUE; + } + } +- LOG(4, ("%s: Setting capabilitiy flags %x for op code %d %s\n", ++ LOG(4, ("%s: Setting capability flags %x for op code %d %s\n", + __FUNCTION__, flags, op, result ? "succeeded" : "failed")); + + return result; +@@ -4143,7 +4143,7 @@ HgfsServerSetSessionCapability(HgfsOp op, // IN: operation code + * + * HgfsServerResEnumInit -- + * +- * Initialize an enumeration of all exisitng resources. ++ * Initialize an enumeration of all existing resources. + * + * Results: + * The enumeration state object. +@@ -4239,7 +4239,7 @@ HgfsServerResEnumExit(void *enumState) // IN/OUT: enumeration state + * + * HgfsServerEnumerateSharedFolders -- + * +- * Enumerates all exisitng shared folders and registers shared folders with ++ * Enumerates all existing shared folders and registers shared folders with + * directory notification package. + * + * Results: +@@ -6536,11 +6536,13 @@ HgfsServerRead(HgfsInputParam *input) // IN: Input params + payload = &reply->payload[0]; + } + if (payload) { ++ uint32 actualSize = 0; + status = HgfsPlatformReadFile(readFd, input->session, offset, + requiredSize, payload, +- &reply->actualSize); ++ &actualSize); + if (HGFS_ERROR_SUCCESS == status) { + reply->reserved = 0; ++ reply->actualSize = actualSize; + replyPayloadSize = sizeof *reply; + + if (readUseDataBuffer) { +@@ -6556,11 +6558,13 @@ HgfsServerRead(HgfsInputParam *input) // IN: Input params + break; + } + case HGFS_OP_READ: { ++ uint32 actualSize = 0; + HgfsReplyRead *reply = replyRead; + + status = HgfsPlatformReadFile(readFd, input->session, offset, requiredSize, +- reply->payload, &reply->actualSize); ++ reply->payload, &actualSize); + if (HGFS_ERROR_SUCCESS == status) { ++ reply->actualSize = actualSize; + replyPayloadSize = sizeof *reply + reply->actualSize; + } else { + LOG(4, ("%s: V1 Failed to read-> %d.\n", __FUNCTION__, status)); +diff --git a/open-vm-tools/vmhgfs-fuse/dir.c b/open-vm-tools/vmhgfs-fuse/dir.c +index 6298a4ea..e71b7afd 100644 +--- a/open-vm-tools/vmhgfs-fuse/dir.c ++++ b/open-vm-tools/vmhgfs-fuse/dir.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2013 VMware, Inc. All rights reserved. ++ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -54,38 +54,53 @@ HgfsPackDirOpenRequest(const char *path, // IN: Path of the dir to open + HgfsOp opUsed, // IN: Op to be used + HgfsReq *req) // IN/OUT: Packet to write into + { +- char *name; +- unsigned int *nameLength = NULL; + size_t reqSize; +- int result; + + ASSERT(path); + ASSERT(req); + LOG(4, ("Path = %s \n", path)); + switch (opUsed) { + case HGFS_OP_SEARCH_OPEN_V3: { ++ int result; + HgfsRequestSearchOpenV3 *requestV3 = HgfsGetRequestPayload(req); + +- /* We'll use these later. */ +- name = requestV3->dirName.name; +- nameLength = &requestV3->dirName.length; + requestV3->dirName.flags = 0; + requestV3->dirName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; + requestV3->dirName.fid = HGFS_INVALID_HANDLE; + requestV3->reserved = 0; + reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ requestV3->dirName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed\n")); ++ return -EINVAL; ++ } ++ LOG(4, ("After conversion = %s\n", requestV3->dirName.name)); ++ requestV3->dirName.length = result; ++ reqSize += result; + break; + } + + case HGFS_OP_SEARCH_OPEN: { ++ int result; + HgfsRequestSearchOpen *request; + + request = (HgfsRequestSearchOpen *)(HGFS_REQ_PAYLOAD(req)); + +- /* We'll use these later. */ +- name = request->dirName.name; +- nameLength = &request->dirName.length; + reqSize = sizeof *request; ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ request->dirName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed\n")); ++ return -EINVAL; ++ } ++ LOG(4, ("After conversion = %s\n", request->dirName.name)); ++ request->dirName.length = result; ++ reqSize += result; + break; + } + +@@ -94,21 +109,7 @@ HgfsPackDirOpenRequest(const char *path, // IN: Path of the dir to open + return -EPROTO; + } + +- /* Convert to CP name. */ +- +- LOG(4, ("After buildPath = %s\n", path)); +- result = CPName_ConvertTo(path, +- HGFS_LARGE_PACKET_MAX - (reqSize - 1), +- name); +- if (result < 0) { +- LOG(4, ("CP conversion failed\n")); +- return -EINVAL; +- } +- +- LOG(4, ("After conversion = %s\n", name)); +- +- *nameLength = (uint32) result; +- req->payloadSize = reqSize + result; ++ req->payloadSize = reqSize; + + /* Fill in header here as payloadSize needs to be there. */ + HgfsPackHeader(req, opUsed); +@@ -149,7 +150,6 @@ HgfsDirOpen(const char* path, // IN: Path of dir to open + int result; + HgfsOp opUsed; + HgfsStatus replyStatus; +- HgfsHandle *replySearch; + + ASSERT(path); + req = HgfsGetNewRequest(); +@@ -161,16 +161,6 @@ HgfsDirOpen(const char* path, // IN: Path of dir to open + + retry: + opUsed = hgfsVersionSearchOpen; +- if (opUsed == HGFS_OP_SEARCH_OPEN_V3) { +- HgfsReplySearchOpenV3 *requestV3 = HgfsGetReplyPayload(req); +- +- replySearch = &requestV3->search; +- +- } else { +- HgfsReplySearchOpen *request = (HgfsReplySearchOpen *)HGFS_REQ_PAYLOAD(req); +- +- replySearch = &request->search; +- } + + result = HgfsPackDirOpenRequest(path, opUsed, req); + if (result != 0) { +@@ -187,8 +177,14 @@ retry: + + switch (result) { + case 0: +- *handle = *replySearch; +- LOG(6, ("Set handle to %u\n", *replySearch)); ++ if (opUsed == HGFS_OP_SEARCH_OPEN_V3) { ++ HgfsReplySearchOpenV3 *requestV3 = HgfsGetReplyPayload(req); ++ *handle = requestV3->search; ++ } else { ++ HgfsReplySearchOpen *request = (HgfsReplySearchOpen *)HGFS_REQ_PAYLOAD(req); ++ *handle = request->search; ++ } ++ LOG(6, ("Set handle to %u\n", *handle)); + break; + case -EPROTO: + /* Retry with older version(s). Set globally. */ +@@ -626,25 +622,30 @@ HgfsPackCreateDirRequest(const char *path, + HgfsOp opUsed, // IN: Op to be used. + HgfsReq *req) // IN/OUT: Packet to write into + { +- char *fileName = NULL; +- uint32 *fileNameLength; + size_t reqSize; +- int result; ++ + + ASSERT(req); + + switch (opUsed) { + case HGFS_OP_CREATE_DIR_V3: { ++ int result; + HgfsRequestCreateDirV3 *requestV3 = HgfsGetRequestPayload(req); + + reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); +- /* We'll use these later. */ +- fileName = requestV3->fileName.name; +- fileNameLength = &requestV3->fileName.length; + requestV3->fileName.flags = 0; + requestV3->fileName.fid = HGFS_INVALID_HANDLE; + requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; +- ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ requestV3->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ requestV3->fileName.length = result; ++ reqSize += result; + requestV3->mask = HGFS_CREATE_DIR_MASK; + + /* Set permissions. */ +@@ -656,15 +657,23 @@ HgfsPackCreateDirRequest(const char *path, + break; + } + case HGFS_OP_CREATE_DIR_V2: { ++ int result; + HgfsRequestCreateDirV2 *requestV2; + + requestV2 = (HgfsRequestCreateDirV2 *)(HGFS_REQ_PAYLOAD(req)); + +- /* We'll use these later. */ +- fileName = requestV2->fileName.name; +- fileNameLength = &requestV2->fileName.length; + reqSize = sizeof *requestV2; + ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ requestV2->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ requestV2->fileName.length = result; ++ reqSize += result; + requestV2->mask = HGFS_CREATE_DIR_MASK; + + /* Set permissions. */ +@@ -675,15 +684,22 @@ HgfsPackCreateDirRequest(const char *path, + break; + } + case HGFS_OP_CREATE_DIR: { ++ int result; + HgfsRequestCreateDir *request; + + request = (HgfsRequestCreateDir *)(HGFS_REQ_PAYLOAD(req)); + +- /* We'll use these later. */ +- fileName = request->fileName.name; +- fileNameLength = &request->fileName.length; + reqSize = sizeof *request; +- ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ request->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ request->fileName.length = result; ++ reqSize += result; + /* Set permissions. */ + request->permissions = (permsMode & S_IRWXU) >> 6; + break; +@@ -693,18 +709,7 @@ HgfsPackCreateDirRequest(const char *path, + return -EPROTO; + } + +- +- /* Convert to CP name. */ +- result = CPName_ConvertTo(path, +- HGFS_LARGE_PACKET_MAX - (reqSize - 1), +- fileName); +- if (result < 0) { +- LOG(4, ("CP conversion failed.\n")); +- return -EINVAL; +- } +- +- *fileNameLength = result; +- req->payloadSize = reqSize + result; ++ req->payloadSize = reqSize; + + /* Fill in header here as payloadSize needs to be there. */ + HgfsPackHeader(req, opUsed); +@@ -827,8 +832,6 @@ HgfsDelete(const char* path, // IN: Path to file + HgfsReq *req = NULL; + int result = 0; + HgfsStatus replyStatus; +- char *fileName = NULL; +- uint32 *fileNameLength; + uint32 reqSize; + HgfsOp opUsed; + HgfsAttrInfo newAttr = {0}; +@@ -862,8 +865,17 @@ HgfsDelete(const char* path, // IN: Path to file + + reqSize = sizeof(*request) + HgfsGetRequestHeaderSize(); + request->hints = 0; +- fileName = request->fileName.name; +- fileNameLength = &request->fileName.length; ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize), ++ request->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ request->fileName.length = result; ++ reqSize += result; + request->fileName.fid = HGFS_INVALID_HANDLE; + request->fileName.flags = 0; + request->fileName.caseType = HGFS_FILE_NAME_DEFAULT_CASE; +@@ -874,24 +886,21 @@ HgfsDelete(const char* path, // IN: Path to file + + request = (HgfsRequestDelete *)(HGFS_REQ_PAYLOAD(req)); + /* Fill out the request packet. */ +- fileName = request->fileName.name; +- fileNameLength = &request->fileName.length; + reqSize = sizeof *request; ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize), ++ request->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ request->fileName.length = result; ++ reqSize += result; + } + +- +- /* Convert to CP name. */ +- result = CPName_ConvertTo(path, +- HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize), +- fileName); +- if (result < 0) { +- LOG(4, ("CP conversion failed.\n")); +- result = -EINVAL; +- goto out; +- } +- +- *fileNameLength = result; +- req->payloadSize = reqSize + result; ++ req->payloadSize = reqSize; + + /* Fill in header here as payloadSize needs to be there. */ + HgfsPackHeader(req, opUsed); +diff --git a/open-vm-tools/vmhgfs-fuse/file.c b/open-vm-tools/vmhgfs-fuse/file.c +index 389ebba8..0b6c48bc 100644 +--- a/open-vm-tools/vmhgfs-fuse/file.c ++++ b/open-vm-tools/vmhgfs-fuse/file.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2013,2017 VMware, Inc. All rights reserved. ++ * Copyright (C) 2013,2018-2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -66,10 +66,7 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file + HgfsOp opUsed, // IN: Op to use + HgfsReq *req) // IN/OUT: Packet to write into + { +- char *name; +- uint32 *nameLength; + size_t reqSize; +- int result; + int openMode, openFlags; + + ASSERT(path); +@@ -88,14 +85,22 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file + + switch (opUsed) { + case HGFS_OP_OPEN_V3: { ++ int result; + HgfsRequestOpenV3 *requestV3 = HgfsGetRequestPayload(req); + + reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); + +- /* We'll use these later. */ +- name = requestV3->fileName.name; +- nameLength = &requestV3->fileName.length; ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ requestV3->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } + ++ requestV3->fileName.length = result; ++ reqSize += result; + /* Linux clients need case-sensitive lookups. */ + requestV3->fileName.flags = 0; + requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; +@@ -122,15 +127,24 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file + } + + case HGFS_OP_OPEN_V2: { ++ int result; + HgfsRequestOpenV2 *requestV2; + + requestV2 = (HgfsRequestOpenV2 *)(HGFS_REQ_PAYLOAD(req)); + +- /* We'll use these later. */ +- name = requestV2->fileName.name; +- nameLength = &requestV2->fileName.length; + reqSize = sizeof *requestV2; + ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ requestV2->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ ++ requestV2->fileName.length = result; ++ reqSize += result; + requestV2->mask = mask; + requestV2->mode = openMode; + requestV2->flags = openFlags; +@@ -148,14 +162,23 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file + break; + } + case HGFS_OP_OPEN: { ++ int result; + HgfsRequestOpen *request; + + request = (HgfsRequestOpen *)(HGFS_REQ_PAYLOAD(req)); +- /* We'll use these later. */ +- name = request->fileName.name; +- nameLength = &request->fileName.length; + reqSize = sizeof *request; + ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (reqSize - 1), ++ request->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ ++ request->fileName.length = result; ++ reqSize += result; + request->mode = openMode; + request->flags = openFlags; + +@@ -168,18 +191,7 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file + return -EPROTO; + } + +- +- /* Convert to CP name. */ +- result = CPName_ConvertTo(path, +- HGFS_LARGE_PACKET_MAX - (reqSize - 1), +- name); +- if (result < 0) { +- LOG(4, ("CP conversion failed.\n")); +- return -EINVAL; +- } +- +- *nameLength = (uint32) result; +- req->payloadSize = reqSize + result; ++ req->payloadSize = reqSize; + + /* Fill in header here as payloadSize needs to be there. */ + HgfsPackHeader(req, opUsed); +@@ -915,10 +927,6 @@ int + HgfsRename(const char* from, const char* to) + { + HgfsReq *req = NULL; +- char *oldName; +- char *newName; +- uint32 *oldNameLength; +- uint32 *newNameLength; + int result = 0; + uint32 reqSize; + HgfsOp opUsed; +@@ -942,33 +950,41 @@ retry: + if (opUsed == HGFS_OP_RENAME_V3) { + HgfsRequestRenameV3 *requestV3 = HgfsGetRequestPayload(req); + +- oldName = requestV3->oldName.name; +- oldNameLength = &requestV3->oldName.length; + requestV3->hints = 0; + requestV3->oldName.flags = 0; + requestV3->oldName.fid = HGFS_INVALID_HANDLE; + requestV3->oldName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; + requestV3->reserved = 0; + reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); ++ /* Convert old name to CP format. */ ++ result = CPName_ConvertTo(from, ++ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize), ++ requestV3->oldName.name); ++ if (result < 0) { ++ LOG(4, ("oldName CP conversion failed\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ ++ requestV3->oldName.length = result; ++ reqSize += result; + } else { + HgfsRequestRename *request = (HgfsRequestRename *)HGFS_REQ_PAYLOAD(req); + +- oldName = request->oldName.name; +- oldNameLength = &request->oldName.length; + reqSize = sizeof *request; +- } +- /* Convert old name to CP format. */ +- result = CPName_ConvertTo(from, +- HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize), +- oldName); +- if (result < 0) { +- LOG(4, ("oldName CP conversion failed\n")); +- result = -EINVAL; +- goto out; +- } ++ /* Convert old name to CP format. */ ++ result = CPName_ConvertTo(from, ++ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize), ++ request->oldName.name); ++ if (result < 0) { ++ LOG(4, ("oldName CP conversion failed\n")); ++ result = -EINVAL; ++ goto out; ++ } + +- *oldNameLength = result; +- reqSize += result; ++ request->oldName.length = result; ++ reqSize += result; ++ } + + /* + * Build full new name to send to server. +@@ -983,8 +999,20 @@ retry: + + newNameP = (HgfsFileNameV3 *)((char *)&requestV3->oldName + + sizeof requestV3->oldName + result); +- newName = newNameP->name; +- newNameLength = &newNameP->length; ++ ++ LOG(6, ("New name: \"%s\"\n", newNameP->name)); ++ ++ /* Convert new name to CP format. */ ++ result = CPName_ConvertTo(to, ++ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize) - result, ++ newNameP->name); ++ if (result < 0) { ++ LOG(4, ("newName CP conversion failed\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ newNameP->length = result; ++ reqSize += result; + newNameP->flags = 0; + newNameP->fid = HGFS_INVALID_HANDLE; + newNameP->caseType = HGFS_FILE_NAME_CASE_SENSITIVE; +@@ -993,24 +1021,22 @@ retry: + HgfsFileName *newNameP; + newNameP = (HgfsFileName *)((char *)&request->oldName + + sizeof request->oldName + result); +- newName = newNameP->name; +- newNameLength = &newNameP->length; +- } + +- LOG(6, ("New name: \"%s\"\n", newName)); ++ LOG(6, ("New name: \"%s\"\n", newNameP->name)); + +- /* Convert new name to CP format. */ +- result = CPName_ConvertTo(to, +- HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize) - result, +- newName); +- if (result < 0) { +- LOG(4, ("newName CP conversion failed\n")); +- result = -EINVAL; +- goto out; ++ /* Convert new name to CP format. */ ++ result = CPName_ConvertTo(to, ++ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize) - result, ++ newNameP->name); ++ if (result < 0) { ++ LOG(4, ("newName CP conversion failed\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ newNameP->length = result; ++ reqSize += result; + } + +- *newNameLength = result; +- reqSize += result; + req->payloadSize = reqSize; + + /* Fill in header here as payloadSize needs to be there. */ +@@ -1068,7 +1094,7 @@ retry: + } + break; + default: +- LOG(4, ("failed with result %d\n", result)); ++ LOG(4, ("Server protocol result %d\n", result)); + } + break; + default: +@@ -1109,21 +1135,17 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + { + HgfsAttrV2 *attrV2; + HgfsAttr *attrV1; +- HgfsAttrHint *hints; + HgfsAttrChanges *update; +- char *fileName = NULL; +- uint32 *fileNameLength = NULL; + size_t reqBufferSize; + size_t reqSize; +- int result = 0; + ASSERT(req); + + switch (opUsed) { + case HGFS_OP_SETATTR_V3: { ++ int result; + HgfsRequestSetattrV3 *requestV3 = HgfsGetRequestPayload(req); + + attrV2 = &requestV3->attr; +- hints = &requestV3->hints; + + /* + * Clear attributes, mask, and hints before touching them. +@@ -1131,7 +1153,7 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + * make sure to zero them all here. + */ + memset(attrV2, 0, sizeof *attrV2); +- memset(hints, 0, sizeof *hints); ++ requestV3->hints = 0; + + /* + * When possible, issue a setattr using an existing handle. This will +@@ -1143,14 +1165,21 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + * the times also requires write permissions on Windows, so we require it + * here too. Otherwise, any handle will do. + */ +- fileName = requestV3->fileName.name; +- fileNameLength = &requestV3->fileName.length; + requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; + requestV3->fileName.fid = HGFS_INVALID_HANDLE; + requestV3->fileName.flags = 0; + requestV3->reserved = 0; + reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); + reqBufferSize = HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize); ++ result = CPName_ConvertTo(path, ++ reqBufferSize, ++ requestV3->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ requestV3->fileName.length = result; ++ reqSize += result; + + attrV2->mask = attr->mask; + if (attr->mask & (HGFS_ATTR_VALID_SPECIAL_PERMS | +@@ -1173,22 +1202,22 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + } + if (attr->mask & HGFS_ATTR_VALID_ACCESS_TIME) { + attrV2->accessTime = attr->accessTime; +- *hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME; ++ requestV3->hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME; + } + if (attr->mask & HGFS_ATTR_VALID_WRITE_TIME) { + attrV2->writeTime = attr->writeTime; +- *hints |= HGFS_ATTR_HINT_SET_WRITE_TIME; ++ requestV3->hints |= HGFS_ATTR_HINT_SET_WRITE_TIME; + } + + break; + } + case HGFS_OP_SETATTR_V2: { ++ int result; + HgfsRequestSetattrV2 *requestV2; + + requestV2 = (HgfsRequestSetattrV2 *)(HGFS_REQ_PAYLOAD(req)); + + attrV2 = &requestV2->attr; +- hints = &requestV2->hints; + + /* + * Clear attributes, mask, and hints before touching them. +@@ -1196,13 +1225,19 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + * make sure to zero them all here. + */ + memset(attrV2, 0, sizeof *attrV2); +- memset(hints, 0, sizeof *hints); +- +- fileName = requestV2->fileName.name; +- fileNameLength = &requestV2->fileName.length; ++ requestV2->hints = 0; + + reqSize = sizeof *requestV2; + reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, requestV2); ++ result = CPName_ConvertTo(path, ++ reqBufferSize, ++ requestV2->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ requestV2->fileName.length = result; ++ reqSize += result; + + if (attr->mask & (HGFS_ATTR_VALID_SPECIAL_PERMS | + HGFS_ATTR_VALID_OWNER_PERMS | +@@ -1224,16 +1259,17 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + } + if (attr->mask & HGFS_ATTR_VALID_ACCESS_TIME) { + attrV2->accessTime = attr->accessTime; +- *hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME; ++ requestV2->hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME; + } + if (attr->mask & HGFS_ATTR_VALID_WRITE_TIME) { + attrV2->writeTime = attr->writeTime; +- *hints |= HGFS_ATTR_HINT_SET_WRITE_TIME; ++ requestV2->hints |= HGFS_ATTR_HINT_SET_WRITE_TIME; + } + + break; + } + case HGFS_OP_SETATTR: { ++ int result; + HgfsRequestSetattr *request; + + request = (HgfsRequestSetattr *)(HGFS_REQ_PAYLOAD(req)); +@@ -1241,11 +1277,17 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + attrV1 = &request->attr; + update = &request->update; + +- /* We'll use these later. */ +- fileName = request->fileName.name; +- fileNameLength = &request->fileName.length; + reqSize = sizeof *request; + reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, request); ++ result = CPName_ConvertTo(path, ++ reqBufferSize, ++ request->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ request->fileName.length = result; ++ reqSize += result; + + /* + * Clear attributes before touching them. +@@ -1284,16 +1326,7 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file + return -EPROTO; + } + +- result = CPName_ConvertTo(path, +- reqBufferSize, +- fileName); +- if (result < 0) { +- LOG(4, ("CP conversion failed.\n")); +- return -EINVAL; +- } +- +- *fileNameLength = result; +- req->payloadSize = reqSize + result; ++ req->payloadSize = reqSize; + + /* Fill in header here as payloadSize needs to be there. */ + HgfsPackHeader(req, opUsed); +diff --git a/open-vm-tools/vmhgfs-fuse/filesystem.c b/open-vm-tools/vmhgfs-fuse/filesystem.c +index fb9d547d..1931a5d2 100644 +--- a/open-vm-tools/vmhgfs-fuse/filesystem.c ++++ b/open-vm-tools/vmhgfs-fuse/filesystem.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2013 VMware, Inc. All rights reserved. ++ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -123,36 +123,50 @@ HgfsPackQueryVolumeRequest(const char *path, // IN: File pointer for this + HgfsOp opUsed, // IN: Op to be used. + HgfsReq *req) // IN/OUT: Packet to write into + { +- char *name; +- uint32 *nameLength; + size_t requestSize; +- int result; ++ + + ASSERT(req); + + switch (opUsed) { + case HGFS_OP_QUERY_VOLUME_INFO_V3: { ++ int result; + HgfsRequestQueryVolumeV3 *requestV3 = HgfsGetRequestPayload(req); + +- /* We'll use these later. */ +- name = requestV3->fileName.name; +- nameLength = &requestV3->fileName.length; + requestV3->fileName.flags = 0; + requestV3->fileName.fid = HGFS_INVALID_HANDLE; + requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; + requestV3->reserved = 0; + requestSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (requestSize - 1), ++ requestV3->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ requestV3->fileName.length = result; ++ requestSize += result; + break; + } + case HGFS_OP_QUERY_VOLUME_INFO: { ++ int result; + HgfsRequestQueryVolume *request; + + request = (HgfsRequestQueryVolume *)(HGFS_REQ_PAYLOAD(req)); + +- /* We'll use these later. */ +- name = request->fileName.name; +- nameLength = &request->fileName.length; + requestSize = sizeof *request; ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ HGFS_LARGE_PACKET_MAX - (requestSize - 1), ++ request->fileName.name); ++ if (result < 0) { ++ LOG(4, ("CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ request->fileName.length = result; ++ requestSize += result; + break; + } + default: +@@ -160,17 +174,7 @@ HgfsPackQueryVolumeRequest(const char *path, // IN: File pointer for this + return -EPROTO; + } + +- /* Convert to CP name. */ +- result = CPName_ConvertTo(path, +- HGFS_LARGE_PACKET_MAX - (requestSize - 1), +- name); +- if (result < 0) { +- LOG(4, ("CP conversion failed.\n")); +- return -EINVAL; +- } +- +- *nameLength = (uint32) result; +- req->payloadSize = requestSize + result; ++ req->payloadSize = requestSize; + + /* Fill in header here as payloadSize needs to be there. */ + HgfsPackHeader(req, opUsed); +diff --git a/open-vm-tools/vmhgfs-fuse/fsutil.c b/open-vm-tools/vmhgfs-fuse/fsutil.c +index 042c223c..af85c405 100644 +--- a/open-vm-tools/vmhgfs-fuse/fsutil.c ++++ b/open-vm-tools/vmhgfs-fuse/fsutil.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2013 VMware, Inc. All rights reserved. ++ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -189,8 +189,6 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer + size_t reqBufferSize; + size_t reqSize; + int result = 0; +- char *fileName = NULL; +- uint32 *fileNameLength = NULL; + ASSERT(attr); + ASSERT(req); + ASSERT(path); +@@ -204,8 +202,6 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer + + /* Fill out the request packet. */ + requestV3->hints = 0; +- fileName = requestV3->fileName.name; +- fileNameLength = &requestV3->fileName.length; + requestV3->fileName.flags = 0; + requestV3->fileName.fid = HGFS_INVALID_HANDLE; + requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; +@@ -213,6 +209,19 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer + requestV3->reserved = 0; + reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); + reqBufferSize = HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize); ++ if (requestV3->fileName.name != NULL) { ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ reqBufferSize, ++ requestV3->fileName.name); ++ LOG(8, ("Converted path %s\n", requestV3->fileName.name)); ++ if (result < 0) { ++ LOG(8, ("CP conversion failed.\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ requestV3->fileName.length = result; ++ } + break; + } + +@@ -223,20 +232,42 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer + + requestV2 = (HgfsRequestGetattrV2 *)(HGFS_REQ_PAYLOAD(req)); + requestV2->hints = 0; +- fileName = requestV2->fileName.name; +- fileNameLength = &requestV2->fileName.length; + reqSize = sizeof *requestV2; + reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, requestV2); ++ if (requestV2->fileName.name != NULL) { ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ reqBufferSize, ++ requestV2->fileName.name); ++ LOG(8, ("Converted path %s\n", requestV2->fileName.name)); ++ if (result < 0) { ++ LOG(8, ("CP conversion failed.\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ requestV2->fileName.length = result; ++ } + break; + } + + case HGFS_OP_GETATTR: { + HgfsRequestGetattr *requestV1; + requestV1 = (HgfsRequestGetattr *)(HGFS_REQ_PAYLOAD(req)); +- fileName = requestV1->fileName.name; +- fileNameLength = &requestV1->fileName.length; + reqSize = sizeof *requestV1; + reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, requestV1); ++ if (requestV1->fileName.name != NULL) { ++ /* Convert to CP name. */ ++ result = CPName_ConvertTo(path, ++ reqBufferSize, ++ requestV1->fileName.name); ++ LOG(8, ("Converted path %s\n", requestV1->fileName.name)); ++ if (result < 0) { ++ LOG(8, ("CP conversion failed.\n")); ++ result = -EINVAL; ++ goto out; ++ } ++ requestV1->fileName.length = result; ++ } + break; + } + +@@ -246,20 +277,6 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer + goto out; + } + +- if (fileName != NULL) { +- /* Convert to CP name. */ +- result = CPName_ConvertTo(path, +- reqBufferSize, +- fileName); +- LOG(8, ("Converted path %s\n", fileName)); +- if (result < 0) { +- LOG(8, ("CP conversion failed.\n")); +- result = -EINVAL; +- goto out; +- } +- *fileNameLength = result; +- } +- + req->payloadSize = reqSize + result; + + /* Fill in header here as payloadSize needs to be there. */ +diff --git a/open-vm-tools/vmhgfs-fuse/link.c b/open-vm-tools/vmhgfs-fuse/link.c +index a00e8446..777eb76e 100644 +--- a/open-vm-tools/vmhgfs-fuse/link.c ++++ b/open-vm-tools/vmhgfs-fuse/link.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2013 VMware, Inc. All rights reserved. ++ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -51,36 +51,81 @@ HgfsPackSymlinkCreateRequest(const char* symlink, // IN: path of the link + { + HgfsRequestSymlinkCreateV3 *requestV3 = NULL; + HgfsRequestSymlinkCreate *request = NULL; +- char *symlinkName; +- uint32 *symlinkNameLength; +- char *targetName; +- uint32 *targetNameLength; + size_t targetNameBytes; +- + size_t requestSize; +- int result; ++ ++ targetNameBytes = strlen(symname) + 1; + + switch (opUsed) { + case HGFS_OP_CREATE_SYMLINK_V3: { ++ int result; ++ HgfsFileNameV3 *fileNameP; + requestV3 = HgfsGetRequestPayload(req); + +- /* We'll use these later. */ +- symlinkName = requestV3->symlinkName.name; +- symlinkNameLength = &requestV3->symlinkName.length; + requestV3->symlinkName.flags = 0; + requestV3->symlinkName.fid = HGFS_INVALID_HANDLE; + requestV3->symlinkName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE; + requestV3->reserved = 0; + requestSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize(); ++ /* Convert symlink name to CP format. */ ++ result = CPName_ConvertTo(symlink, ++ HGFS_LARGE_PACKET_MAX - (requestSize - 1), ++ requestV3->symlinkName.name); ++ if (result < 0) { ++ LOG(4, ("SymlinkName CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ requestV3->symlinkName.length = result; ++ requestSize += result; ++ ++ /* Copy target name into request packet. */ ++ if (targetNameBytes > HGFS_LARGE_PACKET_MAX - (requestSize - 1)) { ++ LOG(4, ("Target name is too long.\n")); ++ return -EINVAL; ++ } ++ ++ fileNameP = (HgfsFileNameV3 *)((char *)&requestV3->symlinkName + ++ sizeof requestV3->symlinkName + result); ++ memcpy(fileNameP->name, symname, targetNameBytes); ++ LOG(6, ("Target name: \"%s\"\n", fileNameP->name)); ++ /* Convert target name to CPName-lite format. */ ++ CPNameLite_ConvertTo(fileNameP->name, targetNameBytes - 1, '/'); ++ fileNameP->length = targetNameBytes - 1; ++ fileNameP->flags = 0; ++ fileNameP->fid = HGFS_INVALID_HANDLE; ++ fileNameP->caseType = HGFS_FILE_NAME_CASE_SENSITIVE; + break; + } + case HGFS_OP_CREATE_SYMLINK: { ++ int result; ++ HgfsFileName *fileNameP; + request = (HgfsRequestSymlinkCreate *)(HGFS_REQ_PAYLOAD(req)); + +- /* We'll use these later. */ +- symlinkName = request->symlinkName.name; +- symlinkNameLength = &request->symlinkName.length; + requestSize = sizeof *request; ++ /* Convert symlink name to CP format. */ ++ result = CPName_ConvertTo(symlink, ++ HGFS_LARGE_PACKET_MAX - (requestSize - 1), ++ request->symlinkName.name); ++ if (result < 0) { ++ LOG(4, ("SymlinkName CP conversion failed.\n")); ++ return -EINVAL; ++ } ++ request->symlinkName.length = result; ++ requestSize += result; ++ ++ /* Copy target name into request packet. */ ++ if (targetNameBytes > HGFS_LARGE_PACKET_MAX - (requestSize - 1)) { ++ LOG(4, ("Target name is too long.\n")); ++ return -EINVAL; ++ } ++ ++ fileNameP = (HgfsFileName *)((char *)&request->symlinkName + ++ sizeof request->symlinkName + result); ++ memcpy(fileNameP->name, symname, targetNameBytes); ++ LOG(6, ("Target name: \"%s\"\n", fileNameP->name)); ++ /* Convert target name to CPName-lite format. */ ++ CPNameLite_ConvertTo(fileNameP->name, targetNameBytes - 1, '/'); ++ fileNameP->length = targetNameBytes - 1; + break; + } + default: +@@ -88,59 +133,13 @@ HgfsPackSymlinkCreateRequest(const char* symlink, // IN: path of the link + return -EPROTO; + } + +- +- /* Convert symlink name to CP format. */ +- result = CPName_ConvertTo(symlink, +- HGFS_LARGE_PACKET_MAX - (requestSize - 1), +- symlinkName); +- if (result < 0) { +- LOG(4, ("SymlinkName CP conversion failed.\n")); +- return -EINVAL; +- } +- +- *symlinkNameLength = result; +- req->payloadSize = requestSize + result; ++ req->payloadSize = requestSize; + + /* +- * Note the different buffer length. This is because HgfsRequestSymlink +- * contains two filenames, and once we place the first into the packet we +- * must account for it when determining the amount of buffer available for +- * the second. +- * +- * Also note that targetNameBytes accounts for the NUL character. Once +- * we've converted it to CP name, it won't be NUL-terminated and the length +- * of the string in the packet itself won't account for it. ++ * targetNameBytes accounts for the NUL character. Once we've converted ++ * it to CP name, it won't be NUL-terminated and the length of the string ++ * in the packet itself won't account for it. + */ +- if (opUsed == HGFS_OP_CREATE_SYMLINK_V3) { +- HgfsFileNameV3 *fileNameP; +- fileNameP = (HgfsFileNameV3 *)((char *)&requestV3->symlinkName + +- sizeof requestV3->symlinkName + result); +- targetName = fileNameP->name; +- targetNameLength = &fileNameP->length; +- fileNameP->flags = 0; +- fileNameP->fid = HGFS_INVALID_HANDLE; +- fileNameP->caseType = HGFS_FILE_NAME_CASE_SENSITIVE; +- } else { +- HgfsFileName *fileNameP; +- fileNameP = (HgfsFileName *)((char *)&request->symlinkName + +- sizeof request->symlinkName + result); +- targetName = fileNameP->name; +- targetNameLength = &fileNameP->length; +- } +- targetNameBytes = strlen(symname) + 1; +- +- /* Copy target name into request packet. */ +- if (targetNameBytes > HGFS_LARGE_PACKET_MAX - (requestSize - 1)) { +- LOG(4, ("Target name is too long.\n")); +- return -EINVAL; +- } +- memcpy(targetName, symname, targetNameBytes); +- LOG(6, ("Target name: \"%s\"\n", targetName)); +- +- /* Convert target name to CPName-lite format. */ +- CPNameLite_ConvertTo(targetName, targetNameBytes - 1, '/'); +- +- *targetNameLength = targetNameBytes - 1; + req->payloadSize += targetNameBytes - 1; + + /* Fill in header here as payloadSize needs to be there. */ diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/fix-subdir-objects-configure-error.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/fix-subdir-objects-configure-error.patch deleted file mode 100644 index 1a6bfdb09..000000000 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/fix-subdir-objects-configure-error.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: open-vm-tools/configure.ac -=================================================================== ---- open-vm-tools.orig/configure.ac -+++ open-vm-tools/configure.ac -@@ -303,6 +303,7 @@ AC_ARG_ENABLE( - [], - [enable_resolutionkms="auto"]) - -+AM_INIT_AUTOMAKE([subdir-objects]) - AM_INIT_AUTOMAKE - - ### diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb index 7ed659372..63a64fc71 100644 --- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb +++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb @@ -22,23 +22,24 @@ LICENSE_modules/linux = "GPL-2.0" LICENSE_modules/solaris = "CDDL-1.0" SRC_URI = "git://github.com/vmware/open-vm-tools.git;protocol=https \ - file://tools.conf \ - file://vmtoolsd.service \ - file://vmtoolsd.init \ - file://0001-configure.ac-don-t-use-dnet-config.patch \ - file://0002-add-include-sys-sysmacros.h.patch \ - file://0005-Use-configure-test-for-struct-timespec.patch \ - file://0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch \ - file://0007-Use-configure-to-test-for-feature-instead-of-platfor.patch \ - file://0011-Use-configure-test-for-sys-stat.h-include.patch \ - file://fix-subdir-objects-configure-error.patch \ - file://0001-include-poll.h-instead-of-sys-poll.h.patch \ - file://0002-Rename-poll.h-to-vm_poll.h.patch \ - file://0003-use-posix-strerror_r-unless-on-gnu-libc-system.patch \ - file://0004-Use-uintmax_t-for-handling-rlim_t.patch \ - file://0001-Use-off64_t-instead-of-__off64_t.patch \ - file://0001-misc-Do-not-print-NULL-string-into-logs.patch \ - " + file://tools.conf \ + file://vmtoolsd.service \ + file://vmtoolsd.init \ + file://0001-configure.ac-don-t-use-dnet-config.patch;patchdir=.. \ + file://0002-add-include-sys-sysmacros.h.patch;patchdir=.. \ + file://0003-Use-configure-test-for-struct-timespec.patch;patchdir=.. \ + file://0004-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch;patchdir=.. \ + file://0005-Use-configure-to-test-for-feature-instead-of-platfor.patch;patchdir=.. \ + file://0006-Use-configure-test-for-sys-stat.h-include.patch;patchdir=.. \ + file://0007-Fix-subdir-objects-configure-error.patch;patchdir=.. \ + file://0008-include-poll.h-instead-of-sys-poll.h.patch;patchdir=.. \ + file://0009-Rename-poll.h-to-vm_poll.h.patch;patchdir=.. \ + file://0010-use-posix-strerror_r-unless-on-gnu-libc-system.patch;patchdir=.. \ + file://0011-Use-uintmax_t-for-handling-rlim_t.patch;patchdir=.. \ + file://0012-Use-off64_t-instead-of-__off64_t.patch;patchdir=.. \ + file://0013-misc-Do-not-print-NULL-string-into-logs.patch;patchdir=.. \ + file://0014-Fix-new-warnings-from-gcc9.patch;patchdir=.. \ +" # stable-10.3.5 SRCREV = "f2ff192717375b95a6b7e278fb47dbb3d3bc56d1" |