Skip to content

Commit

Permalink
lib: test_user_copy: style cleanup
Browse files Browse the repository at this point in the history
While writing the tests for copy_struct_from_user(), I used a construct
that Linus doesn't appear to be too fond of:

On 2019-10-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> Hmm. That code is ugly, both before and after the fix.
>
> This just doesn't make sense for so many reasons:
>
>         if ((ret |= test(umem_src == NULL, "kmalloc failed")))
>
> where the insanity comes from
>
>  - why "|=" when you know that "ret" was zero before (and it had to
>    be, for the test to make sense)
>
>  - why do this as a single line anyway?
>
>  - don't do the stupid "double parenthesis" to hide a warning. Make it
>    use an actual comparison if you add a layer of parentheses.

So instead, use a bog-standard check that isn't nearly as ugly.

Fixes: 3411158 ("usercopy: Add parentheses around assignment in test_copy_struct_from_user")
Fixes: f5a1a53 ("lib: introduce copy_struct_from_user() helper")
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
Link: https://lore.kernel.org/r/20191005233028.18566-1-cyphar@cyphar.com
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Aleksa Sarai authored and Christian Brauner committed Oct 7, 2019
1 parent da0c9ea commit c90012a
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions lib/test_user_copy.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,14 @@ static int test_check_nonzero_user(char *kmem, char __user *umem, size_t size)
size_t zero_end = size - zero_start;

/*
* We conduct a series of check_nonzero_user() tests on a block of memory
* with the following byte-pattern (trying every possible [start,end]
* pair):
* We conduct a series of check_nonzero_user() tests on a block of
* memory with the following byte-pattern (trying every possible
* [start,end] pair):
*
* [ 00 ff 00 ff ... 00 00 00 00 ... ff 00 ff 00 ]
*
* And we verify that check_nonzero_user() acts identically to memchr_inv().
* And we verify that check_nonzero_user() acts identically to
* memchr_inv().
*/

memset(kmem, 0x0, size);
Expand Down Expand Up @@ -93,11 +94,13 @@ static int test_copy_struct_from_user(char *kmem, char __user *umem,
size_t ksize, usize;

umem_src = kmalloc(size, GFP_KERNEL);
if ((ret |= test(umem_src == NULL, "kmalloc failed")))
ret = test(umem_src == NULL, "kmalloc failed");
if (ret)
goto out_free;

expected = kmalloc(size, GFP_KERNEL);
if ((ret |= test(expected == NULL, "kmalloc failed")))
ret = test(expected == NULL, "kmalloc failed");
if (ret)
goto out_free;

/* Fill umem with a fixed byte pattern. */
Expand Down

0 comments on commit c90012a

Please sign in to comment.