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