diff options
Diffstat (limited to 'kernel/drivers/misc/lkdtm.c')
-rw-r--r-- | kernel/drivers/misc/lkdtm.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/drivers/misc/lkdtm.c b/kernel/drivers/misc/lkdtm.c index b5abe3412..11fdadc68 100644 --- a/kernel/drivers/misc/lkdtm.c +++ b/kernel/drivers/misc/lkdtm.c @@ -472,7 +472,7 @@ static void lkdtm_do_action(enum ctype which) break; } case CT_ACCESS_USERSPACE: { - unsigned long user_addr, tmp; + unsigned long user_addr, tmp = 0; unsigned long *ptr; user_addr = vm_mmap(NULL, 0, PAGE_SIZE, @@ -483,6 +483,12 @@ static void lkdtm_do_action(enum ctype which) return; } + if (copy_to_user((void __user *)user_addr, &tmp, sizeof(tmp))) { + pr_warn("copy_to_user failed\n"); + vm_munmap(user_addr, PAGE_SIZE); + return; + } + ptr = (unsigned long *)user_addr; pr_info("attempting bad read at %p\n", ptr); |