lkdtm: remove set_fs-based tests
authorChristoph Hellwig <hch@lst.de>
Thu, 3 Sep 2020 14:22:37 +0000 (16:22 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 9 Sep 2020 02:21:34 +0000 (22:21 -0400)
Once we can't manipulate the address limit, we also can't test what
happens when the manipulation is abused.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/misc/lkdtm/bugs.c
drivers/misc/lkdtm/core.c
drivers/misc/lkdtm/lkdtm.h
drivers/misc/lkdtm/usercopy.c
tools/testing/selftests/lkdtm/tests.txt

index 4dfbfd51bdf77425c808daa24fdfb57981fbfacf..a0675d4154d2fdaff4e8f8f1c08d7a79143246e7 100644 (file)
@@ -312,16 +312,6 @@ void lkdtm_CORRUPT_LIST_DEL(void)
                pr_err("list_del() corruption not detected!\n");
 }
 
-/* Test if unbalanced set_fs(KERNEL_DS)/set_fs(USER_DS) check exists. */
-void lkdtm_CORRUPT_USER_DS(void)
-{
-       pr_info("setting bad task size limit\n");
-       set_fs(KERNEL_DS);
-
-       /* Make sure we do not keep running with a KERNEL_DS! */
-       force_sig(SIGKILL);
-}
-
 /* Test that VMAP_STACK is actually allocating with a leading guard page */
 void lkdtm_STACK_GUARD_PAGE_LEADING(void)
 {
index a5e344df91663294e4e205c0a04e898956fb697f..97803f213d9d455625c830840aae89acf4caa155 100644 (file)
@@ -112,7 +112,6 @@ static const struct crashtype crashtypes[] = {
        CRASHTYPE(CORRUPT_STACK_STRONG),
        CRASHTYPE(CORRUPT_LIST_ADD),
        CRASHTYPE(CORRUPT_LIST_DEL),
-       CRASHTYPE(CORRUPT_USER_DS),
        CRASHTYPE(STACK_GUARD_PAGE_LEADING),
        CRASHTYPE(STACK_GUARD_PAGE_TRAILING),
        CRASHTYPE(UNSET_SMEP),
@@ -172,7 +171,6 @@ static const struct crashtype crashtypes[] = {
        CRASHTYPE(USERCOPY_STACK_FRAME_FROM),
        CRASHTYPE(USERCOPY_STACK_BEYOND),
        CRASHTYPE(USERCOPY_KERNEL),
-       CRASHTYPE(USERCOPY_KERNEL_DS),
        CRASHTYPE(STACKLEAK_ERASING),
        CRASHTYPE(CFI_FORWARD_PROTO),
 #ifdef CONFIG_X86_32
index 8878538b2c1322d1330e4e61dfbb908c656d5263..6dec4c9b442ff34e9c516e54ee8d4706af7ad0bd 100644 (file)
@@ -27,7 +27,6 @@ void lkdtm_OVERFLOW_UNSIGNED(void);
 void lkdtm_ARRAY_BOUNDS(void);
 void lkdtm_CORRUPT_LIST_ADD(void);
 void lkdtm_CORRUPT_LIST_DEL(void);
-void lkdtm_CORRUPT_USER_DS(void);
 void lkdtm_STACK_GUARD_PAGE_LEADING(void);
 void lkdtm_STACK_GUARD_PAGE_TRAILING(void);
 void lkdtm_UNSET_SMEP(void);
@@ -96,7 +95,6 @@ void lkdtm_USERCOPY_STACK_FRAME_TO(void);
 void lkdtm_USERCOPY_STACK_FRAME_FROM(void);
 void lkdtm_USERCOPY_STACK_BEYOND(void);
 void lkdtm_USERCOPY_KERNEL(void);
-void lkdtm_USERCOPY_KERNEL_DS(void);
 
 /* lkdtm_stackleak.c */
 void lkdtm_STACKLEAK_ERASING(void);
index b833367a45d05318ef86eda5c6d118d7abf846af..109e8d4302c11332decb0334c55854fa8b390a01 100644 (file)
@@ -325,21 +325,6 @@ free_user:
        vm_munmap(user_addr, PAGE_SIZE);
 }
 
-void lkdtm_USERCOPY_KERNEL_DS(void)
-{
-       char __user *user_ptr =
-               (char __user *)(0xFUL << (sizeof(unsigned long) * 8 - 4));
-       mm_segment_t old_fs = get_fs();
-       char buf[10] = {0};
-
-       pr_info("attempting copy_to_user() to noncanonical address: %px\n",
-               user_ptr);
-       set_fs(KERNEL_DS);
-       if (copy_to_user(user_ptr, buf, sizeof(buf)) == 0)
-               pr_err("copy_to_user() to noncanonical address succeeded!?\n");
-       set_fs(old_fs);
-}
-
 void __init lkdtm_usercopy_init(void)
 {
        /* Prepare cache that lacks SLAB_USERCOPY flag. */
index 9d266e79c6a270f5cfca3199dbcd06da2bc09c4a..74a8d329a72c80cd4ab1590d3a95377ed30438f1 100644 (file)
@@ -9,7 +9,6 @@ EXCEPTION
 #CORRUPT_STACK_STRONG Crashes entire system on success
 CORRUPT_LIST_ADD list_add corruption
 CORRUPT_LIST_DEL list_del corruption
-CORRUPT_USER_DS Invalid address limit on user-mode return
 STACK_GUARD_PAGE_LEADING
 STACK_GUARD_PAGE_TRAILING
 UNSET_SMEP CR4 bits went missing
@@ -67,6 +66,5 @@ USERCOPY_STACK_FRAME_TO
 USERCOPY_STACK_FRAME_FROM
 USERCOPY_STACK_BEYOND
 USERCOPY_KERNEL
-USERCOPY_KERNEL_DS
 STACKLEAK_ERASING OK: the rest of the thread stack is properly erased
 CFI_FORWARD_PROTO