Files
linux/include/linux
Jakub Kicinski 444da3f524 bitfield.h: don't compile-time validate _val in FIELD_FIT
When ur_load_imm_any() is inlined into jeq_imm(), it's possible for the
compiler to deduce a case where _val can only have the value of -1 at
compile time. Specifically,

/* struct bpf_insn: _s32 imm */
u64 imm = insn->imm; /* sign extend */
if (imm >> 32) { /* non-zero only if insn->imm is negative */
  /* inlined from ur_load_imm_any */
  u32 __imm = imm >> 32; /* therefore, always 0xffffffff */
  if (__builtin_constant_p(__imm) && __imm > 255)
    compiletime_assert_XXX()

This can result in tripping a BUILD_BUG_ON() in __BF_FIELD_CHECK() that
checks that a given value is representable in one byte (interpreted as
unsigned).

FIELD_FIT() should return true or false at runtime for whether a value
can fit for not. Don't break the build over a value that's too large for
the mask. We'd prefer to keep the inlining and compiler optimizations
though we know this case will always return false.

Cc: stable@vger.kernel.org
Fixes: 1697599ee3 ("bitfield.h: add FIELD_FIT() helper")
Link: https://lore.kernel.org/kernel-hardening/CAK7LNASvb0UDJ0U5wkYYRzTAdnEs64HjXpEUL7d=V0CXiAXcNw@mail.gmail.com/
Reported-by: Masahiro Yamada <masahiroy@kernel.org>
Debugged-by: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-08-10 12:16:51 -07:00
..
2020-08-03 18:19:23 -07:00
2019-12-11 09:12:38 +01:00
2019-11-12 11:43:29 -05:00
2020-06-25 22:25:13 -07:00
2020-06-16 14:19:57 +02:00
2020-07-27 14:55:22 +01:00
2020-05-24 20:48:11 +02:00
2020-07-21 08:24:52 -05:00
2020-07-08 10:48:35 -07:00
2020-07-21 13:26:26 -07:00
2020-05-19 09:40:29 -06:00
2020-04-10 15:36:21 -07:00
2020-05-13 08:44:35 -07:00
2019-10-09 19:33:43 -07:00
2020-03-09 11:12:19 +01:00
2019-12-03 11:20:37 +01:00
2020-06-16 19:25:20 +02:00
2020-05-04 11:19:58 -07:00
2020-01-18 09:19:18 -05:00
2020-06-17 00:07:38 +02:00
2020-03-06 11:06:15 +01:00
2020-05-28 07:59:45 -07:00
2020-07-24 17:12:41 -07:00
2020-04-30 12:54:01 -07:00
2019-10-15 13:34:25 +02:00
2020-07-24 17:12:41 -07:00
2020-05-18 10:30:21 +01:00
2019-12-04 19:44:14 -08:00
2020-06-26 10:01:08 -06:00
2020-06-02 15:15:46 +01:00
2019-12-11 09:12:38 +01:00
2020-07-02 15:51:48 +02:00
2020-05-08 18:18:11 +01:00
2020-05-08 00:12:42 +02:00
2020-05-28 10:31:09 +02:00
2020-03-06 11:56:59 +01:00
2020-04-07 10:43:38 -07:00
2019-12-09 10:55:03 +01:00
2020-07-31 18:08:59 +10:00
2020-03-21 16:00:24 +01:00
2019-11-14 19:06:47 -08:00
2020-07-24 15:41:54 -07:00
2020-01-15 10:54:33 -05:00
2020-05-09 13:57:12 +02:00
2020-07-01 10:49:02 +02:00
2020-07-23 17:34:18 +10:00
2020-04-02 09:35:27 -07:00
2020-05-15 13:51:28 -07:00
2020-05-09 13:57:12 +02:00
2020-07-16 23:19:51 +02:00
2020-02-21 10:31:18 +01:00
2020-05-17 14:10:07 -06:00
2020-05-14 16:44:24 +02:00
2020-05-04 09:16:37 -07:00
2020-05-29 14:52:53 +02:00
2020-07-04 09:35:36 -05:00
2020-01-14 12:20:48 +01:00
2020-07-07 11:58:59 -05:00
2020-04-01 12:06:26 -04:00
2020-04-17 06:05:30 -04:00
2020-06-26 00:27:38 -07:00
2019-11-14 12:20:02 +08:00