isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 121448ceb9f9df03d88672917fe04506f783c76c
parent bee4fc54e7a3cf6e1965efeaa068ca8db4ba976f
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Tue,  3 Dec 2019 13:00:19 +0100

make -DC work with yama ptrace protection

Diffstat:
Msrc/main.c | 20++++++++++++++++++++
1 file changed, 20 insertions(+), 0 deletions(-)

diff --git a/src/main.c b/src/main.c @@ -30,6 +30,9 @@ #include <signal.h> #include <time.h> #include <sys/wait.h> +#ifdef __linux__ +# include <sys/prctl.h> +#endif int DFlags; int JLimit; @@ -144,17 +147,34 @@ crashHandler( int n ) dup2( 0, 1 ); dup2( 0, 2 ); error( "*** " EXE " caught signal %d. Starting debugger ...\n", n ); +#ifdef PR_SET_PTRACER + int pip[2]; + if (pipe( pip ) < 0) { + perror( "pipe()" ); + exit( 3 ); + } +#endif switch ((dpid = fork())) { case -1: perror( "fork()" ); break; case 0: +#ifdef PR_SET_PTRACER + close( pip[1] ); + read( pip[0], pbuf, 1 ); + close( pip[0] ); +#endif sprintf( pbuf, "%d", Pid ); sprintf( pabuf, "/proc/%d/exe", Pid ); execlp( "gdb", "gdb", pabuf, pbuf, (char *)0 ); perror( "execlp()" ); _exit( 1 ); default: +#ifdef PR_SET_PTRACER + prctl( PR_SET_PTRACER, (ulong)dpid ); + close( pip[1] ); + close( pip[0] ); +#endif waitpid( dpid, 0, 0 ); break; }