diff options
author | Cy Schubert <cy@FreeBSD.org> | 2019-11-15 16:34:41 +0000 |
---|---|---|
committer | Cy Schubert <cy@FreeBSD.org> | 2019-11-15 16:34:41 +0000 |
commit | 120137c822c9697c19cf94461f436f8ccc372d24 (patch) | |
tree | 4a81d686b2691fb831165c40e42af975b6014fbd /net/ntp/files | |
parent | df192d7752f5bf48706acd9a9f82ccee77b35e79 (diff) | |
download | ports-120137c822c9697c19cf94461f436f8ccc372d24.tar.gz ports-120137c822c9697c19cf94461f436f8ccc372d24.zip |
Disable ntpd stack gap. When ASLR with STACK GAP != 0 ntpd suffers SIGSEGV.
PR: 241421, 241960
Reported by: Vladimir Zakharov <zakharov.vv@gmail.com>,
dewayne@heuristicsystems.com.au
Reviewed by: kib, imp (previous version), ian (suggestion)
MFH: 2019Q4
Differential Revision: https://reviews.freebsd.org/D22358
Notes
Notes:
svn path=/head/; revision=517694
Diffstat (limited to 'net/ntp/files')
-rw-r--r-- | net/ntp/files/patch-ntpd_ntpd.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/net/ntp/files/patch-ntpd_ntpd.c b/net/ntp/files/patch-ntpd_ntpd.c index 3f8187a072e4..2554aa96126a 100644 --- a/net/ntp/files/patch-ntpd_ntpd.c +++ b/net/ntp/files/patch-ntpd_ntpd.c @@ -1,6 +1,43 @@ --- ntpd/ntpd.c.orig 2019-02-20 09:21:44.000000000 -0800 -+++ ntpd/ntpd.c 2019-09-20 12:11:54.469651000 -0700 -@@ -999,7 +999,7 @@ ++++ ntpd/ntpd.c 2019-11-15 08:03:34.800596000 -0800 +@@ -138,6 +138,17 @@ + # include <seccomp.h> + #endif /* LIBSECCOMP and KERN_SECCOMP */ + ++#ifdef __FreeBSD__ ++#include <sys/procctl.h> ++#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 <dns_sd.h> + DNSServiceRef mdns; +@@ -402,6 +413,18 @@ + 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 */ +@@ -999,7 +1022,7 @@ # if defined(HAVE_MLOCKALL) # ifdef HAVE_SETRLIMIT ntp_rlimit(RLIMIT_STACK, DFLT_RLIMIT_STACK * 4096, 4096, "4k"); |