Skip to content
Permalink
Browse files
lkdtm/usercopy: Expand size of "out of frame" object
To be sufficient out of range for the usercopy test to see the lifetime
mismatch, expand the size of the "bad" buffer, which will let it be
beyond current_stack_pointer regardless of stack growth direction.
Paired with the recent addition of stack depth checking under
CONFIG_HARDENED_USERCOPY=y, this will correctly start tripping again.

Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
  • Loading branch information
kees authored and intel-lab-lkp committed Feb 16, 2022
1 parent e6cb9c1 commit aa676e88f535bd79a3e22a1cc70c9b6cc51dbbfe
Showing 1 changed file with 12 additions and 3 deletions.
@@ -30,20 +30,25 @@ static const unsigned char test_text[] = "This is a test.\n";
*/
static noinline unsigned char *trick_compiler(unsigned char *stack)
{
return stack + 0;
return stack + unconst;
}

static noinline unsigned char *do_usercopy_stack_callee(int value)
{
unsigned char buf[32];
unsigned char buf[128];
int i;

/* Exercise stack to avoid everything living in registers. */
for (i = 0; i < sizeof(buf); i++) {
buf[i] = value & 0xff;
}

return trick_compiler(buf);
/*
* Put the target buffer in the middle of stack allocation
* so that we don't step on future stack users regardless
* of stack growth direction.
*/
return trick_compiler(&buf[(128/2)-32]);
}

static noinline void do_usercopy_stack(bool to_user, bool bad_frame)
@@ -66,6 +71,10 @@ static noinline void do_usercopy_stack(bool to_user, bool bad_frame)
bad_stack -= sizeof(unsigned long);
}

pr_info("stack : %px\n", (void *)current_stack_pointer);
pr_info("good_stack: %px-%px\n", good_stack, good_stack + sizeof(good_stack));
pr_info("bad_stack : %px-%px\n", bad_stack, bad_stack + sizeof(good_stack));

user_addr = vm_mmap(NULL, 0, PAGE_SIZE,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_ANONYMOUS | MAP_PRIVATE, 0);

0 comments on commit aa676e8

Please sign in to comment.