x86_64: kasan: add interceptors for memset/memmove/memcpy functions
[linux-drm-fsl-dcu.git] / mm / kasan / kasan.c
index dc83f070edb6cf1de238d4129ca97849f8944259..799c52b9826ca1667ffa858a0b10573afd95424c 100644 (file)
@@ -255,6 +255,35 @@ static __always_inline void check_memory_region(unsigned long addr,
        kasan_report(addr, size, write, _RET_IP_);
 }
 
+void __asan_loadN(unsigned long addr, size_t size);
+void __asan_storeN(unsigned long addr, size_t size);
+
+#undef memset
+void *memset(void *addr, int c, size_t len)
+{
+       __asan_storeN((unsigned long)addr, len);
+
+       return __memset(addr, c, len);
+}
+
+#undef memmove
+void *memmove(void *dest, const void *src, size_t len)
+{
+       __asan_loadN((unsigned long)src, len);
+       __asan_storeN((unsigned long)dest, len);
+
+       return __memmove(dest, src, len);
+}
+
+#undef memcpy
+void *memcpy(void *dest, const void *src, size_t len)
+{
+       __asan_loadN((unsigned long)src, len);
+       __asan_storeN((unsigned long)dest, len);
+
+       return __memcpy(dest, src, len);
+}
+
 void kasan_alloc_pages(struct page *page, unsigned int order)
 {
        if (likely(!PageHighMem(page)))