mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-26 12:26:11 +00:00
overflow: Allow non-type arg to type_max() and type_min()
[ Upstream commit bd1ebf2467
]
A common use of type_max() is to find the max for the type of a
variable. Using the pattern type_max(typeof(var)) is needlessly
verbose. Instead, since typeof(type) == type we can just explicitly
call typeof() on the argument to type_max() and type_min(). Add
wrappers for readability.
We can do some replacements right away:
$ git grep '\btype_\(min\|max\)(typeof' | wc -l
11
Link: https://lore.kernel.org/r/20240301062221.work.840-kees@kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
3ba4aceb68
commit
2618ab102c
1 changed files with 7 additions and 5 deletions
|
@ -31,8 +31,10 @@
|
|||
* credit to Christian Biere.
|
||||
*/
|
||||
#define __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type)))
|
||||
#define type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T)))
|
||||
#define type_min(T) ((T)((T)-type_max(T)-(T)1))
|
||||
#define __type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T)))
|
||||
#define type_max(t) __type_max(typeof(t))
|
||||
#define __type_min(T) ((T)((T)-type_max(T)-(T)1))
|
||||
#define type_min(t) __type_min(typeof(t))
|
||||
|
||||
/*
|
||||
* Avoids triggering -Wtype-limits compilation warning,
|
||||
|
@ -130,10 +132,10 @@ static inline bool __must_check __must_check_overflow(bool overflow)
|
|||
|
||||
#define __overflows_type_constexpr(x, T) ( \
|
||||
is_unsigned_type(typeof(x)) ? \
|
||||
(x) > type_max(typeof(T)) : \
|
||||
(x) > type_max(T) : \
|
||||
is_unsigned_type(typeof(T)) ? \
|
||||
(x) < 0 || (x) > type_max(typeof(T)) : \
|
||||
(x) < type_min(typeof(T)) || (x) > type_max(typeof(T)))
|
||||
(x) < 0 || (x) > type_max(T) : \
|
||||
(x) < type_min(T) || (x) > type_max(T))
|
||||
|
||||
#define __overflows_type(x, T) ({ \
|
||||
typeof(T) v = 0; \
|
||||
|
|
Loading…
Reference in a new issue