diff options
Diffstat (limited to 'lib/test_kasan.c')
| -rw-r--r-- | lib/test_kasan.c | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/test_kasan.c b/lib/test_kasan.c index 3872d250ed2c..e3087d90e00d 100644 --- a/lib/test_kasan.c +++ b/lib/test_kasan.c @@ -285,6 +285,24 @@ static noinline void __init kmalloc_oob_in_memset(void)  	kfree(ptr);  } +static noinline void __init kmalloc_memmove_invalid_size(void) +{ +	char *ptr; +	size_t size = 64; +	volatile size_t invalid_size = -2; + +	pr_info("invalid size in memmove\n"); +	ptr = kmalloc(size, GFP_KERNEL); +	if (!ptr) { +		pr_err("Allocation failed\n"); +		return; +	} + +	memset((char *)ptr, 0, 64); +	memmove((char *)ptr, (char *)ptr + 4, invalid_size); +	kfree(ptr); +} +  static noinline void __init kmalloc_uaf(void)  {  	char *ptr; @@ -799,6 +817,7 @@ static int __init kmalloc_tests_init(void)  	kmalloc_oob_memset_4();  	kmalloc_oob_memset_8();  	kmalloc_oob_memset_16(); +	kmalloc_memmove_invalid_size();  	kmalloc_uaf();  	kmalloc_uaf_memset();  	kmalloc_uaf2();  |