Author: cy
Date: Wed Nov 27 03:18:35 2019
New Revision: 355127
URL: https://svnweb.freebsd.org/changeset/base/355127

Log:
  MFC rr354733:
  Disable ntpd stack gap. When ASLR with STACK GAP != 0 ntpd suffers SIGSEGV.
  
  PR:           241421, 241960
  Reported by:  Vladimir Zakharov <zakharov...@gmail.com>,
                dewa...@heuristicsystems.com.au
  Reviewed by:  kib, imp (previous version), ian (suggestion)
  Differential Revision:        https://reviews.freebsd.org/D22358

Modified:
  stable/12/contrib/ntp/ntpd/ntpd.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/contrib/ntp/ntpd/ntpd.c
==============================================================================
--- stable/12/contrib/ntp/ntpd/ntpd.c   Wed Nov 27 01:54:39 2019        
(r355126)
+++ stable/12/contrib/ntp/ntpd/ntpd.c   Wed Nov 27 03:18:35 2019        
(r355127)
@@ -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 @@ 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 */
_______________________________________________
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