From: Juergen Perlinger Date: Mon, 18 Nov 2019 06:04:58 +0000 (+0000) Subject: [Bug 3627] SIGSEGV on FreeBSD-12 with stack limit and stack gap X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3cd67fa8d862cfc1161fd36fa2e92324f04287f;p=thirdparty%2Fntp.git [Bug 3627] SIGSEGV on FreeBSD-12 with stack limit and stack gap bk: 5dd2348a1iVN4sHfn4J1yan-8Mre_Q --- diff --git a/ChangeLog b/ChangeLog index 56a2d6023..573dd533f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * [Sec 3610] process_control() should bail earlier on short packets. stenn@ - Reported by Philippe Antoine +* [Bug 3627] SIGSEGV on FreeBSD-12 with stack limit and stack gap + - integrated patch by Cy Schubert * [Bug 3620] memory leak in ntpq sysinfo - applied patch by Gerry Garvey * [Bug 3619] Honour drefid setting in cooked mode and sysinfo diff --git a/ntpd/ntpd.c b/ntpd/ntpd.c index 86c608fbd..7e050faad 100644 --- a/ntpd/ntpd.c +++ b/ntpd/ntpd.c @@ -145,6 +145,17 @@ # include #endif /* LIBSECCOMP and KERN_SECCOMP */ +#ifdef __FreeBSD__ +#include +#ifndef PROC_STACKGAP_CTL +/* + * Even if we compile on an older system we can still run on a newer one. + */ +#define PROC_STACKGAP_CTL 17 +#define PROC_STACKGAP_DISABLE 0x0002 +#endif +#endif + #ifdef HAVE_DNSREGISTRATION # include DNSServiceRef mdns; @@ -427,6 +438,18 @@ main( char *argv[] ) { +# ifdef __FreeBSD__ + { + /* + * We Must disable ASLR stack gap on FreeBSD to avoid a + * segfault. See PR/241421 and PR/241960. + */ + int aslr_var = PROC_STACKGAP_DISABLE; + + pid_t my_pid = getpid(); + procctl(P_PID, my_pid, PROC_STACKGAP_CTL, &aslr_var); + } +# endif return ntpdmain(argc, argv); } #endif /* !SYS_WINNT */