}
 NOKPROBE_SYMBOL(vmalloc_fault);
 
-void arch_sync_kernel_mappings(unsigned long start, unsigned long end)
+static void __arch_sync_kernel_mappings(unsigned long start, unsigned long end)
 {
        unsigned long addr;
 
        }
 }
 
+void arch_sync_kernel_mappings(unsigned long start, unsigned long end)
+{
+       __arch_sync_kernel_mappings(start, end);
+#ifdef CONFIG_KMSAN
+       /*
+        * KMSAN maintains two additional metadata page mappings for the
+        * [VMALLOC_START, VMALLOC_END) range. These mappings start at
+        * KMSAN_VMALLOC_SHADOW_START and KMSAN_VMALLOC_ORIGIN_START and
+        * have to be synced together with the vmalloc memory mapping.
+        */
+       if (start >= VMALLOC_START && end < VMALLOC_END) {
+               __arch_sync_kernel_mappings(
+                       start - VMALLOC_START + KMSAN_VMALLOC_SHADOW_START,
+                       end - VMALLOC_START + KMSAN_VMALLOC_SHADOW_START);
+               __arch_sync_kernel_mappings(
+                       start - VMALLOC_START + KMSAN_VMALLOC_ORIGIN_START,
+                       end - VMALLOC_START + KMSAN_VMALLOC_ORIGIN_START);
+       }
+#endif
+}
+
 static bool low_pfn(unsigned long pfn)
 {
        return pfn < max_low_pfn;