1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-13 07:41:39 +03:00

Make EXEC_BACKEND more convenient on Linux and FreeBSD.

Try to disable ASLR when building in EXEC_BACKEND mode, to avoid random
memory mapping failures while testing.  For developer use only, no
effect on regular builds.

Suggested-by: Andres Freund <andres@anarazel.de>
Tested-by: Bossart, Nathan <bossartn@amazon.com>
Discussion: https://postgr.es/m/20210806032944.m4tz7j2w47mant26%40alap3.anarazel.de
This commit is contained in:
Thomas Munro
2022-01-10 23:54:11 +13:00
parent ee41960738
commit f3e78069db
8 changed files with 52 additions and 1 deletions

View File

@ -25,6 +25,14 @@
#include <sys/wait.h>
#include <unistd.h>
#ifdef EXEC_BACKEND
#if defined(HAVE_SYS_PERSONALITY_H)
#include <sys/personality.h>
#elif defined(HAVE_SYS_PROCCTL_H)
#include <sys/procctl.h>
#endif
#endif
/*
* Hacky solution to allow expressing both frontend and backend error reports
* in one macro call. First argument of log_error is an errcode() call of
@ -470,6 +478,31 @@ set_pglocale_pgservice(const char *argv0, const char *app)
}
}
#ifdef EXEC_BACKEND
/*
* For the benefit of PostgreSQL developers testing EXEC_BACKEND on Unix
* systems (code paths normally exercised only on Windows), provide a way to
* disable address space layout randomization, if we know how on this platform.
* Otherwise, backends may fail to attach to shared memory at the fixed address
* chosen by the postmaster. (See also the macOS-specific hack in
* sysv_shmem.c.)
*/
int
pg_disable_aslr(void)
{
#if defined(HAVE_SYS_PERSONALITY_H)
return personality(ADDR_NO_RANDOMIZE);
#elif defined(HAVE_SYS_PROCCTL_H) && defined(PROC_ASLR_FORCE_DISABLE)
int data = PROC_ASLR_FORCE_DISABLE;
return procctl(P_PID, 0, PROC_ASLR_CTL, &data);
#else
errno = ENOSYS;
return -1;
#endif
}
#endif
#ifdef WIN32
/*