Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
To: "Schimpe, Christina" <christina.schimpe@intel.com>
Cc: Guinevere Larsen <guinevere@redhat.com>,
	 "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH 02/12] gdbserver: Add optional runtime register set type.
Date: Wed, 05 Feb 2025 23:59:48 -0300	[thread overview]
Message-ID: <87tt97ixqz.fsf@linaro.org> (raw)
In-Reply-To: <SN7PR11MB763841E1B5421BB082BED8BAF9E92@SN7PR11MB7638.namprd11.prod.outlook.com> (Christina Schimpe's message of "Thu, 30 Jan 2025 10:28:18 +0000")


"Schimpe, Christina" <christina.schimpe@intel.com> writes:

>> -----Original Message-----
>> From: Guinevere Larsen <guinevere@redhat.com>
>> Sent: Tuesday, January 28, 2025 2:35 PM
>> To: Schimpe, Christina <christina.schimpe@intel.com>; gdb-
>> patches@sourceware.org
>> Subject: Re: [PATCH 02/12] gdbserver: Add optional runtime register set type.
>>
>> On 12/20/24 5:04 PM, Schimpe, Christina wrote:
>> > Some register sets can be activated and deactivated by the OS during
>> > the runtime of a process.  One example register is the Intel CET
>> > shadow stack pointer.  This adds a new type of register set to handle
>> > such cases.  We shouldn't deactivate these regsets and should not show
>> > a warning if we fail to read them.
>> > ---
>> >   gdbserver/linux-low.cc | 40 ++++++++++++++++++++++++++++------------
>> >   gdbserver/linux-low.h  |  7 ++++++-
>> >   2 files changed, 34 insertions(+), 13 deletions(-)
>> >
>> > diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index
>> > 50ce2b44927..355b28d9fe4 100644
>> > --- a/gdbserver/linux-low.cc
>> > +++ b/gdbserver/linux-low.cc
>> > @@ -5007,23 +5007,31 @@ regsets_fetch_inferior_registers (struct
>> regsets_info *regsets_info,
>> >         if (res < 0)
>> >   	{
>> >   	  if (errno == EIO
>> > -	      || (errno == EINVAL && regset->type == OPTIONAL_REGS))
>> > +	      || (errno == EINVAL
>> > +		  && (regset->type == OPTIONAL_REGS
>> > +		      || regset->type == OPTIONAL_RUNTIME_REGS)))
>> >   	    {
>> >   	      /* If we get EIO on a regset, or an EINVAL and the regset is
>> > -		 optional, do not try it again for this process mode.  */
>> > +		 optional, do not try it again for this process mode.
>> > +		 Even if the regset can be enabled at runtime it is safe
>> > +		 to deactivate the regset in case of EINVAL, as we know
>> > +		 the regset itself was the invalid argument of the ptrace
>> > +		 call.  */
>> >   	      disable_regset (regsets_info, regset);
>>
>> I'm somewhat confused by this patch.
>>
>> The commit message and other comments here say that optional_runtime_regs
>> shouldn't be disabled. However, in here, if we get EINVAL we *will* disable the
>> regset. Did you mean to use != instead of == ?
>>
>> I'll be honest, I don't know enough about the regset subsystem to know which is
>> the correct option, I just think it has to be consistent.
>>
>
> Hi Guinevere,
>
> Thank you for the review.
>
> For the errno EINVAL we want to disable the regset, as we don't want to call ptrace
> using NT_X86_SHSTK again. This specific errno can happen if the kernel does not
> support ptrace using NT_X86_SHSTK (older linux kernels). I tried to explain that here:
>
>> > +		 Even if the regset can be enabled at runtime it is safe
>> > +		 to deactivate the regset in case of EINVAL, as we know
>> > +		 the regset itself was the invalid argument of the ptrace
>> > +		 call.  */

I agree with Guinevere's remarks, and also with the suggestion of
improving the commit message.

But I would also like to suggest being a bit more direct in the comment
above. At least the way I read it, I thought that EINVAL was a normal
thing for ptrace to return if shadow stack was disabled for the
process. What about something like:

  Even if the regset can be enabled at runtime it is safe
  to deactivate the regset in case of EINVAL, as we know
  the regset itself was the invalid argument of the ptrace
  call which means that it's unsupported by the kernel.  */

> In case shadow stack is just not active but supported by the kernel we see
> ENODEV and we don't disable the regset, which I explained in another
> comment for the corresponding code area:
>
> /* ENODATA or ENODEV may be returned if the regset is
>      currently not "active".  For ENODEV we additionally check
>      if the register set is of type OPTIONAL_RUNTIME_REGS.
>      This can happen in normal operation, so suppress the
>      warning in this case.
>
> I didn't want to be too specific here to make the commit generic.
>
> Is there something I could add to make it more understandable or maybe
> there is just some information missing in the commit message?

--
Thiago

  parent reply	other threads:[~2025-02-06  3:00 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-20 20:04 [PATCH 00/12] Add CET shadow stack support Schimpe, Christina
2024-12-20 20:04 ` [PATCH 01/12] gdb, testsuite: Rename set_sanitizer_default to append_environment Schimpe, Christina
2025-01-28 13:45   ` Guinevere Larsen
2025-01-30 13:07     ` Schimpe, Christina
2025-01-30 14:27       ` Tom de Vries
2025-01-30 16:39         ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 02/12] gdbserver: Add optional runtime register set type Schimpe, Christina
2025-01-28 13:35   ` Guinevere Larsen
2025-01-30 10:28     ` Schimpe, Christina
2025-01-30 13:53       ` Guinevere Larsen
2025-01-30 17:43         ` Schimpe, Christina
2025-02-06  2:59       ` Thiago Jung Bauermann [this message]
2025-02-06 12:15         ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 03/12] gdbserver: Add assert in x86_linux_read_description Schimpe, Christina
2025-02-06  3:00   ` Thiago Jung Bauermann
2024-12-20 20:04 ` [PATCH 04/12] gdb: Sync up x86-gcc-cpuid.h with cpuid.h from gcc 14 branch Schimpe, Christina
2025-02-06  3:03   ` Thiago Jung Bauermann
2025-02-06 12:23     ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 05/12] gdb, gdbserver: Use xstate_bv for target description creation on x86 Schimpe, Christina
2025-01-30 14:51   ` Guinevere Larsen
2025-01-30 16:45     ` Schimpe, Christina
2025-02-06  3:09   ` Thiago Jung Bauermann
2025-02-06 12:33     ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 06/12] gdb, gdbserver: Add support of Intel shadow stack pointer register Schimpe, Christina
2025-02-06  3:13   ` Thiago Jung Bauermann
2025-02-06 14:33     ` Schimpe, Christina
2025-02-08  3:44       ` Thiago Jung Bauermann
2024-12-20 20:04 ` [PATCH 07/12] gdb, bfd: amd64 linux coredump support with shadow stack Schimpe, Christina
2025-02-06  3:15   ` Thiago Jung Bauermann
2025-02-07 11:54     ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 08/12] gdb: Handle shadow stack pointer register unwinding for amd64 linux Schimpe, Christina
2025-01-30 14:29   ` Guinevere Larsen
2025-01-30 16:11     ` Schimpe, Christina
2025-01-30 16:13       ` Guinevere Larsen
2025-01-30 16:40         ` Schimpe, Christina
2025-02-06  3:30   ` Thiago Jung Bauermann
2025-02-06 14:40     ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 09/12] gdb, gdbarch: Enable inferior calls for shadow stack support Schimpe, Christina
2025-02-06  3:31   ` Thiago Jung Bauermann
2025-02-06 15:07     ` Schimpe, Christina
2025-02-08  3:57       ` Thiago Jung Bauermann
2025-02-10  8:37         ` Schimpe, Christina
2024-12-20 20:04 ` [PATCH 10/12] gdb: Implement amd64 linux shadow stack support for inferior calls Schimpe, Christina
2025-02-06  3:34   ` Thiago Jung Bauermann
2025-02-07 11:55     ` Schimpe, Christina
2024-12-20 20:05 ` [PATCH 11/12] gdb, gdbarch: Introduce gdbarch method to get the shadow stack pointer Schimpe, Christina
2025-01-28 20:27   ` Guinevere Larsen
2025-01-30 10:33     ` Luis Machado
2025-01-30 12:34       ` Schimpe, Christina
2025-01-30 13:42         ` Guinevere Larsen
2025-02-06  3:35   ` Thiago Jung Bauermann
2025-02-07 12:01     ` Schimpe, Christina
2025-02-08  4:03       ` Thiago Jung Bauermann
2025-02-10  8:58         ` Schimpe, Christina
2025-02-11  1:53           ` Thiago Jung Bauermann
2025-02-15  3:45             ` Thiago Jung Bauermann
2025-02-16 10:45               ` Schimpe, Christina
2025-02-20  8:48                 ` Schimpe, Christina
2025-02-21  5:10                   ` Thiago Jung Bauermann
2025-02-21  9:41                     ` Schimpe, Christina
2024-12-20 20:05 ` [PATCH 12/12] gdb: Enable displaced stepping with shadow stack on amd64 linux Schimpe, Christina
2024-12-20 20:14   ` Eli Zaretskii
2025-01-02  9:04     ` Schimpe, Christina
2025-01-02  9:15       ` Eli Zaretskii
2025-02-06  3:37   ` Thiago Jung Bauermann
2025-01-16 14:01 ` [PING][PATCH 00/12] Add CET shadow stack support Schimpe, Christina
2025-01-27  9:44   ` [PING*2][PATCH " Schimpe, Christina
2025-01-30 15:01 ` [PATCH " Guinevere Larsen
2025-01-30 17:46   ` Schimpe, Christina
2025-02-04  3:57     ` Thiago Jung Bauermann
2025-02-04  9:40       ` Schimpe, Christina
2025-02-06  3:44         ` Thiago Jung Bauermann

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=87tt97ixqz.fsf@linaro.org \
    --to=thiago.bauermann@linaro.org \
    --cc=christina.schimpe@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=guinevere@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