mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
kmsan: rework kmsan_in_runtime() handling in kmsan_report()
kmsan_report() calls used to require entering/leaving the runtime around them. To simplify the things, drop this requirement and move calls to kmsan_enter_runtime()/kmsan_leave_runtime() into kmsan_report(). Link: https://lkml.kernel.org/r/20250507160012.3311104-5-glider@google.com Signed-off-by: Alexander Potapenko <glider@google.com> Cc: Marco Elver <elver@google.com> Cc: Bart Van Assche <bvanassche@acm.org> Cc: Kent Overstreet <kent.overstreet@linux.dev> Cc: Dmitriy Vyukov <dvyukov@google.com> Cc: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
e17c1f15b0
commit
b65e4b56e9
@@ -274,11 +274,9 @@ void kmsan_internal_check_memory(void *addr, size_t size,
|
||||
* bytes before, report them.
|
||||
*/
|
||||
if (cur_origin) {
|
||||
kmsan_enter_runtime();
|
||||
kmsan_report(cur_origin, addr, size,
|
||||
cur_off_start, pos - 1, user_addr,
|
||||
reason);
|
||||
kmsan_leave_runtime();
|
||||
}
|
||||
cur_origin = 0;
|
||||
cur_off_start = -1;
|
||||
@@ -292,11 +290,9 @@ void kmsan_internal_check_memory(void *addr, size_t size,
|
||||
* poisoned bytes before, report them.
|
||||
*/
|
||||
if (cur_origin) {
|
||||
kmsan_enter_runtime();
|
||||
kmsan_report(cur_origin, addr, size,
|
||||
cur_off_start, pos + i - 1,
|
||||
user_addr, reason);
|
||||
kmsan_leave_runtime();
|
||||
}
|
||||
cur_origin = 0;
|
||||
cur_off_start = -1;
|
||||
@@ -312,11 +308,9 @@ void kmsan_internal_check_memory(void *addr, size_t size,
|
||||
*/
|
||||
if (cur_origin != new_origin) {
|
||||
if (cur_origin) {
|
||||
kmsan_enter_runtime();
|
||||
kmsan_report(cur_origin, addr, size,
|
||||
cur_off_start, pos + i - 1,
|
||||
user_addr, reason);
|
||||
kmsan_leave_runtime();
|
||||
}
|
||||
cur_origin = new_origin;
|
||||
cur_off_start = pos + i;
|
||||
@@ -326,10 +320,8 @@ void kmsan_internal_check_memory(void *addr, size_t size,
|
||||
}
|
||||
KMSAN_WARN_ON(pos != size);
|
||||
if (cur_origin) {
|
||||
kmsan_enter_runtime();
|
||||
kmsan_report(cur_origin, addr, size, cur_off_start, pos - 1,
|
||||
user_addr, reason);
|
||||
kmsan_leave_runtime();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -312,13 +312,9 @@ EXPORT_SYMBOL(__msan_unpoison_alloca);
|
||||
void __msan_warning(u32 origin);
|
||||
void __msan_warning(u32 origin)
|
||||
{
|
||||
if (!kmsan_enabled || kmsan_in_runtime())
|
||||
return;
|
||||
kmsan_enter_runtime();
|
||||
kmsan_report(origin, /*address*/ NULL, /*size*/ 0,
|
||||
/*off_first*/ 0, /*off_last*/ 0, /*user_addr*/ NULL,
|
||||
REASON_ANY);
|
||||
kmsan_leave_runtime();
|
||||
}
|
||||
EXPORT_SYMBOL(__msan_warning);
|
||||
|
||||
|
||||
+3
-3
@@ -157,14 +157,14 @@ void kmsan_report(depot_stack_handle_t origin, void *address, int size,
|
||||
unsigned long ua_flags;
|
||||
bool is_uaf;
|
||||
|
||||
if (!kmsan_enabled)
|
||||
if (!kmsan_enabled || kmsan_in_runtime())
|
||||
return;
|
||||
if (current->kmsan_ctx.depth)
|
||||
return;
|
||||
if (!origin)
|
||||
return;
|
||||
|
||||
kmsan_disable_current();
|
||||
kmsan_enter_runtime();
|
||||
ua_flags = user_access_save();
|
||||
raw_spin_lock(&kmsan_report_lock);
|
||||
pr_err("=====================================================\n");
|
||||
@@ -217,5 +217,5 @@ void kmsan_report(depot_stack_handle_t origin, void *address, int size,
|
||||
if (panic_on_kmsan)
|
||||
panic("kmsan.panic set ...\n");
|
||||
user_access_restore(ua_flags);
|
||||
kmsan_enable_current();
|
||||
kmsan_leave_runtime();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user