Commit 3ac10021 authored by Yoni Fogel's avatar Yoni Fogel

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
parent e3277708
...@@ -62,6 +62,7 @@ check_symbol_exists(O_DIRECT "fcntl.h" HAVE_O_DIRECT) ...@@ -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(F_NOCACHE "fcntl.h" HAVE_F_NOCACHE)
check_symbol_exists(MAP_ANONYMOUS "sys/mman.h" HAVE_MAP_ANONYMOUS) 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 "sys/prctl.h" HAVE_PR_SET_PTRACER)
check_symbol_exists(PR_SET_PTRACER_ANY "sys/prctl.h" HAVE_PR_SET_PTRACER_ANY)
include(CheckFunctionExists) include(CheckFunctionExists)
......
...@@ -127,7 +127,7 @@ run_gdb(pid_t parent_pid, const char *gdb_path) { ...@@ -127,7 +127,7 @@ run_gdb(pid_t parent_pid, const char *gdb_path) {
static void static void
intermediate_process(pid_t parent_pid, const char *gdb_path) { intermediate_process(pid_t parent_pid, const char *gdb_path) {
// Disable generating of core dumps // 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); prctl(PR_SET_DUMPABLE, 0, 0, 0);
#endif #endif
pid_t worker_pid = fork(); pid_t worker_pid = fork();
...@@ -180,7 +180,7 @@ failure: ...@@ -180,7 +180,7 @@ failure:
static void static void
spawn_gdb(const char *gdb_path) { spawn_gdb(const char *gdb_path) {
pid_t parent_pid = getpid(); 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, // 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. // give permission for this process and (more importantly) all its children to debug this process.
prctl(PR_SET_PTRACER, parent_pid, 0, 0, 0); prctl(PR_SET_PTRACER, parent_pid, 0, 0, 0);
......
...@@ -208,6 +208,19 @@ typedef int64_t toku_off_t; ...@@ -208,6 +208,19 @@ typedef int64_t toku_off_t;
#endif #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) #if defined(__cplusplus)
// decltype() here gives a reference-to-pointer instead of just a pointer, // decltype() here gives a reference-to-pointer instead of just a pointer,
// just use __typeof__ // just use __typeof__
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment