mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 11:31:51 +01:00
Refs Tokutek/ft-index#28 Use prctl (on any linux) even if it is too old for PR_SET_PTRACER.
Ignore any error caused by this
This commit is contained in:
parent
53a9e3fa6a
commit
403991aaae
3 changed files with 16 additions and 2 deletions
|
@ -62,6 +62,7 @@ check_symbol_exists(O_DIRECT "fcntl.h" HAVE_O_DIRECT)
|
|||
check_symbol_exists(F_NOCACHE "fcntl.h" HAVE_F_NOCACHE)
|
||||
check_symbol_exists(MAP_ANONYMOUS "sys/mman.h" HAVE_MAP_ANONYMOUS)
|
||||
check_symbol_exists(PR_SET_PTRACER "sys/prctl.h" HAVE_PR_SET_PTRACER)
|
||||
check_symbol_exists(PR_SET_PTRACER_ANY "sys/prctl.h" HAVE_PR_SET_PTRACER_ANY)
|
||||
|
||||
include(CheckFunctionExists)
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ run_gdb(pid_t parent_pid, const char *gdb_path) {
|
|||
static void
|
||||
intermediate_process(pid_t parent_pid, const char *gdb_path) {
|
||||
// Disable generating of core dumps
|
||||
#if defined(HAVE_SYS_PRCTL_H) && defined(HAVE_PR_SET_PTRACER)
|
||||
#if defined(HAVE_SYS_PRCTL_H)
|
||||
prctl(PR_SET_DUMPABLE, 0, 0, 0);
|
||||
#endif
|
||||
pid_t worker_pid = fork();
|
||||
|
@ -180,7 +180,7 @@ failure:
|
|||
static void
|
||||
spawn_gdb(const char *gdb_path) {
|
||||
pid_t parent_pid = getpid();
|
||||
#if defined(HAVE_SYS_PRCTL_H) && defined(HAVE_PR_SET_PTRACER)
|
||||
#if defined(HAVE_SYS_PRCTL_H)
|
||||
// On systems that require permission for the same user to ptrace,
|
||||
// give permission for this process and (more importantly) all its children to debug this process.
|
||||
prctl(PR_SET_PTRACER, parent_pid, 0, 0, 0);
|
||||
|
|
|
@ -208,6 +208,19 @@ typedef int64_t toku_off_t;
|
|||
|
||||
#endif
|
||||
|
||||
// Define some constants for Yama in case the build-machine's software is too old.
|
||||
#if !defined(HAVE_PR_SET_PTRACER)
|
||||
/*
|
||||
* Set specific pid that is allowed to ptrace the current task.
|
||||
* A value of 0 mean "no process".
|
||||
*/
|
||||
// Well defined ("Yama" in ascii)
|
||||
#define PR_SET_PTRACER 0x59616d61
|
||||
#endif
|
||||
#if !defined(HAVE_PR_SET_PTRACER_ANY)
|
||||
#define PR_SET_PTRACER_ANY ((unsigned long)-1)
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
// decltype() here gives a reference-to-pointer instead of just a pointer,
|
||||
// just use __typeof__
|
||||
|
|
Loading…
Add table
Reference in a new issue