]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/kasan/tags.c
Merge branch 'imm.timestamp' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux.git] / mm / kasan / tags.c
index 63fca317265997166716842611daba70cdf7191c..0e987c9ca052d5421acdece1896b82f636e4a1db 100644 (file)
@@ -76,7 +76,7 @@ void *kasan_reset_tag(const void *addr)
        return reset_tag(addr);
 }
 
-void check_memory_region(unsigned long addr, size_t size, bool write,
+bool check_memory_region(unsigned long addr, size_t size, bool write,
                                unsigned long ret_ip)
 {
        u8 tag;
@@ -84,7 +84,7 @@ void check_memory_region(unsigned long addr, size_t size, bool write,
        void *untagged_addr;
 
        if (unlikely(size == 0))
-               return;
+               return true;
 
        tag = get_tag((const void *)addr);
 
@@ -106,22 +106,24 @@ void check_memory_region(unsigned long addr, size_t size, bool write,
         * set to KASAN_TAG_KERNEL (0xFF)).
         */
        if (tag == KASAN_TAG_KERNEL)
-               return;
+               return true;
 
        untagged_addr = reset_tag((const void *)addr);
        if (unlikely(untagged_addr <
                        kasan_shadow_to_mem((void *)KASAN_SHADOW_START))) {
                kasan_report(addr, size, write, ret_ip);
-               return;
+               return false;
        }
        shadow_first = kasan_mem_to_shadow(untagged_addr);
        shadow_last = kasan_mem_to_shadow(untagged_addr + size - 1);
        for (shadow = shadow_first; shadow <= shadow_last; shadow++) {
                if (*shadow != tag) {
                        kasan_report(addr, size, write, ret_ip);
-                       return;
+                       return false;
                }
        }
+
+       return true;
 }
 
 #define DEFINE_HWASAN_LOAD_STORE(size)                                 \