Patch "usercopy: Adjust tests to deal with SMAP/PAN" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
usercopy: Adjust tests to deal with SMAP/PAN
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
usercopy-adjust-tests-to-deal-with-smap-pan.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f5f893c57e37ca730808cb2eee3820abd05e7507Mon Sep 17 00:00:00 2001
From: Kees Cook <[email protected]>
Date: Mon, 13 Feb 2017 11:25:26 -0800
Subject: usercopy: Adjust tests to deal with SMAP/PAN
From: Kees Cook <[email protected]>
commit f5f893c57e37ca730808cb2eee3820abd05e7507 upstream.
Under SMAP/PAN/etc, we cannot write directly to userspace memory, so this rearranges the test bytes to get written through copy_to_user(). Additionally drops the bad copy_from_user() test that would trigger a memcpy() against userspace on failure.
[arnd: the test module was added in 3.14, and this backported patch
should apply cleanly on all version from 3.14 to 4.10. The original patch was in 4.11 on top of a context change I saw the bug triggered with kselftest on a 4.4.y stable kernel]
--- lib/test_user_copy.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)
lib/test_user_copy.c +18 -2
@@ -58,7 +58,9 @@ static int __init test_user_copy_init(vo usermem = (char __user *)user_addr; bad_usermem = (char *)user_addr; -/* Legitimate usage: none of these should fail. */ +/* +* Legitimate usage: none of these copies should fail. +*/ ret |=test (copy_from_user (kmem, usermem,PAGE_SIZE ),"legitimate copy_from_user failed" ); ret |= test(copy_to_user(usermem, kmem, PAGE_SIZE),
@@ -68,19 +70,33 @@ static int __init test_user_copy_init(vo ret |=test (put_user (value, (unsigned long __user *)usermem),"legitimate put_user failed" ); -/* Invalid usage: none of these should succeed. */ +/* +* Invalid usage: none of these copies should succeed. +*/ + +/* Reject kernel-to-kernel copies through copy_from_user(). */ ret |=test (!copy_from_user (kmem, (char __user *)(kmem +PAGE_SIZE ),PAGE_SIZE ),"illegal all-kernel copy_from_user passed" ); + +#if 0 +/* +* When running with SMAP/PAN/etc, this will Oops the kernel +* due to the zeroing of userspace memory on failure. This needs +* to be tested in LKDTM instead, since this test module does not +* expect to explode. +*/ ret |=test (!copy_from_user (bad_usermem, (char __user *)kmem,PAGE_SIZE ),"illegal reversed copy_from_user passed" ); +#endif ret |=test (!copy_to_user ((char __user *)kmem, kmem +PAGE_SIZE ,PAGE_SIZE ),"illegal all-kernel copy_to_user passed" ); ret |=test (!copy_to_user ((char __user *)kmem, bad_usermem,PAGE_SIZE ),"illegal reversed copy_to_user passed" ); + ret |=test (!get_user (value, (unsigned long __user *)kmem),"illegal get_user passed" ); ret |= test(!put_user(value, (unsigned long __user *)kmem),
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/usercopy-adjust-tests-to-deal-with-smap-pan.patch