Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

treewide: use get_random_u32_{above,below}() instead of manual loop

These cases were done with this Coccinelle:

@@
expression E;
identifier I;
@@
- do {
... when != I
- I = get_random_u32();
... when != I
- } while (I > E);
+ I = get_random_u32_below(E + 1);

@@
expression E;
identifier I;
@@
- do {
... when != I
- I = get_random_u32();
... when != I
- } while (I >= E);
+ I = get_random_u32_below(E);

@@
expression E;
identifier I;
@@
- do {
... when != I
- I = get_random_u32();
... when != I
- } while (I < E);
+ I = get_random_u32_above(E - 1);

@@
expression E;
identifier I;
@@
- do {
... when != I
- I = get_random_u32();
... when != I
- } while (I <= E);
+ I = get_random_u32_above(E);

@@
identifier I;
@@
- do {
... when != I
- I = get_random_u32();
... when != I
- } while (!I);
+ I = get_random_u32_above(0);

@@
identifier I;
@@
- do {
... when != I
- I = get_random_u32();
... when != I
- } while (I == 0);
+ I = get_random_u32_above(0);

@@
expression E;
@@
- E + 1 + get_random_u32_below(U32_MAX - E)
+ get_random_u32_above(E)

Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>

+5 -24
+1 -7
fs/ext4/mmp.c
··· 262 262 */ 263 263 static unsigned int mmp_new_seq(void) 264 264 { 265 - u32 new_seq; 266 - 267 - do { 268 - new_seq = get_random_u32(); 269 - } while (new_seq > EXT4_MMP_SEQ_MAX); 270 - 271 - return new_seq; 265 + return get_random_u32_below(EXT4_MMP_SEQ_MAX + 1); 272 266 } 273 267 274 268 /*
+1 -4
lib/test_fprobe.c
··· 144 144 145 145 static int fprobe_test_init(struct kunit *test) 146 146 { 147 - do { 148 - rand1 = get_random_u32(); 149 - } while (rand1 <= div_factor); 150 - 147 + rand1 = get_random_u32_above(div_factor); 151 148 target = fprobe_selftest_target; 152 149 target2 = fprobe_selftest_target2; 153 150 target_ip = get_ftrace_location(target);
+1 -4
lib/test_kprobes.c
··· 339 339 stacktrace_target = kprobe_stacktrace_target; 340 340 internal_target = kprobe_stacktrace_internal_target; 341 341 stacktrace_driver = kprobe_stacktrace_driver; 342 - 343 - do { 344 - rand1 = get_random_u32(); 345 - } while (rand1 <= div_factor); 342 + rand1 = get_random_u32_above(div_factor); 346 343 return 0; 347 344 } 348 345
+1 -7
net/ipv6/output_core.c
··· 15 15 const struct in6_addr *dst, 16 16 const struct in6_addr *src) 17 17 { 18 - u32 id; 19 - 20 - do { 21 - id = get_random_u32(); 22 - } while (!id); 23 - 24 - return id; 18 + return get_random_u32_above(0); 25 19 } 26 20 27 21 /* This function exists only for tap drivers that must support broken
+1 -2
net/vmw_vsock/af_vsock.c
··· 626 626 struct sockaddr_vm new_addr; 627 627 628 628 if (!port) 629 - port = LAST_RESERVED_PORT + 1 + 630 - get_random_u32_below(U32_MAX - LAST_RESERVED_PORT); 629 + port = get_random_u32_above(LAST_RESERVED_PORT); 631 630 632 631 vsock_addr_init(&new_addr, addr->svm_cid, addr->svm_port); 633 632