• Jason A. Donenfeld's avatar
    random: add helpers for random numbers with given floor or range · 7f576b25
    Jason A. Donenfeld authored
    Now that we have get_random_u32_below(), it's nearly trivial to make
    inline helpers to compute get_random_u32_above() and
    get_random_u32_inclusive(), which will help clean up open coded loops
    and manual computations throughout the tree.
    
    One snag is that in order to make get_random_u32_inclusive() operate on
    closed intervals, we have to do some (unlikely) special case handling if
    get_random_u32_inclusive(0, U32_MAX) is called. The least expensive way
    of doing this is actually to adjust the slowpath of
    get_random_u32_below() to have its undefined 0 result just return the
    output of get_random_u32(). We can make this basically free by calling
    get_random_u32() before the branch, so that the branch latency gets
    interleaved.
    
    Cc: stable@vger.kernel.org # to ease future backports that use this api
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    7f576b25
random.c 49.4 KB