Jason A. Donenfeld
7e3cf0843f
treewide: use get_random_{u8,u16}() when possible, part 1
Rather than truncate a 32-bit value to a 16-bit value or an 8-bit value,
simply use the get_random_{u8,u16}() functions, which are faster than
wasting the additional bytes from a 32-bit value. This was done
mechanically with this coccinelle script:
@@
expression E;
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
typedef u16;
typedef __be16;
typedef __le16;
typedef u8;
@@
(
- (get_random_u32() & 0xffff)
+ get_random_u16()
|
- (get_random_u32() & 0xff)
+ get_random_u8()
|
- (get_random_u32() % 65536)
+ get_random_u16()
|
- (get_random_u32() % 256)
+ get_random_u8()
|
- (get_random_u32() >> 16)
+ get_random_u16()
|
- (get_random_u32() >> 24)
+ get_random_u8()
|
- (u16)get_random_u32()
+ get_random_u16()
|
- (u8)get_random_u32()
+ get_random_u8()
|
- (__be16)get_random_u32()
+ (__be16)get_random_u16()
|
- (__le16)get_random_u32()
+ (__le16)get_random_u16()
|
- prandom_u32_max(65536)
+ get_random_u16()
|
- prandom_u32_max(256)
+ get_random_u8()
|
- E->inet_id = get_random_u32()
+ E->inet_id = get_random_u16()
)
@@
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
typedef u16;
identifier v;
@@
- u16 v = get_random_u32();
+ u16 v = get_random_u16();
@@
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
typedef u8;
identifier v;
@@
- u8 v = get_random_u32();
+ u8 v = get_random_u8();
@@
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
typedef u16;
u16 v;
@@
- v = get_random_u32();
+ v = get_random_u16();
@@
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
typedef u8;
u8 v;
@@
- v = get_random_u32();
+ v = get_random_u8();
// Find a potential literal
@literal_mask@
expression LITERAL;
type T;
identifier get_random_u32 =~ "get_random_int|prandom_u32|get_random_u32";
position p;
@@
((T)get_random_u32()@p & (LITERAL))
// Examine limits
@script:python add_one@
literal << literal_mask.LITERAL;
RESULT;
@@
value = None
if literal.startswith('0x'):
value = int(literal, 16)
elif literal[0] in '123456789':
value = int(literal, 10)
if value is None:
print("I don't know how to handle %s" % (literal))
cocci.include_match(False)
elif value < 256:
coccinelle.RESULT = cocci.make_ident("get_random_u8")
elif value < 65536:
coccinelle.RESULT = cocci.make_ident("get_random_u16")
else:
print("Skipping large mask of %s" % (literal))
cocci.include_match(False)
// Replace the literal mask with the calculated result.
@plus_one@
expression literal_mask.LITERAL;
position literal_mask.p;
identifier add_one.RESULT;
identifier FUNC;
@@
- (FUNC()@p & (LITERAL))
+ (RESULT() & LITERAL)
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Yury Norov <yury.norov@gmail.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Toke Høiland-Jørgensen <toke@toke.dk> # for sch_cake
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-10-11 17:42:58 -06:00
..
2022-08-03 23:56:20 +03:00
2022-09-24 16:14:43 +08:00
2019-05-30 11:26:37 -07:00
2020-07-09 18:25:23 +10:00
2021-01-03 08:41:35 +11:00
2020-01-09 11:30:58 +08:00
2021-03-19 21:59:45 +11:00
2020-11-27 17:13:40 +11:00
2021-03-19 21:59:45 +11:00
2021-03-19 21:59:45 +11:00
2020-01-09 11:30:53 +08:00
2019-07-26 14:55:33 +10:00
2022-08-08 22:37:23 -04:00
2020-08-28 16:58:28 +10:00
2022-09-09 16:18:33 +08:00
2022-08-19 18:39:34 +08:00
2021-12-13 12:04:45 -06:00
2020-08-21 14:45:27 +10:00
2022-08-08 22:37:23 -04:00
2020-09-25 17:48:52 +10:00
2020-08-21 14:45:26 +10:00
2021-01-03 08:41:35 +11:00
2020-01-09 11:30:53 +08:00
2022-08-26 18:50:38 +08:00
2020-09-11 14:39:16 +10:00
2022-09-24 16:14:44 +08:00
2022-01-31 11:21:44 +11:00
2020-07-16 21:49:08 +10:00
2021-01-03 08:41:39 +11:00
2019-05-30 11:26:32 -07:00
2021-02-10 17:55:56 +11:00
2021-02-10 17:55:56 +11:00
2021-02-10 17:55:56 +11:00
2021-02-10 17:55:56 +11:00
2019-05-24 17:27:12 +02:00
2021-01-03 08:41:35 +11:00
2021-01-03 08:41:35 +11:00
2022-03-03 10:49:20 +12:00
2020-07-16 21:49:08 +10:00
2019-11-22 18:48:39 +08:00
2021-01-03 08:41:35 +11:00
2021-01-03 08:41:35 +11:00
2019-12-11 16:37:01 +08:00
2021-04-16 21:24:27 +10:00
2020-08-21 14:45:25 +10:00
2022-03-07 12:48:35 -07:00
2013-09-12 15:31:34 +10:00
2020-08-21 14:45:25 +10:00
2022-05-13 17:24:48 +08:00
2022-04-08 16:13:30 +08:00
2019-07-08 20:57:08 -07:00
2019-12-20 14:58:35 +08:00
2019-11-01 13:38:32 +08:00
2021-01-03 08:41:35 +11:00
2020-07-16 21:49:08 +10:00
2022-09-24 16:14:43 +08:00
2020-08-07 11:33:22 -07:00
2020-01-09 11:30:53 +08:00
2022-03-03 10:47:50 +12:00
2022-09-24 16:14:43 +08:00
2022-08-19 18:39:36 +08:00
2021-01-03 08:41:35 +11:00
2021-03-26 19:55:55 +11:00
2021-10-29 21:04:03 +08:00
2021-03-13 00:04:03 +11:00
2022-09-24 16:14:43 +08:00
2022-09-24 16:14:43 +08:00
2021-03-26 19:41:58 +11:00
2020-07-16 21:49:07 +10:00
2021-10-29 21:04:03 +08:00
2019-04-18 22:15:02 +08:00
2019-04-18 22:15:02 +08:00
2022-04-29 13:44:58 +08:00
2022-08-26 18:50:38 +08:00
2021-04-02 18:28:13 +11:00
2022-07-15 16:43:22 +08:00
2020-08-07 11:33:22 -07:00
2020-07-16 21:49:08 +10:00
2020-08-07 11:33:22 -07:00
2020-01-09 11:30:53 +08:00
2020-02-18 07:35:49 -05:00
2022-06-10 16:40:17 +08:00
2022-02-11 20:22:01 +11:00
2021-09-24 16:03:05 +08:00
2021-12-11 16:48:06 +11:00
2021-12-31 18:10:54 +11:00
2021-12-11 16:48:06 +11:00
2022-10-10 17:53:04 -07:00
2021-11-26 16:25:17 +11:00
2021-04-02 18:28:13 +11:00
2021-05-28 15:11:44 +08:00
2022-08-02 17:14:47 -06:00
2022-02-18 16:21:08 +11:00
2019-07-08 20:57:08 -07:00
2019-07-08 20:57:08 -07:00
2019-07-08 20:57:08 -07:00
2019-07-08 20:57:08 -07:00
2022-09-24 16:14:44 +08:00
2019-06-13 14:31:39 +08:00
2020-02-28 08:43:21 +08:00
2021-02-10 17:55:55 +11:00
2020-01-16 15:18:12 +08:00
2021-01-03 08:41:35 +11:00
2021-01-03 08:41:35 +11:00
2021-10-29 21:04:04 +08:00
2020-01-16 15:18:12 +08:00
2022-06-10 16:40:17 +08:00
2020-09-25 17:48:15 +10:00
2021-01-29 16:07:04 +11:00
2019-07-08 20:57:08 -07:00
2021-04-02 18:28:12 +11:00
2019-05-30 11:26:32 -07:00
2022-01-31 11:21:44 +11:00
2022-09-24 16:14:43 +08:00
2016-07-05 23:05:26 +08:00
2015-10-14 22:23:16 +08:00
2019-05-30 11:26:32 -07:00
2019-12-20 14:58:35 +08:00
2020-12-04 18:13:16 +11:00
2020-08-07 11:33:22 -07:00
2021-03-07 15:13:15 +11:00
2020-11-20 14:45:33 +11:00
2020-07-23 17:34:20 +10:00
2021-12-31 18:10:54 +11:00
2021-08-27 16:30:19 +08:00
2022-08-02 17:14:47 -06:00
2020-07-16 21:49:08 +10:00
2021-08-21 15:44:58 +08:00
2022-09-24 16:14:43 +08:00
2020-09-25 17:48:54 +10:00
2022-01-28 16:51:11 +11:00
2022-04-08 16:11:48 +08:00
2021-07-30 10:58:30 +08:00
2022-04-08 16:12:46 +08:00
2019-08-15 21:52:14 +10:00
2022-09-24 16:14:44 +08:00
2020-08-21 14:45:27 +10:00
2019-07-08 20:57:08 -07:00
2022-10-11 17:42:58 -06:00
2022-07-22 16:22:04 +08:00
2022-07-22 16:22:04 +08:00
2021-02-10 17:55:57 +11:00
2021-01-03 08:41:35 +11:00
2021-08-12 19:32:17 +08:00
2021-01-03 08:41:35 +11:00
2022-06-10 16:40:16 +08:00
2021-02-21 17:23:56 -08:00
2022-02-18 16:21:08 +11:00
2020-01-09 11:30:53 +08:00
2021-11-08 16:55:21 -08:00