Message ID | 20f64170c0b59cb5185cfe02c4bc833073a2ebe6.1739866028.git.maciej.wieczor-retman@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2,01/14] kasan: sw_tags: Use arithmetic shift for shadow computation | expand |
On Tue, Feb 18, 2025 at 9:17 AM Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com> wrote: > > From: Samuel Holland <samuel.holland@sifive.com> > > This allows stack tagging to be disabled at runtime by tagging all > stack objects with the match-all tag. This is necessary on RISC-V, > where a kernel with KASAN_SW_TAGS enabled is expected to boot on > hardware without pointer masking support. Same question, is this needed on x86? > > Signed-off-by: Samuel Holland <samuel.holland@sifive.com> > Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com> > Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com> > --- > mm/kasan/kasan.h | 2 ++ > mm/kasan/sw_tags.c | 9 +++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index 129178be5e64..2fb26f74dff9 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -636,6 +636,8 @@ void *__asan_memset(void *addr, int c, ssize_t len); > void *__asan_memmove(void *dest, const void *src, ssize_t len); > void *__asan_memcpy(void *dest, const void *src, ssize_t len); > > +u8 __hwasan_generate_tag(void); > + > void __hwasan_load1_noabort(void *); > void __hwasan_store1_noabort(void *); > void __hwasan_load2_noabort(void *); > diff --git a/mm/kasan/sw_tags.c b/mm/kasan/sw_tags.c > index b9382b5b6a37..94465a8a3640 100644 > --- a/mm/kasan/sw_tags.c > +++ b/mm/kasan/sw_tags.c > @@ -71,6 +71,15 @@ u8 kasan_random_tag(void) > return (u8)(state % (KASAN_TAG_MAX + 1)); > } > > +u8 __hwasan_generate_tag(void) > +{ > + if (!kasan_enabled()) > + return KASAN_TAG_KERNEL; > + > + return kasan_random_tag(); > +} > +EXPORT_SYMBOL(__hwasan_generate_tag); > + > bool kasan_check_range(const void *addr, size_t size, bool write, > unsigned long ret_ip) > { > -- > 2.47.1 >
diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h index 129178be5e64..2fb26f74dff9 100644 --- a/mm/kasan/kasan.h +++ b/mm/kasan/kasan.h @@ -636,6 +636,8 @@ void *__asan_memset(void *addr, int c, ssize_t len); void *__asan_memmove(void *dest, const void *src, ssize_t len); void *__asan_memcpy(void *dest, const void *src, ssize_t len); +u8 __hwasan_generate_tag(void); + void __hwasan_load1_noabort(void *); void __hwasan_store1_noabort(void *); void __hwasan_load2_noabort(void *); diff --git a/mm/kasan/sw_tags.c b/mm/kasan/sw_tags.c index b9382b5b6a37..94465a8a3640 100644 --- a/mm/kasan/sw_tags.c +++ b/mm/kasan/sw_tags.c @@ -71,6 +71,15 @@ u8 kasan_random_tag(void) return (u8)(state % (KASAN_TAG_MAX + 1)); } +u8 __hwasan_generate_tag(void) +{ + if (!kasan_enabled()) + return KASAN_TAG_KERNEL; + + return kasan_random_tag(); +} +EXPORT_SYMBOL(__hwasan_generate_tag); + bool kasan_check_range(const void *addr, size_t size, bool write, unsigned long ret_ip) {