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)
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D22358
This commit is contained in:
Cy Schubert 2019-11-15 16:34:35 +00:00
parent 299cb52a80
commit 5526318062
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=354733

View File

@ -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 */