Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Guinevere Larsen <guinevere@redhat.com>
To: "Schimpe, Christina" <christina.schimpe@intel.com>,
	"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH 02/12] gdbserver: Add optional runtime register set type.
Date: Thu, 30 Jan 2025 10:53:49 -0300	[thread overview]
Message-ID: <46ab3983-6fed-476a-b01b-a20867e84c33@redhat.com> (raw)
In-Reply-To: <SN7PR11MB763841E1B5421BB082BED8BAF9E92@SN7PR11MB7638.namprd11.prod.outlook.com>

On 1/30/25 7:28 AM, Schimpe, Christina wrote:
>> -----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.  */
> 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?

Yeah, ok, so the commit message needs an update.

Maybe something like:

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.  When
reading them, we shouldn't deactivate these regsets and should not show a
warning if they are deactivated, but should deactivate them if they are
unsupported by the kernel. That can be deciphered based on the error
returned by the ptrace call, if we fail to read the registered.

Or something similar.

I think it is important to explain in the commit message that one error 
means "inactive" while other means "unsupported", so that in 5-10 years 
we can look back at this commit and be sure the disable wasn't added 
incorrectly.

-- 
Cheers,
Guinevere Larsen
She/Her/Hers


  reply	other threads:[~2025-01-30 13:54 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 [this message]
2025-01-30 17:43         ` Schimpe, Christina
2025-02-06  2:59       ` Thiago Jung Bauermann
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=46ab3983-6fed-476a-b01b-a20867e84c33@redhat.com \
    --to=guinevere@redhat.com \
    --cc=christina.schimpe@intel.com \
    --cc=gdb-patches@sourceware.org \
    /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