Author: jlh
Date: Tue Sep 22 10:48:28 2015
New Revision: 288105
URL: https://svnweb.freebsd.org/changeset/base/288105

Log:
  Long overdue MFC r284377:
    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

Modified:
  stable/10/lib/libc/sys/stack_protector.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libc/sys/stack_protector.c
==============================================================================
--- stable/10/lib/libc/sys/stack_protector.c    Tue Sep 22 10:45:50 2015        
(r288104)
+++ stable/10/lib/libc/sys/stack_protector.c    Tue Sep 22 10:48:28 2015        
(r288105)
@@ -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
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to