Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Luis Machado via Gdb-patches <gdb-patches@sourceware.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: david.spickett@linaro.org, gdb-patches@sourceware.org
Subject: Re: [PATCH v2 20/24] Documentation for the new mtag commands
Date: Fri, 23 Oct 2020 11:33:36 -0300	[thread overview]
Message-ID: <bc9965cc-5ec9-ca1c-c9b4-027f0e18cb85@linaro.org> (raw)
In-Reply-To: <837drhla9o.fsf@gnu.org>

On 10/23/20 3:35 AM, Eli Zaretskii wrote:
>> Date: Thu, 22 Oct 2020 17:00:10 -0300
>> From: Luis Machado via Gdb-patches <gdb-patches@sourceware.org>
>> Cc: david.spickett@linaro.org
>>
>> +Memory tagging is a memory protection technology that uses tags to validate
>> +memory accesses through pointers.  The pointer tag must match the memory tag
>> +for the memory access to be validated.
>                           ^^^^^^^^^^^^^^^
> I guess "to be valid" is more clear, as "validated" can be interpreted
> as the process of validation, not its result.
> 

That makes sense. I've updated the text to say "valid".

>> +There are two types of tags: logical and allocation.  A logical tag is
>> +stored in the pointers themselves.  A allocation tag is the tag associated
>                                         ^                   ^^^
> "An" and "a"
> 

Fixed.

> Also, this text fails to explain that (AFAIU) these 2 types of tags
> work together to allow the access validation.  IOW, both types need to
> be present for the mechanism to work.  I originally interpreted the
> text as meaning that tags come in 2 flavors, depending on how the
> hardware implemented the facility.
> 

I can add a bit more text describing that. But things can get a bit 
confusing in the future as we support more tags of different types. For 
example, CHERI capability tags are similar to logical tags, but you 
can't set those.

But, in general, there will always be a memory-side tag against which a 
logical tag (contained in a pointer, for example) will be matched against.

>> +@kindex mtag setltag
>> +@item mtag setltag @var{address_expression} @var{tag_bytes}
>> +Print the address given by @var{address_expression}, augmented with a logical
> 
> It is strange for a command whose name is "set..." to print
> something.  I'd expect it to set something instead.  is the above
> description correct?
> 

Yes. This is one area that I'd welcome some discussion/feedback.

We don't always have a modifiable value as an argument to the "mtag 
setltag" command. We could have a constant value, a read-only value, 
some reference or some expression containing multiple pointers.

Plus, the most natural way to modify a value in GDB is through the 
existing "set variable" command.

The main goal is to be able to augment a particular address with a given 
logical tag. That augmented value can then be used to set a particular 
pointer or value. It will be stored in the history anyway, so that's 
already a value that you can use.

There won't be much reason to set logical tags other than if you're 
chasing bugs and trying to cause one. It is one additional knob so that 
you won't need to craft the tagged pointer by hand.

>> +@item mtag setatag @var{starting_address} @var{length} @var{tag_bytes}
>> +Set the allocation tag(s) for memory range @r{[}@var{starting_address},
>> +@var{starting_address} + @var{length}@r{)} to @var{tag_bytes}.
> 
> This is what I'd expect from setltag to do. >

Yeah. But contrary to the logical tag, we can always set the allocation 
tag in memory. Given a particular expression that gets evaluated to an 
address, we can always set a tag at that address. There's no 
lval/non-lval issues here.

With logical tags this is only possible if you evaluate the expression 
to an address and then tweak the resulting address to contain a 
particular logical tag. That's why we print the resulting adjusted 
address as opposed to modifying some pointer/variable.

>> +@kindex mtag check
>> +@item mtag check @var{address_expression}
>> +Check that the logical tag stored at the address given by
>> +@var{address_expression} matches the allocation tag for the same address.
> 
> This test should say that this check performs the same validation as
> is done in hardware when memory is accessed through a pointer.  Saying
> that (assuming I understood correctly) will go a long way towards
> causing this facility to make much more sense to the reader.

Does it make it more clear if I add the following:

"This essentially emulates the hardware validation that is done when 
tagged memory is accessed through a pointer, but does not cause a memory 
fault as it would during hardware validation.

It can be used to inspect potential memory tagging violations in the 
running process, before any faults get triggered."

  reply	other threads:[~2020-10-23 14:33 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-22 19:59 [PATCH v2 00/24] Memory Tagging Support + AArch64 Linux implementation Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 01/24] New target methods for memory tagging support Luis Machado via Gdb-patches
2020-10-27 13:22   ` Simon Marchi
2020-10-27 13:43     ` Luis Machado via Gdb-patches
2020-10-27 13:50       ` Simon Marchi
2020-10-22 19:59 ` [PATCH v2 02/24] New gdbarch memory tagging hooks Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 03/24] Add GDB-side remote target support for memory tagging Luis Machado via Gdb-patches
2020-10-29 14:22   ` Alan Hayward via Gdb-patches
2020-10-29 14:41     ` Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 04/24] Unit testing for GDB-side remote memory tagging handling Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 05/24] GDBserver remote packet support for memory tagging Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 06/24] Unit tests for gdbserver memory tagging remote packets Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 07/24] Documentation for " Luis Machado via Gdb-patches
2020-10-23  6:25   ` Eli Zaretskii via Gdb-patches
2020-10-23 14:07     ` Luis Machado via Gdb-patches
2020-10-23 14:33       ` Eli Zaretskii via Gdb-patches
2020-10-23 14:39         ` Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 08/24] AArch64: Add MTE CPU feature check support Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 09/24] AArch64: Add target description/feature for MTE registers Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 10/24] AArch64: Add MTE register set support for GDB and gdbserver Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 11/24] AArch64: Add MTE ptrace requests Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 12/24] AArch64: Implement memory tagging target methods for AArch64 Luis Machado via Gdb-patches
2020-10-29 14:21   ` Alan Hayward via Gdb-patches
2020-10-29 14:39     ` Luis Machado via Gdb-patches
2020-10-29 14:45       ` Luis Machado via Gdb-patches
2020-10-29 17:32         ` Alan Hayward via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 13/24] Refactor parsing of /proc/<pid>/smaps Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 14/24] AArch64: Implement the memory tagging gdbarch hooks Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 15/24] AArch64: Add unit testing for logical tag set/get operations Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 16/24] AArch64: Report tag violation error information Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 17/24] AArch64: Add gdbserver MTE support Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 18/24] AArch64: Add MTE register set support for core files Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 19/24] New mtag commands Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 20/24] Documentation for the new " Luis Machado via Gdb-patches
2020-10-23  6:35   ` Eli Zaretskii via Gdb-patches
2020-10-23 14:33     ` Luis Machado via Gdb-patches [this message]
2020-10-23 17:52       ` Eli Zaretskii via Gdb-patches
2020-10-23 19:04         ` Luis Machado via Gdb-patches
2020-10-23 19:34           ` Eli Zaretskii via Gdb-patches
2020-10-26 14:59           ` Luis Machado via Gdb-patches
2020-10-26 15:35             ` Eli Zaretskii via Gdb-patches
2020-10-26 16:57               ` Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 21/24] Extend "x" and "print" commands to support memory tagging Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 22/24] Document new "x" and "print" memory tagging extensions Luis Machado via Gdb-patches
2020-10-23  6:37   ` Eli Zaretskii via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 23/24] Add NEWS entry Luis Machado via Gdb-patches
2020-10-23  6:38   ` Eli Zaretskii via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 24/24] Add memory tagging testcases Luis Machado via Gdb-patches

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=bc9965cc-5ec9-ca1c-c9b4-027f0e18cb85@linaro.org \
    --to=gdb-patches@sourceware.org \
    --cc=david.spickett@linaro.org \
    --cc=eliz@gnu.org \
    --cc=luis.machado@linaro.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