Commit d247aabd authored by Jason A. Donenfeld's avatar Jason A. Donenfeld
Browse files

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: default avatarKees Cook <keescook@chromium.org>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
parent 8032bf12
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -262,13 +262,7 @@ void ext4_stop_mmpd(struct ext4_sb_info *sbi)
 */
static unsigned int mmp_new_seq(void)
{
	u32 new_seq;

	do {
		new_seq = get_random_u32();
	} while (new_seq > EXT4_MMP_SEQ_MAX);

	return new_seq;
	return get_random_u32_below(EXT4_MMP_SEQ_MAX + 1);
}

/*
+1 −4
Original line number Diff line number Diff line
@@ -144,10 +144,7 @@ static unsigned long get_ftrace_location(void *func)

static int fprobe_test_init(struct kunit *test)
{
	do {
		rand1 = get_random_u32();
	} while (rand1 <= div_factor);

	rand1 = get_random_u32_above(div_factor);
	target = fprobe_selftest_target;
	target2 = fprobe_selftest_target2;
	target_ip = get_ftrace_location(target);
+1 −4
Original line number Diff line number Diff line
@@ -339,10 +339,7 @@ static int kprobes_test_init(struct kunit *test)
	stacktrace_target = kprobe_stacktrace_target;
	internal_target = kprobe_stacktrace_internal_target;
	stacktrace_driver = kprobe_stacktrace_driver;

	do {
		rand1 = get_random_u32();
	} while (rand1 <= div_factor);
	rand1 = get_random_u32_above(div_factor);
	return 0;
}

+1 −7
Original line number Diff line number Diff line
@@ -15,13 +15,7 @@ static u32 __ipv6_select_ident(struct net *net,
			       const struct in6_addr *dst,
			       const struct in6_addr *src)
{
	u32 id;

	do {
		id = get_random_u32();
	} while (!id);

	return id;
	return get_random_u32_above(0);
}

/* This function exists only for tap drivers that must support broken
+1 −2
Original line number Diff line number Diff line
@@ -626,8 +626,7 @@ static int __vsock_bind_connectible(struct vsock_sock *vsk,
	struct sockaddr_vm new_addr;

	if (!port)
		port = LAST_RESERVED_PORT + 1 +
			get_random_u32_below(U32_MAX - LAST_RESERVED_PORT);
		port = get_random_u32_above(LAST_RESERVED_PORT);

	vsock_addr_init(&new_addr, addr->svm_cid, addr->svm_port);