Author: cy
Date: Fri Nov 15 16:34:35 2019
New Revision: 354733
URL: https://svnweb.freebsd.org/changeset/base/354733

Log:
  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)
  MFC after:    3 days
  Differential Revision:        https://reviews.freebsd.org/D22358

Modified:
  head/contrib/ntp/ntpd/ntpd.c

Modified: head/contrib/ntp/ntpd/ntpd.c
==============================================================================
--- head/contrib/ntp/ntpd/ntpd.c        Fri Nov 15 16:21:46 2019        
(r354732)
+++ head/contrib/ntp/ntpd/ntpd.c        Fri Nov 15 16:34:35 2019        
(r354733)
@@ -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