diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c index 1a736d28be..dfd62a61f5 100644 --- a/mm/kasan/generic.c +++ b/mm/kasan/generic.c @@ -268,10 +268,13 @@ void kasan_unregister(FAR void *addr) { if (g_region[i]->begin == (uintptr_t)addr) { + size_t size = g_region[i]->end - g_region[i]->begin; g_region_count--; memmove(&g_region[i], &g_region[i + 1], (g_region_count - i) * sizeof(g_region[0])); - break; + spin_unlock_irqrestore(&g_lock, flags); + kasan_unpoison(addr, size); + return; } } diff --git a/mm/kasan/sw_tags.c b/mm/kasan/sw_tags.c index 8bfaa821a4..2df66485c1 100644 --- a/mm/kasan/sw_tags.c +++ b/mm/kasan/sw_tags.c @@ -217,10 +217,13 @@ void kasan_unregister(FAR void *addr) { if (g_region[i]->begin == (uintptr_t)addr) { + size_t size = g_region[i]->end - g_region[i]->begin; g_region_count--; memmove(&g_region[i], &g_region[i + 1], (g_region_count - i) * sizeof(g_region[0])); - break; + spin_unlock_irqrestore(&g_lock, flags); + kasan_unpoison(addr, size); + return; } }