From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13414 invoked by alias); 6 Mar 2012 08:35:50 -0000 Received: (qmail 13370 invoked by uid 22791); 6 Mar 2012 08:35:48 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO glazunov.sibelius.xs4all.nl) (83.163.83.176) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Mar 2012 08:35:34 +0000 Received: from glazunov.sibelius.xs4all.nl (kettenis@localhost [127.0.0.1]) by glazunov.sibelius.xs4all.nl (8.14.5/8.14.3) with ESMTP id q268ZUOG017939; Tue, 6 Mar 2012 09:35:30 +0100 (CET) Received: (from kettenis@localhost) by glazunov.sibelius.xs4all.nl (8.14.5/8.14.3/Submit) id q268ZSZY010637; Tue, 6 Mar 2012 09:35:28 +0100 (CET) Date: Tue, 06 Mar 2012 08:35:00 -0000 Message-Id: <201203060835.q268ZSZY010637@glazunov.sibelius.xs4all.nl> From: Mark Kettenis To: jan.kratochvil@redhat.com CC: gdb-patches@sourceware.org In-reply-to: <20120306061739.GC24004@host2.jankratochvil.net> (message from Jan Kratochvil on Tue, 6 Mar 2012 07:17:39 +0100) Subject: Re: [patch 3/3] attach-fail-reasons: SELinux deny_ptrace References: <20120306061739.GC24004@host2.jankratochvil.net> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-03/txt/msg00173.txt.bz2 > Date: Tue, 6 Mar 2012 07:17:39 +0100 > From: Jan Kratochvil > > Hi, > > and here is the last bit for new SELinux 'deny_ptrace': > https://bugzilla.redhat.com/show_bug.cgi?id=786878 > > As even PTRACE_TRACEME fails in such case it needs to install hook for even > that event. A few comments inline below... > --- a/gdb/gdbserver/linux-low.c > +++ b/gdb/gdbserver/linux-low.c > @@ -550,6 +550,25 @@ add_lwp (ptid_t ptid) > return lwp; > } > > +/* Execute PTRACE_TRACEME with error checking. */ > + > +static void > +linux_traceme (const char *program) > +{ > + int save_errno; > + > + errno = 0; > + if (ptrace (PTRACE_TRACEME, 0, NULL, NULL) == 0) > + return; Setting errno to zero here is pointless isn't it? > + save_errno = errno; > + linux_ptrace_create_warnings (); > + fprintf (stderr, _("Cannot trace created process %s: %s.\n"), program, > + strerror (save_errno)); > + fflush (stderr); > + _exit (0177); > +} > --- a/gdb/inf-ptrace.c > +++ b/gdb/inf-ptrace.c > @@ -105,7 +105,15 @@ static void > inf_ptrace_me (void) > { > /* "Trace me, Dr. Memory!" */ > + errno = 0; > ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3)0, 0); > + if (errno != 0) > + { > + fprintf_unfiltered (gdb_stderr, _("Cannot create process: %s\n"), "Cannot trace process: %s"? > + safe_strerror (errno)); > + gdb_flush (gdb_stderr); > + _exit (0177); > + } > }