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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to