|
@@ -764,6 +764,25 @@ EXPORT_SYMBOL(__asan_storeN_noabort);
|
|
|
void __asan_handle_no_return(void) {}
|
|
|
EXPORT_SYMBOL(__asan_handle_no_return);
|
|
|
|
|
|
+/* Emitted by compiler to poison large objects when they go out of scope. */
|
|
|
+void __asan_poison_stack_memory(const void *addr, size_t size)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * Addr is KASAN_SHADOW_SCALE_SIZE-aligned and the object is surrounded
|
|
|
+ * by redzones, so we simply round up size to simplify logic.
|
|
|
+ */
|
|
|
+ kasan_poison_shadow(addr, round_up(size, KASAN_SHADOW_SCALE_SIZE),
|
|
|
+ KASAN_USE_AFTER_SCOPE);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(__asan_poison_stack_memory);
|
|
|
+
|
|
|
+/* Emitted by compiler to unpoison large objects when they go into scope. */
|
|
|
+void __asan_unpoison_stack_memory(const void *addr, size_t size)
|
|
|
+{
|
|
|
+ kasan_unpoison_shadow(addr, size);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(__asan_unpoison_stack_memory);
|
|
|
+
|
|
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
|
|
static int kasan_mem_notifier(struct notifier_block *nb,
|
|
|
unsigned long action, void *data)
|