]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
kmsan: fix usage of kmsan_enter_runtime() in kmsan_vmap_pages_range_noflush()
authorAlexander Potapenko <glider@google.com>
Wed, 7 May 2025 16:00:09 +0000 (18:00 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 21 May 2025 16:55:16 +0000 (09:55 -0700)
Only enter the runtime to call __vmap_pages_range_noflush(), so that error
handling does not skip kmsan_leave_runtime().

This bug was spotted by CONFIG_WARN_CAPABILITY_ANALYSIS=y

Link: https://lkml.kernel.org/r/20250507160012.3311104-2-glider@google.com
Signed-off-by: Alexander Potapenko <glider@google.com>
Acked-by: 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>
mm/kmsan/shadow.c

index 6d32bfc18d6a2e9e8b705ea0f98aa9dc177d4b6a..54f3c3c962f07842587b8cde6f3b7247ca6de8dd 100644 (file)
@@ -247,17 +247,19 @@ int kmsan_vmap_pages_range_noflush(unsigned long start, unsigned long end,
        kmsan_enter_runtime();
        mapped = __vmap_pages_range_noflush(shadow_start, shadow_end, prot,
                                            s_pages, page_shift);
+       kmsan_leave_runtime();
        if (mapped) {
                err = mapped;
                goto ret;
        }
+       kmsan_enter_runtime();
        mapped = __vmap_pages_range_noflush(origin_start, origin_end, prot,
                                            o_pages, page_shift);
+       kmsan_leave_runtime();
        if (mapped) {
                err = mapped;
                goto ret;
        }
-       kmsan_leave_runtime();
        flush_tlb_kernel_range(shadow_start, shadow_end);
        flush_tlb_kernel_range(origin_start, origin_end);
        flush_cache_vmap(shadow_start, shadow_end);