svn commit: r288105 - stable/10/lib/libc/sys

Jeremie Le Hen jlh at FreeBSD.org
Tue Sep 22 10:48:29 UTC 2015


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;


More information about the svn-src-stable-10 mailing list