This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit d51c9dc8459fe88fbec029a713fe5ed6b71cfe8b
Author: wangzhi16 <[email protected]>
AuthorDate: Thu Nov 20 15:26:51 2025 +0800

    mm/kasan: add spinlock for kasan_report
    
    Disable scheduling and interrupts before kasan_repoft to prevent it from 
being switched out.
    
    Signed-off-by: wangzhi16 <[email protected]>
---
 mm/kasan/hook.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/mm/kasan/hook.c b/mm/kasan/hook.c
index 3af7037453f..a38a165c939 100644
--- a/mm/kasan/hook.c
+++ b/mm/kasan/hook.c
@@ -128,6 +128,8 @@ static uint32_t g_region_init;
 #  endif
 #endif
 
+static spinlock_t g_kasan_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -178,6 +180,7 @@ static void kasan_show_memory(FAR const uint8_t *addr, 
size_t size,
 static void kasan_report(FAR const void *addr, size_t size,
                          bool is_write, FAR void *return_address)
 {
+  irqstate_t flags = spin_lock_irqsave_nopreempt(&g_kasan_lock);
   bool dump_only = (is_write && MM_KASAN_DISABLE_WRITE_PANIC) ||
                    (!is_write && MM_KASAN_DISABLE_READ_PANIC);
 
@@ -203,6 +206,8 @@ static void kasan_report(FAR const void *addr, size_t size,
     {
       PANIC();
     }
+
+  spin_unlock_irqrestore_nopreempt(&g_kasan_lock, flags);
 }
 
 #if MM_KASAN_WATCHPOINT > 0

Reply via email to