public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Sergio Durigan Junior <sergiodj@redhat.com>
Cc: GDB Patches <gdb-patches@sourceware.org>,
	Eli Zaretskii <eliz@gnu.org>,
	Ruslan Kabatsayev <b7.10110111@gmail.com>
Subject: Re: [PATCH v2] Improve ptrace-error detection on Linux targets
Date: Thu, 05 Sep 2019 12:19:00 -0000	[thread overview]
Message-ID: <491150f7-636f-4629-ac68-2a4597bd703d@redhat.com> (raw)
In-Reply-To: <871rwvrbf5.fsf@redhat.com>

On 9/4/19 10:36 PM, Sergio Durigan Junior wrote:
> On Wednesday, September 04 2019, Pedro Alves wrote:
> 
>> On 9/4/19 9:56 PM, Sergio Durigan Junior wrote:
>>>> You could start gdbserver with the restrictions off (like a long
>>>> lived daemon), and then while gdbserver is running enable
>>>> restrictions, I suppose.
>>> Ah, right, I think that would also work.
>>
>> I'm interested in knowing whether the error percolates to
>> the gdb side in a reasonable form.
> 
> The attach error is displayed by GDB, but the information about ptrace
> restrictions is not.
> 
> This is what I see on GDB:
> 
>   (gdb) attach 32378
>   Attaching to process 32378
>   Attaching to process 32378 failed
> 
> And this is what I see on gdbserver:
> 
>   gdbserver: Cannot attach to process 32378: Permission denied (13), the SELinux boolean 'deny_ptrace' is enabled, you can disable this process attach protection by: (gdb) shell sudo setsebool deny_ptrace=0
> 
> 
> I think there's something wrong with the terminal settings because
> newlines aren't being respected here.  But the message is still there,
> and the user can still understand it, I think.

Odd.  We should fix that...

But this made me realize something.  Here:

  static int
  linux_child_function (void *child_stack)
  {
 -  ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
 +  if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0,
 +             (PTRACE_TYPE_ARG4) 0) != 0)
 +    trace_start_error_with_name ("ptrace",
 +                                linux_ptrace_me_fail_reason (errno).c_str ());
 +

This is code that is run by the fork child.  Recall that we 
had introduced trace_start_error_with_name instead of using
perror_with_name / error, because between after fork and before
exec, we can only safely use async-signal-safe functions.

But that linux_ptrace_me_fail_reason call is doing a lot of
non-async-signal safe things...

I think the right approach would be to make the child pass back the errno
value to the parent, and then have the parent, do the dlopens, the
std::string/malloc uses, etc. and print the error messages.

The traditional way to pass data around like this is via a pipe.
darwin-nat.c uses a pipe around fork, see ptrace_fds, though for a
different reason.

> Ideally we'd have GDB also display the ptrace restriction warning, but I
> think that if the user can see that the attach failed, she will likely
> look at what happened with gdbserver, and will see the error there.  

I don't think that assuming that the user has easy/convenient access
to gdbserver's terminal is a great assumption.  Consider IDEs automating
things, or gdbserver really being used as a service in a container, etc.

Note that at least for Yama, you can have ptrace allow PTRACE_ME, while
PTRACE_ATTACH gets refused.  So it's not guaranteed that gdbserver would
exit out early on start up, meaning, I think that handling this
gdbserver + "(gdb) attach" error case isn't being pedantic.

> If
> we were to show the message on GDB, we'd also have to rewrite it in a
> way that explains that the command needs to be run at the target, which
> may confuse things.
Or it may not confuse things?  I don't think that should prevent
improving things.  Surely we can find some way to express the message
without causing confusion.  I'm not sure it does, but if it does,
maybe we can just append a "on the target system" somewhere?

Thanks,
Pedro Alves

  reply	other threads:[~2019-09-05 12:19 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-19  3:29 [PATCH] " Sergio Durigan Junior
2019-08-19  9:10 ` Ruslan Kabatsayev
2019-08-19 13:47   ` Sergio Durigan Junior
2019-08-19 14:57     ` Ruslan Kabatsayev
2019-08-19 16:30     ` Christian Biesinger via gdb-patches
2019-08-19 17:04       ` Sergio Durigan Junior
2019-08-19 14:33 ` Eli Zaretskii
2019-08-25 22:38   ` Sergio Durigan Junior
2019-08-19 18:26 ` Pedro Alves
2019-08-25 22:40   ` Sergio Durigan Junior
2019-08-26 18:32 ` [PATCH v2] " Sergio Durigan Junior
2019-08-26 18:35   ` Christian Biesinger via gdb-patches
2019-08-26 20:51     ` Sergio Durigan Junior
2019-08-26 18:44   ` Eli Zaretskii
2019-08-29 14:40   ` Pedro Alves
2019-08-29 19:27     ` Sergio Durigan Junior
2019-08-29 19:48       ` Sergio Durigan Junior
2019-08-30 19:03         ` Pedro Alves
2019-08-30 19:51         ` [PATCH] Remove "\nError: " suffix from nat/fork-inferior.c:trace_start_error warning message Sergio Durigan Junior
2019-08-30 19:54           ` Pedro Alves
2019-08-30 21:06             ` Sergio Durigan Junior
2019-08-30 12:45       ` [PATCH v2] Improve ptrace-error detection on Linux targets Pedro Alves
2019-09-04 19:21         ` Sergio Durigan Junior
2019-09-04 19:31         ` Sergio Durigan Junior
2019-09-04 19:58           ` Pedro Alves
2019-09-04 20:21             ` Sergio Durigan Junior
2019-09-04 20:35               ` Pedro Alves
2019-09-04 20:56                 ` Sergio Durigan Junior
2019-09-04 21:23                   ` Pedro Alves
2019-09-04 21:36                     ` Sergio Durigan Junior
2019-09-05 12:19                       ` Pedro Alves [this message]
2019-09-05 17:58                         ` Sergio Durigan Junior
2019-08-30 12:47   ` Pedro Alves
2019-08-30 14:07     ` Eli Zaretskii
2019-08-30 19:44       ` Sergio Durigan Junior
2019-09-04 19:54 ` [PATCH v3] " Sergio Durigan Junior
2019-09-05 17:04   ` Eli Zaretskii
2019-09-11  1:11 ` [PATCH v4] " Sergio Durigan Junior
2019-09-12 12:39   ` Eli Zaretskii
2019-09-12 18:29     ` Sergio Durigan Junior
2019-09-24 20:40   ` Tom Tromey
2019-09-25 14:14     ` Sergio Durigan Junior
2019-09-25 22:04       ` Tom Tromey
2019-09-26  4:22         ` Sergio Durigan Junior
2019-09-26  4:22 ` [PATCH v5] " Sergio Durigan Junior
2019-09-26 17:32   ` Tom Tromey
2019-09-26 17:48     ` Pedro Alves
2019-09-26 17:51       ` Sergio Durigan Junior
2019-09-26 18:14         ` Pedro Alves
2019-09-26 18:25           ` Sergio Durigan Junior
2019-09-26 17:50     ` Sergio Durigan Junior
2019-09-26 18:13   ` Pedro Alves
2019-09-26 18:23     ` Sergio Durigan Junior
2020-02-26 20:06   ` [PATCH 0/6] Improve ptrace-error detection Sergio Durigan Junior
2020-02-26 20:06     ` [PATCH 6/6] Fix comment for 'gdb_dlopen' Sergio Durigan Junior
2020-02-26 20:23       ` Christian Biesinger via gdb-patches
2020-02-26 20:49         ` Sergio Durigan Junior
2020-02-28 15:21       ` Tom Tromey
2020-02-28 16:05         ` Sergio Durigan Junior
2020-02-26 20:06     ` [PATCH 3/6] Expand 'fork_inferior' to check whether 'traceme_fun' succeeded Sergio Durigan Junior
2020-02-26 20:06     ` [PATCH 2/6] Don't reset errno/bfd_error on 'throw_perror_with_name' Sergio Durigan Junior
2020-02-28 15:29       ` Tom Tromey
2020-02-28 16:36         ` Sergio Durigan Junior
2020-02-28 18:58           ` Tom Tromey
2020-02-28 19:50             ` Sergio Durigan Junior
2020-02-28 20:06         ` Pedro Alves
2020-02-28 20:35           ` Sergio Durigan Junior
2020-02-28 21:11             ` Pedro Alves
2020-03-02 20:07               ` Sergio Durigan Junior
2020-02-28 19:49       ` Pedro Alves
2020-02-28 20:01         ` Sergio Durigan Junior
2020-02-26 20:06     ` [PATCH 5/6] Document Linux-specific possible ptrace restrictions Sergio Durigan Junior
2020-02-26 21:00       ` Ruslan Kabatsayev
2020-02-26 22:08         ` Sergio Durigan Junior
2020-02-26 20:06     ` [PATCH 4/6] Extend GNU/Linux to check for ptrace error Sergio Durigan Junior
2020-02-26 20:06     ` [PATCH 1/6] Introduce scoped_pipe.h Sergio Durigan Junior
2020-02-28 15:23       ` Tom Tromey
2020-02-28 16:08         ` Sergio Durigan Junior
2020-02-28 18:57           ` Tom Tromey
2020-02-28 19:48             ` Sergio Durigan Junior
2020-02-28 19:20       ` Pedro Alves
2020-02-28 19:47         ` Sergio Durigan Junior
2020-02-28 20:07           ` Pedro Alves
     [not found]     ` <87v9nh3yme.fsf@redhat.com>
2020-03-15  4:21       ` [PATCH 0/6] Improve ptrace-error detection Sergio Durigan Junior
2020-03-15 21:16         ` Kevin Buettner
2020-03-17 15:47     ` [PATCH v2 0/5] " Sergio Durigan Junior
2020-03-17 15:47       ` [PATCH v2 1/5] Introduce scoped_pipe.h Sergio Durigan Junior
2020-03-17 15:47       ` [PATCH v2 2/5] Don't reset errno/bfd_error on 'throw_perror_with_name' Sergio Durigan Junior
2020-03-27 18:20         ` Pedro Alves
2020-03-17 15:47       ` [PATCH v2 3/5] Expand 'fork_inferior' to check whether 'traceme_fun' succeeded Sergio Durigan Junior
2020-03-27  4:14         ` Kevin Buettner
2020-03-27 13:06         ` Pedro Alves
2020-03-17 15:47       ` [PATCH v2 4/5] Extend GNU/Linux to check for ptrace error Sergio Durigan Junior
2020-03-27 15:28         ` Pedro Alves
2020-03-27 17:02         ` Kevin Buettner
2020-03-17 15:47       ` [PATCH v2 5/5] Document Linux-specific possible ptrace restrictions Sergio Durigan Junior
2020-03-20  0:53       ` [PATCH v2 0/5] Improve ptrace-error detection Kevin Buettner
2020-03-24 18:23         ` Sergio Durigan Junior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=491150f7-636f-4629-ac68-2a4597bd703d@redhat.com \
    --to=palves@redhat.com \
    --cc=b7.10110111@gmail.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=sergiodj@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).