You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
kasan: support use-after-scope detection
Gcc revision 241896 implements use-after-scope detection. Will be available in gcc 7. Support it in KASAN. Gcc emits 2 new callbacks to poison/unpoison large stack objects when they go in/out of scope. Implement the callbacks and add a test. [dvyukov@google.com: v3] Link: http://lkml.kernel.org/r/1479998292-144502-1-git-send-email-dvyukov@google.com Link: http://lkml.kernel.org/r/1479226045-145148-1-git-send-email-dvyukov@google.com Signed-off-by: Dmitry Vyukov <dvyukov@google.com> Acked-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Alexander Potapenko <glider@google.com> Cc: <stable@vger.kernel.org> [4.0+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
045d599a28
commit
828347f8f9
@@ -20,6 +20,11 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
/*
|
||||
* Note: test functions are marked noinline so that their names appear in
|
||||
* reports.
|
||||
*/
|
||||
|
||||
static noinline void __init kmalloc_oob_right(void)
|
||||
{
|
||||
char *ptr;
|
||||
@@ -411,6 +416,29 @@ static noinline void __init copy_user_test(void)
|
||||
kfree(kmem);
|
||||
}
|
||||
|
||||
static noinline void __init use_after_scope_test(void)
|
||||
{
|
||||
volatile char *volatile p;
|
||||
|
||||
pr_info("use-after-scope on int\n");
|
||||
{
|
||||
int local = 0;
|
||||
|
||||
p = (char *)&local;
|
||||
}
|
||||
p[0] = 1;
|
||||
p[3] = 1;
|
||||
|
||||
pr_info("use-after-scope on array\n");
|
||||
{
|
||||
char local[1024] = {0};
|
||||
|
||||
p = local;
|
||||
}
|
||||
p[0] = 1;
|
||||
p[1023] = 1;
|
||||
}
|
||||
|
||||
static int __init kmalloc_tests_init(void)
|
||||
{
|
||||
kmalloc_oob_right();
|
||||
@@ -436,6 +464,7 @@ static int __init kmalloc_tests_init(void)
|
||||
kasan_global_oob();
|
||||
ksize_unpoisons_memory();
|
||||
copy_user_test();
|
||||
use_after_scope_test();
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user