Thread (82 messages) 82 messages, 9 authors, 2020-05-19

Re: [PATCH v3 23/23] arm64: mte: Add Memory Tagging Extension documentation

From: Szabolcs Nagy <hidden>
Date: 2020-05-15 11:14:18
Also in: linux-arch, linux-mm

The 05/15/2020 11:38, Catalin Marinas wrote:
On Thu, May 14, 2020 at 12:37:22PM +0100, Catalin Marinas wrote:
quoted
On Wed, May 13, 2020 at 04:48:46PM +0100, Dave P Martin wrote:
quoted
quoted
quoted
quoted
On Wed, Apr 29, 2020 at 05:47:05PM +0100, Dave P Martin wrote:
quoted
On Tue, Apr 21, 2020 at 03:26:03PM +0100, Catalin Marinas wrote:
quoted
+excludes all tags other than 0. A user thread can enable specific tags
+in the randomly generated set using the ``prctl(PR_SET_TAGGED_ADDR_CTRL,
+flags, 0, 0, 0)`` system call where ``flags`` contains the tags bitmap
+in the ``PR_MTE_TAG_MASK`` bit-field.
+
+**Note**: The hardware uses an exclude mask but the ``prctl()``
+interface provides an include mask. An include mask of ``0`` (exclusion
+mask ``0xffff``) results in the CPU always generating tag ``0``.
Is there no way to make this default to 1 rather than having a magic
meaning for 0?
[...]
quoted
The only configuration that doesn't make sense is "no tags allowed", so
I'd argue for explicity blocking that, even if the architeture aliases
that encoding to something else.

If we prefer 0 as a default value so that init inherits the correct
value from the kernel without any special acrobatics, then we make it an
exclude mask, with the semantics that the hardware is allowed to
generate any of these tags, but does not have to be capable of
generating all of them.
That's more of a question to the libc people and their preference.
We have two options with suboptions:

1. prctl() gets an exclude mask with 0xffff illegal even though the
   hardware accepts it:
   a) default exclude mask 0, allowing all tags to be generated by IRG
   b) default exclude mask of 0xfffe so that only tag 0 is generated

2. prctl() gets an include mask with 0 illegal:
   a) default include mask is 0xffff, allowing all tags to be generated
   b) default include mask 0f 0x0001 so that only tag 0 is generated

We currently have (2) with mask 0 but could be changed to (2.b). If we
are to follow the hardware description (which makes more sense to me but
I don't write the C library), (1.a) is the most appropriate.
Thinking some more about this, as we are to expose the GCR_EL1.Excl via
a ptrace interface as a regset, it makes more sense to move back to an
exclude mask here with default 0. That would be option 1.a above.
i think the libc has to do a prctl call to set
mte up and at that point it will use whatever
arguments necessary, so 1.a should work (just
like the other options).

likely libc will disable 0 for irg and possibly
one or two other fixed colors (which will have
specific use).

the difference i see between 1 vs 2 is forward
compatibility if the architecture changes (e.g.
adding more tag bits) but then likely new prctl
flag will be needed for handling that so it's
probably not an issue.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help