Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Mar 2018 22:56:54 +0000 (UTC)
From:      Josh Paetzel <jpaetzel@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r464095 - in head/emulators/open-vm-tools: . files
Message-ID:  <201803102256.w2AMuskF018821@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jpaetzel
Date: Sat Mar 10 22:56:54 2018
New Revision: 464095
URL: https://svnweb.freebsd.org/changeset/ports/464095

Log:
  Fix bug that causes crashes when running commands from the host
  
  PR:	226478
  Submitted by:	german.mb@gmail.com
  Reviewed by:	John Wolfe <jwolfe@vmware.com>

Added:
  head/emulators/open-vm-tools/files/patch-lib_auth_authPosix.c   (contents, props changed)
  head/emulators/open-vm-tools/files/patch-lib_file_fileTempPosix.c   (contents, props changed)
Modified:
  head/emulators/open-vm-tools/Makefile
  head/emulators/open-vm-tools/files/patch-services_plugins_vix_vixTools.c

Modified: head/emulators/open-vm-tools/Makefile
==============================================================================
--- head/emulators/open-vm-tools/Makefile	Sat Mar 10 22:43:38 2018	(r464094)
+++ head/emulators/open-vm-tools/Makefile	Sat Mar 10 22:56:54 2018	(r464095)
@@ -4,7 +4,7 @@
 PORTNAME=		open-vm-tools
 PORTVERSION=		${RELEASE_VER}
 DISTVERSIONPREFIX=	stable-
-PORTREVISION=		3
+PORTREVISION=		4
 PORTEPOCH=		2
 CATEGORIES=		emulators
 

Added: head/emulators/open-vm-tools/files/patch-lib_auth_authPosix.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/emulators/open-vm-tools/files/patch-lib_auth_authPosix.c	Sat Mar 10 22:56:54 2018	(r464095)
@@ -0,0 +1,45 @@
+--- lib/auth/authPosix.c.orig	2017-12-15 21:11:49 UTC
++++ lib/auth/authPosix.c
+@@ -1,5 +1,5 @@
+ /*********************************************************
+- * Copyright (C) 2003-2017 VMware, Inc. All rights reserved.
++ * Copyright (C) 2003-2018 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
+@@ -19,6 +19,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <errno.h>
+ #include <unistd.h> // for access, crypt, etc.
+ #if !defined USE_PAM && !defined __APPLE__
+ #include <shadow.h>
+@@ -262,8 +263,8 @@ static struct pam_conv PAM_conversation = {
+ static AuthTokenInternal *
+ AuthAllocateToken(void)
+ {
++   long bufSize;
+    AuthTokenInternal *ati;
+-   size_t bufSize;
+ 
+    /*
+     * We need to get the maximum size buffer needed by getpwuid_r from
+@@ -271,9 +272,15 @@ AuthAllocateToken(void)
+     * by the Posix_Get*_r() wrappers.
+     */
+ 
+-   bufSize = (size_t) sysconf(_SC_GETPW_R_SIZE_MAX) * 4;
++   errno = 0;
++   bufSize = sysconf(_SC_GETPW_R_SIZE_MAX);
++   if ((errno != 0) || (bufSize <= 0)) {
++      bufSize = 16 * 1024;  // Unlimited; pick something reasonable
++   }
+ 
+-   ati = Util_SafeMalloc(sizeof *ati + bufSize);
++   bufSize *= 4;
++
++   ati = Util_SafeMalloc(sizeof *ati + (size_t) bufSize);
+    ati->bufSize = bufSize;
+ 
+    return ati;

Added: head/emulators/open-vm-tools/files/patch-lib_file_fileTempPosix.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/emulators/open-vm-tools/files/patch-lib_file_fileTempPosix.c	Sat Mar 10 22:56:54 2018	(r464095)
@@ -0,0 +1,21 @@
+--- lib/file/fileTempPosix.c.orig	2017-12-15 21:11:49 UTC
++++ lib/file/fileTempPosix.c
+@@ -203,12 +203,17 @@ FileGetUserName(uid_t uid)  // IN:
+ #if defined(__APPLE__)
+    memPoolSize = _PASSWORD_LEN;
+ #else
++   errno = 0;
+    memPoolSize = sysconf(_SC_GETPW_R_SIZE_MAX);
+ 
+-   if (memPoolSize <= 0) {
++   if ((errno != 0) || (memPoolSize == 0)) {
+       Warning("%s: sysconf(_SC_GETPW_R_SIZE_MAX) failed.\n", __FUNCTION__);
+ 
+       return NULL;
++   }
++
++   if (memPoolSize == -1) {  // Unlimited; pick something reasonable
++      memPoolSize = 16 * 1024;
+    }
+ #endif
+ 

Modified: head/emulators/open-vm-tools/files/patch-services_plugins_vix_vixTools.c
==============================================================================
--- head/emulators/open-vm-tools/files/patch-services_plugins_vix_vixTools.c	Sat Mar 10 22:43:38 2018	(r464094)
+++ head/emulators/open-vm-tools/files/patch-services_plugins_vix_vixTools.c	Sat Mar 10 22:56:54 2018	(r464095)
@@ -1,29 +1,29 @@
---- services/plugins/vix/vixTools.c.orig	2017-12-15 21:11:49 UTC
+--- services/plugins/vix/vixTools.c.orig	2018-02-24 17:50:37 UTC
 +++ services/plugins/vix/vixTools.c
-@@ -52,6 +52,7 @@
- #include <stdarg.h>
- #include <fcntl.h>
- #include <errno.h>
-+#include <limits.h>
+@@ -10135,7 +10135,7 @@ abort:
+    struct passwd pwd;
+    struct passwd *ppwd = &pwd;
+    char *buffer = NULL; // a pool of memory for Posix_Getpwnam_r() to use.
+-   size_t bufferSize;
++   long bufferSize;
  
- #ifdef _WIN32
- #include <WTypes.h>
-@@ -7330,7 +7331,7 @@ VixToolsRunScript(VixCommandRequestHeader *requestMsg,
-          goto abort;
-       }
-    }
--   for (var = 0; var <= 0xFFFFFFFF; var++) {
-+   for (var = 0; ; var++) {
-       free(tempScriptFilePath);
-       tempScriptFilePath = Str_SafeAsprintf(NULL,
-                                             "%s"DIRSEPS"%s%d%s",
-@@ -7372,6 +7373,9 @@ VixToolsRunScript(VixCommandRequestHeader *requestMsg,
-           * deletes it), we should not try 4+ billion times.
-           */
-          break;
-+      }
-+      if (var == INT_MAX) {
-+          break;
-       }
-    }
-    if (fd < 0) {
+    /*
+     * For POSIX systems, look up the uid of 'username', and compare
+@@ -10148,9 +10148,15 @@ abort:
+     * Multiply by 4 to compensate for the conversion to UTF-8 by
+     * the Posix_Getpwnam_r() wrapper.
+     */
+-   bufferSize = (size_t) sysconf(_SC_GETPW_R_SIZE_MAX) * 4;
++   errno = 0;
++   bufferSize = sysconf(_SC_GETPW_R_SIZE_MAX);
++   if ((errno != 0) || (bufferSize <= 0)) {
++      bufferSize = 16 * 1024;  // Unlimited; pick something reasonable
++   }
+ 
+-   buffer = Util_SafeMalloc(bufferSize);
++   bufferSize *= 4;
++
++   buffer = Util_SafeMalloc((size_t)bufferSize);
+ 
+    if (Posix_Getpwnam_r(username, &pwd, buffer, bufferSize, &ppwd) != 0 ||
+        NULL == ppwd) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803102256.w2AMuskF018821>