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
This commit is contained in:
parent
78afdce6af
commit
b7c4ed65cc
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user