svn commit: r246197 - stable/9/lib/libc/gen

Xin LI delphij at FreeBSD.org
Fri Feb 1 07:36:22 UTC 2013


Author: delphij
Date: Fri Feb  1 07:36:22 2013
New Revision: 246197
URL: http://svnweb.freebsd.org/changeset/base/246197

Log:
  MFC r244568:
  
   - Reduce buffer size from LINE_MAX to PATH_MAX, there is no point to store
     path longer than this.
   - Fix an unreached case of check against sizeof buf, which in turn leads
     to an off-by-one nul byte write on the stack.  The original condition
     can never be satisfied because the passed boundary is the maximum value
     that can be returned, so code was harmless.

Modified:
  stable/9/lib/libc/gen/check_utility_compat.c
Directory Properties:
  stable/9/lib/libc/   (props changed)

Modified: stable/9/lib/libc/gen/check_utility_compat.c
==============================================================================
--- stable/9/lib/libc/gen/check_utility_compat.c	Fri Feb  1 07:26:25 2013	(r246196)
+++ stable/9/lib/libc/gen/check_utility_compat.c	Fri Feb  1 07:36:22 2013	(r246197)
@@ -35,32 +35,28 @@ __FBSDID("$FreeBSD$");
  * are threaded, so I'm not concerned about cancellation points or other
  * niceties.
  */
+#include <sys/limits.h>
+
 #include <limits.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
-#ifndef LINE_MAX
-#define	LINE_MAX _POSIX2_LINE_MAX
-#endif
-
 #define	_PATH_UTIL_COMPAT	"/etc/compat-FreeBSD-4-util"
 #define	_ENV_UTIL_COMPAT	"_COMPAT_FreeBSD_4"
 
 int
 check_utility_compat(const char *utility)
 {
-	char buf[LINE_MAX];
+	char buf[PATH_MAX];
 	char *p, *bp;
 	int len;
 
 	if ((p = getenv(_ENV_UTIL_COMPAT)) != NULL) {
 		strlcpy(buf, p, sizeof buf);
 	} else {
-		if ((len = readlink(_PATH_UTIL_COMPAT, buf, sizeof buf)) < 0)
+		if ((len = readlink(_PATH_UTIL_COMPAT, buf, sizeof(buf) - 1)) < 0)
 			return 0;
-		if (len > sizeof buf)
-			len = sizeof buf;
 		buf[len] = '\0';
 	}
 	if (buf[0] == '\0')


More information about the svn-src-all mailing list