public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Hoeun Ryu <hoeun.ryu@gmail.com>
To: Kees Cook <keescook@chromium.org>
Cc: linux-kernel@vger.kernel.org,
	kernel-hardening@lists.openwall.com,
	Hoeun Ryu <hoeun.ryu@gmail.com>
Subject: [PATCH] usercopy: add testcases to check zeroing on failure of usercopy
Date: Sun, 12 Feb 2017 15:13:33 +0900	[thread overview]
Message-ID: <1486880019-8201-1-git-send-email-hoeun.ryu@gmail.com> (raw)

In the hardend usercopy, the destination buffer will be zeroed if
copy_from_user/get_user fails. This patch adds testcases for it.
The destination buffer is set with non-zero value before illegal
copy_from_user/get_user is executed and the buffer is compared to
zero after usercopy is done.

Signed-off-by: Hoeun Ryu <hoeun.ryu@gmail.com>
---
 lib/test_user_copy.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/test_user_copy.c b/lib/test_user_copy.c
index 0ecef3e..54bd898 100644
--- a/lib/test_user_copy.c
+++ b/lib/test_user_copy.c
@@ -41,11 +41,18 @@ static int __init test_user_copy_init(void)
 	char *bad_usermem;
 	unsigned long user_addr;
 	unsigned long value = 0x5A;
+	char *zerokmem;
 
 	kmem = kmalloc(PAGE_SIZE * 2, GFP_KERNEL);
 	if (!kmem)
 		return -ENOMEM;
 
+	zerokmem = kzalloc(PAGE_SIZE * 2, GFP_KERNEL);
+	if (!zerokmem) {
+		kfree(kmem);
+		return -ENOMEM;
+	}
+
 	user_addr = vm_mmap(NULL, 0, PAGE_SIZE * 2,
 			    PROT_READ | PROT_WRITE | PROT_EXEC,
 			    MAP_ANONYMOUS | MAP_PRIVATE, 0);
@@ -69,25 +76,35 @@ static int __init test_user_copy_init(void)
 		    "legitimate put_user failed");
 
 	/* Invalid usage: none of these should succeed. */
+	memset(kmem, 0x5A, PAGE_SIZE);
 	ret |= test(!copy_from_user(kmem, (char __user *)(kmem + PAGE_SIZE),
 				    PAGE_SIZE),
 		    "illegal all-kernel copy_from_user passed");
+	ret |= test(memcmp(zerokmem, kmem, PAGE_SIZE),
+		    "zeroing failure for illegal all-kernel copy_from_user");
+	memset(bad_usermem, 0x5A, PAGE_SIZE);
 	ret |= test(!copy_from_user(bad_usermem, (char __user *)kmem,
 				    PAGE_SIZE),
 		    "illegal reversed copy_from_user passed");
+	ret |= test(memcmp(zerokmem, bad_usermem, PAGE_SIZE),
+		    "zeroing failure for illegal reversed copy_from_user");
 	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");
+	memset(kmem, 0x5A, PAGE_SIZE);
 	ret |= test(!get_user(value, (unsigned long __user *)kmem),
 		    "illegal get_user passed");
+	ret |= test(memcmp(zerokmem, kmem, sizeof(value)),
+		    "zeroing failure for illegal get_user");
 	ret |= test(!put_user(value, (unsigned long __user *)kmem),
 		    "illegal put_user passed");
 
 	vm_munmap(user_addr, PAGE_SIZE * 2);
 	kfree(kmem);
+	kfree(zerokmem);
 
 	if (ret == 0) {
 		pr_info("tests passed.\n");
-- 
2.7.4

             reply	other threads:[~2017-02-12  6:13 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-12  6:13 Hoeun Ryu [this message]
2017-02-13 18:21 ` [PATCH] usercopy: add testcases to check zeroing on failure of usercopy Kees Cook
2017-02-13 18:33 ` Kees Cook
2017-02-13 19:24   ` Kees Cook
2017-02-14  1:44     ` Hoeun Ryu
2017-02-14 20:36       ` Kees Cook
2017-02-14 23:42         ` Hoeun Ryu
2017-02-15 10:45         ` Mark Rutland
2017-02-15 19:18           ` Kees Cook

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1486880019-8201-1-git-send-email-hoeun.ryu@gmail.com \
    --to=hoeun.ryu@gmail.com \
    --cc=keescook@chromium.org \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox