]> git.baikalelectronics.ru Git - kernel.git/commit
lib/bitmap: fix off-by-one in bitmap_to_arr64()
authorAlexander Lobakin <alexandr.lobakin@intel.com>
Mon, 11 Jul 2022 18:09:29 +0000 (20:09 +0200)
committerYury Norov <yury.norov@gmail.com>
Tue, 12 Jul 2022 15:00:50 +0000 (08:00 -0700)
commitdd7cbca1f89109b0b64a3f44b5f991d0ee50f920
tree97d3d4a3edbdce777501739e5da830efd461957c
parentd923d29536f678916d3328c71f0fdec3588c8b5e
lib/bitmap: fix off-by-one in bitmap_to_arr64()

GENMASK*() family takes the first and the last bits of the mask
*including* them. So, with the current code bitmap_to_arr64()
doesn't clear the tail properly:

nbits %  exp             mask                must be
1        GENMASK(1, 0)   0x3                 0x1
...
63       GENMASK(63, 0)  0xffffffffffffffff  0x7fffffffffffffff

This was found by making the function always available instead of
32-bit BE systems only (for reusing in some new functionality).
Turn the number of bits into the last bit set by subtracting 1.
@nbits is already checked to be positive beforehand.

Fixes: a1a19b185fa0 ("lib: add bitmap_{from,to}_arr64")
Signed-off-by: Alexander Lobakin <alexandr.lobakin@intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Yury Norov <yury.norov@gmail.com>
lib/bitmap.c