Page MenuHomePhabricator

[lldb][AArch64] Mark mismatched tags in tag read output
ClosedPublic

Authored by DavidSpickett on Jul 27 2021, 8:21 AM.

Details

Summary

The "memory tag read" command will now tell you
when the allocation tag read does not match the logical
tag.

(lldb) memory tag read mte_buf+(8*16) mte_buf+(8*16)+48
Logical tag: 0x9
Allocation tags:
[0xfffff7ff7080, 0xfffff7ff7090): 0x8 (mismatch)
[0xfffff7ff7090, 0xfffff7ff70a0): 0x9
[0xfffff7ff70a0, 0xfffff7ff70b0): 0xa (mismatch)

The logical tag will be taken from the start address
so the end could have a different tag. You could for example
read from ptr_to_array_1 to ptr_to_array_2. Where the latter
is tagged differently to prevent buffer overflow.

The existing command will read 1 granule if you leave
off the end address. So you can also use it as a quick way
to check a single location.

(lldb) memory tag read mte_buf
Logical tag: 0x9
Allocation tags:
[0xfffff7ff7000, 0xfffff7ff7010): 0x0 (mismatch)

This avoids the need for a seperate "memory tag check" command.

Diff Detail

Event Timeline

DavidSpickett created this revision.Jul 27 2021, 8:21 AM
DavidSpickett requested review of this revision.Jul 27 2021, 8:21 AM
Herald added a project: Restricted Project. · View Herald TranscriptJul 27 2021, 8:21 AM
DavidSpickett added a reviewer: omjavaid.

This gives us the equivalent of GDB's "mtag check" but with some more flexibility and no extra command.

omjavaid accepted this revision.Jul 30 2021, 2:23 AM

This looks good

This revision is now accepted and ready to land.Jul 30 2021, 2:23 AM
This revision was landed with ongoing or failed builds.Jul 30 2021, 3:48 AM
This revision was automatically updated to reflect the committed changes.