Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Jun 2015 07:47:19 +0000 (UTC)
From:      Jeremie Le Hen <jlh@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r284377 - head/lib/libc/sys
Message-ID:  <201506140747.t5E7lJvh029406@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jlh
Date: Sun Jun 14 07:47:18 2015
New Revision: 284377
URL: https://svnweb.freebsd.org/changeset/base/284377

Log:
  NetBSD commit log:
    Use a constant array for the MIB. Newer LLVM decided that mib[] warranted
    stack protections, with the obvious crash after the setup was done.
    As a positive side effect, code size shrinks a bit.
  
  I'm not sure why this hasn't bitten us yes, but it is certainly possible and
  there are no real drawbacks to this change anyway.
  
  Submitted by:	pfg
  Obtained from:	NetBSD
  MFC after:	1 week

Modified:
  head/lib/libc/sys/stack_protector.c

Modified: head/lib/libc/sys/stack_protector.c
==============================================================================
--- head/lib/libc/sys/stack_protector.c	Sun Jun 14 05:23:39 2015	(r284376)
+++ head/lib/libc/sys/stack_protector.c	Sun Jun 14 07:47:18 2015	(r284377)
@@ -41,8 +41,8 @@ __FBSDID("$FreeBSD$");
 #include <unistd.h>
 #include "libc_private.h"
 
-extern int __sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
-    void *newp, size_t newlen);
+extern int __sysctl(const int *name, u_int namelen, void *oldp,
+    size_t *oldlenp, void *newp, size_t newlen);
 
 long __stack_chk_guard[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 static void __guard_setup(void) __attribute__((__constructor__, __used__));
@@ -54,7 +54,7 @@ void __chk_fail(void);
 static void
 __guard_setup(void)
 {
-	int mib[2];
+	static const int mib[2] = { CTL_KERN, KERN_ARND };
 	size_t len;
 	int error;
 
@@ -65,12 +65,9 @@ __guard_setup(void)
 	if (error == 0 && __stack_chk_guard[0] != 0)
 		return;
 
-	mib[0] = CTL_KERN;
-	mib[1] = KERN_ARND;
-
 	len = sizeof(__stack_chk_guard);
-	if (__sysctl(mib, 2, __stack_chk_guard, &len, NULL, 0) == -1 ||
-	    len != sizeof(__stack_chk_guard)) {
+	if (__sysctl(mib, nitems(mib), __stack_chk_guard, &len, NULL, 0) ==
+	    -1 || len != sizeof(__stack_chk_guard)) {
 		/* If sysctl was unsuccessful, use the "terminator canary". */
 		((unsigned char *)(void *)__stack_chk_guard)[0] = 0;
 		((unsigned char *)(void *)__stack_chk_guard)[1] = 0;



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