Loading mm/kasan/kasan.c +15 −0 Original line number Diff line number Diff line Loading @@ -770,6 +770,21 @@ void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom) } EXPORT_SYMBOL(__asan_allocas_unpoison); /* Emitted by the compiler to [un]poison local variables. */ #define DEFINE_ASAN_SET_SHADOW(byte) \ void __asan_set_shadow_##byte(const void *addr, size_t size) \ { \ __memset((void *)addr, 0x##byte, size); \ } \ EXPORT_SYMBOL(__asan_set_shadow_##byte) DEFINE_ASAN_SET_SHADOW(00); DEFINE_ASAN_SET_SHADOW(f1); DEFINE_ASAN_SET_SHADOW(f2); DEFINE_ASAN_SET_SHADOW(f3); DEFINE_ASAN_SET_SHADOW(f5); DEFINE_ASAN_SET_SHADOW(f8); #ifdef CONFIG_MEMORY_HOTPLUG static int __meminit kasan_mem_notifier(struct notifier_block *nb, unsigned long action, void *data) Loading mm/kasan/kasan.h +44 −0 Original line number Diff line number Diff line Loading @@ -121,4 +121,48 @@ static inline void quarantine_reduce(void) { } static inline void quarantine_remove_cache(struct kmem_cache *cache) { } #endif /* * Exported functions for interfaces called from assembly or from generated * code. Declarations here to avoid warning about missing declarations. */ asmlinkage void kasan_unpoison_task_stack_below(const void *watermark); void __asan_register_globals(struct kasan_global *globals, size_t size); void __asan_unregister_globals(struct kasan_global *globals, size_t size); void __asan_loadN(unsigned long addr, size_t size); void __asan_storeN(unsigned long addr, size_t size); void __asan_handle_no_return(void); void __asan_poison_stack_memory(const void *addr, size_t size); void __asan_unpoison_stack_memory(const void *addr, size_t size); void __asan_alloca_poison(unsigned long addr, size_t size); void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom); void __asan_load1(unsigned long addr); void __asan_store1(unsigned long addr); void __asan_load2(unsigned long addr); void __asan_store2(unsigned long addr); void __asan_load4(unsigned long addr); void __asan_store4(unsigned long addr); void __asan_load8(unsigned long addr); void __asan_store8(unsigned long addr); void __asan_load16(unsigned long addr); void __asan_store16(unsigned long addr); void __asan_load1_noabort(unsigned long addr); void __asan_store1_noabort(unsigned long addr); void __asan_load2_noabort(unsigned long addr); void __asan_store2_noabort(unsigned long addr); void __asan_load4_noabort(unsigned long addr); void __asan_store4_noabort(unsigned long addr); void __asan_load8_noabort(unsigned long addr); void __asan_store8_noabort(unsigned long addr); void __asan_load16_noabort(unsigned long addr); void __asan_store16_noabort(unsigned long addr); void __asan_set_shadow_00(const void *addr, size_t size); void __asan_set_shadow_f1(const void *addr, size_t size); void __asan_set_shadow_f2(const void *addr, size_t size); void __asan_set_shadow_f3(const void *addr, size_t size); void __asan_set_shadow_f5(const void *addr, size_t size); void __asan_set_shadow_f8(const void *addr, size_t size); #endif Loading
mm/kasan/kasan.c +15 −0 Original line number Diff line number Diff line Loading @@ -770,6 +770,21 @@ void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom) } EXPORT_SYMBOL(__asan_allocas_unpoison); /* Emitted by the compiler to [un]poison local variables. */ #define DEFINE_ASAN_SET_SHADOW(byte) \ void __asan_set_shadow_##byte(const void *addr, size_t size) \ { \ __memset((void *)addr, 0x##byte, size); \ } \ EXPORT_SYMBOL(__asan_set_shadow_##byte) DEFINE_ASAN_SET_SHADOW(00); DEFINE_ASAN_SET_SHADOW(f1); DEFINE_ASAN_SET_SHADOW(f2); DEFINE_ASAN_SET_SHADOW(f3); DEFINE_ASAN_SET_SHADOW(f5); DEFINE_ASAN_SET_SHADOW(f8); #ifdef CONFIG_MEMORY_HOTPLUG static int __meminit kasan_mem_notifier(struct notifier_block *nb, unsigned long action, void *data) Loading
mm/kasan/kasan.h +44 −0 Original line number Diff line number Diff line Loading @@ -121,4 +121,48 @@ static inline void quarantine_reduce(void) { } static inline void quarantine_remove_cache(struct kmem_cache *cache) { } #endif /* * Exported functions for interfaces called from assembly or from generated * code. Declarations here to avoid warning about missing declarations. */ asmlinkage void kasan_unpoison_task_stack_below(const void *watermark); void __asan_register_globals(struct kasan_global *globals, size_t size); void __asan_unregister_globals(struct kasan_global *globals, size_t size); void __asan_loadN(unsigned long addr, size_t size); void __asan_storeN(unsigned long addr, size_t size); void __asan_handle_no_return(void); void __asan_poison_stack_memory(const void *addr, size_t size); void __asan_unpoison_stack_memory(const void *addr, size_t size); void __asan_alloca_poison(unsigned long addr, size_t size); void __asan_allocas_unpoison(const void *stack_top, const void *stack_bottom); void __asan_load1(unsigned long addr); void __asan_store1(unsigned long addr); void __asan_load2(unsigned long addr); void __asan_store2(unsigned long addr); void __asan_load4(unsigned long addr); void __asan_store4(unsigned long addr); void __asan_load8(unsigned long addr); void __asan_store8(unsigned long addr); void __asan_load16(unsigned long addr); void __asan_store16(unsigned long addr); void __asan_load1_noabort(unsigned long addr); void __asan_store1_noabort(unsigned long addr); void __asan_load2_noabort(unsigned long addr); void __asan_store2_noabort(unsigned long addr); void __asan_load4_noabort(unsigned long addr); void __asan_store4_noabort(unsigned long addr); void __asan_load8_noabort(unsigned long addr); void __asan_store8_noabort(unsigned long addr); void __asan_load16_noabort(unsigned long addr); void __asan_store16_noabort(unsigned long addr); void __asan_set_shadow_00(const void *addr, size_t size); void __asan_set_shadow_f1(const void *addr, size_t size); void __asan_set_shadow_f2(const void *addr, size_t size); void __asan_set_shadow_f3(const void *addr, size_t size); void __asan_set_shadow_f5(const void *addr, size_t size); void __asan_set_shadow_f8(const void *addr, size_t size); #endif