diff mbox series

[RFC,v2,14/27] arm64: mte: Disable dynamic tag storage management if HW KASAN is enabled

Message ID 20231119165721.9849-15-alexandru.elisei@arm.com (mailing list archive)
State New
Headers show
Series [RFC,v2,01/27] arm64: mte: Rework naming for tag manipulation functions | expand

Commit Message

Alexandru Elisei Nov. 19, 2023, 4:57 p.m. UTC
To be able to reserve the tag storage associated with a page requires that
the tag storage page can be migrated.

When HW KASAN is enabled, the kernel allocates pages, which are now tagged,
in non-preemptible contexts, which can make reserving the associate tag
storage impossible.

Keep the tag storage pages reserved if HW KASAN is enabled.

Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
---
 arch/arm64/kernel/mte_tag_storage.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

David Hildenbrand Nov. 24, 2023, 7:54 p.m. UTC | #1
On 19.11.23 17:57, Alexandru Elisei wrote:
> To be able to reserve the tag storage associated with a page requires that
> the tag storage page can be migrated.
> 
> When HW KASAN is enabled, the kernel allocates pages, which are now tagged,
> in non-preemptible contexts, which can make reserving the associate tag
> storage impossible.

I assume that it's the only in-kernel user that actually requires tagged 
memory (besides for user space), correct?
Alexandru Elisei Nov. 27, 2023, 3:07 p.m. UTC | #2
Hi,

On Fri, Nov 24, 2023 at 08:54:12PM +0100, David Hildenbrand wrote:
> On 19.11.23 17:57, Alexandru Elisei wrote:
> > To be able to reserve the tag storage associated with a page requires that
> > the tag storage page can be migrated.
> > 
> > When HW KASAN is enabled, the kernel allocates pages, which are now tagged,
> > in non-preemptible contexts, which can make reserving the associate tag
> > storage impossible.
> 
> I assume that it's the only in-kernel user that actually requires tagged
> memory (besides for user space), correct?

Indeed, this is the case. I'll expand the commit message to be more clear about
it.

Thanks,
Alex

> 
> -- 
> Cheers,
> 
> David / dhildenb
>
David Hildenbrand Nov. 28, 2023, 5:05 p.m. UTC | #3
On 27.11.23 16:07, Alexandru Elisei wrote:
> Hi,
> 
> On Fri, Nov 24, 2023 at 08:54:12PM +0100, David Hildenbrand wrote:
>> On 19.11.23 17:57, Alexandru Elisei wrote:
>>> To be able to reserve the tag storage associated with a page requires that
>>> the tag storage page can be migrated.
>>>
>>> When HW KASAN is enabled, the kernel allocates pages, which are now tagged,
>>> in non-preemptible contexts, which can make reserving the associate tag
>>> storage impossible.
>>
>> I assume that it's the only in-kernel user that actually requires tagged
>> memory (besides for user space), correct?
> 
> Indeed, this is the case. I'll expand the commit message to be more clear about
> it.
> 

Great, thanks!
diff mbox series

Patch

diff --git a/arch/arm64/kernel/mte_tag_storage.c b/arch/arm64/kernel/mte_tag_storage.c
index 427f4f1909f3..8b9bedf7575d 100644
--- a/arch/arm64/kernel/mte_tag_storage.c
+++ b/arch/arm64/kernel/mte_tag_storage.c
@@ -308,6 +308,19 @@  static int __init mte_tag_storage_activate_regions(void)
 		goto out_disabled;
 	}
 
+	/*
+	 * The kernel allocates memory in non-preemptible contexts, which makes
+	 * migration impossible when reserving the associated tag storage.
+	 *
+	 * The check is safe to make because KASAN HW tags are enabled before
+	 * the rest of the init functions are called, in smp_prepare_boot_cpu().
+	 */
+	if (kasan_hw_tags_enabled()) {
+		pr_info("KASAN HW tags incompatible with MTE tag storage management");
+		ret = 0;
+		goto out_disabled;
+	}
+
 	for (i = 0; i < num_tag_regions; i++) {
 		tag_range = &tag_regions[i].tag_range;
 		for (pfn = tag_range->start; pfn <= tag_range->end; pfn += pageblock_nr_pages)