lkml.org 
[lkml]   [2024]   [Mar]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 6.8 74/98] overflow: Allow non-type arg to type_max() and type_min()
    Date
    From: Kees Cook <keescook@chromium.org>

    [ Upstream commit bd1ebf2467f9c5d157bec7b025e83f8ffdae1318 ]

    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>
    ---
    include/linux/overflow.h | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/include/linux/overflow.h b/include/linux/overflow.h
    index 7b5cf4a5cd191..51af56522915e 100644
    --- a/include/linux/overflow.h
    +++ b/include/linux/overflow.h
    @@ -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; \
    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 16:15    [W:4.001 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site