kmsan: expose kmsan_get_metadata()
Each s390 CPU has lowcore pages associated with it. Each CPU sees its own lowcore at virtual address 0 through a hardware mechanism called prefixing. Additionally, all lowcores are mapped to non-0 virtual addresses stored in the lowcore_ptr[] array. When lowcore is accessed through virtual address 0, one needs to resolve metadata for lowcore_ptr[raw_smp_processor_id()]. Expose kmsan_get_metadata() to make it possible to do this from the arch code. Link: https://lkml.kernel.org/r/20240621113706.315500-10-iii@linux.ibm.com Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: Alexander Potapenko <glider@google.com> Cc: Alexander Gordeev <agordeev@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@linux.ibm.com> Cc: Christoph Lameter <cl@linux.com> Cc: David Rientjes <rientjes@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: <kasan-dev@googlegroups.com> Cc: Marco Elver <elver@google.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org> Cc: Pekka Enberg <penberg@kernel.org> Cc: Roman Gushchin <roman.gushchin@linux.dev> Cc: Steven Rostedt (Google) <rostedt@goodmis.org> Cc: Sven Schnelle <svens@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
61849c89e7
commit
6b1709d4b7
@ -230,6 +230,15 @@ void kmsan_handle_urb(const struct urb *urb, bool is_out);
|
||||
*/
|
||||
void kmsan_unpoison_entry_regs(const struct pt_regs *regs);
|
||||
|
||||
/**
|
||||
* kmsan_get_metadata() - Return a pointer to KMSAN shadow or origins.
|
||||
* @addr: kernel address.
|
||||
* @is_origin: whether to return origins or shadow.
|
||||
*
|
||||
* Return NULL if metadata cannot be found.
|
||||
*/
|
||||
void *kmsan_get_metadata(void *addr, bool is_origin);
|
||||
|
||||
#else
|
||||
|
||||
static inline void kmsan_init_shadow(void)
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
#include "kmsan.h"
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/kmsan.h>
|
||||
#include <linux/kmsan_string.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
@ -66,7 +66,6 @@ struct shadow_origin_ptr {
|
||||
|
||||
struct shadow_origin_ptr kmsan_get_shadow_origin_ptr(void *addr, u64 size,
|
||||
bool store);
|
||||
void *kmsan_get_metadata(void *addr, bool is_origin);
|
||||
void __init kmsan_init_alloc_meta_for_range(void *start, void *end);
|
||||
|
||||
enum kmsan_bug_reason {
|
||||
|
Loading…
Reference in New Issue
Block a user