x86+Arm32: make find_next_{,zero_}bit() have well defined behavior
authorJan Beulich <jbeulich@suse.com>
Wed, 11 Dec 2019 14:20:10 +0000 (15:20 +0100)
committerJan Beulich <jbeulich@suse.com>
Wed, 11 Dec 2019 14:20:10 +0000 (15:20 +0100)
commitb8a8278277ea2698c5459615837f4b23935ef96b
tree0fe101c3c11da41f6f274bcdba004ad6f48e34a3
parent06555fdec41522b7710e6047d0fe001830d55e7e
x86+Arm32: make find_next_{,zero_}bit() have well defined behavior

These functions getting used with the 2nd and 3rd arguments being equal
wasn't well defined: Arm64 reliably returns the value of the 2nd
argument in this case, while on x86 for bitmaps up to 64 bits wide the
return value was undefined (due to the undefined behavior of a shift of
a value by the number of bits it's wide) when the incoming value was 64.
On Arm32 an actual out of bounds access would happen when the
size/offset value is a multiple of 32; if this access doesn't fault, the
return value would have been sufficiently correct afaict.

Make the functions consistently tolerate the last two arguments being
equal (and in fact the 3rd argument being greater or equal to the 2nd),
in favor of finding and fixing all the use sites that violate the
original more strict assumption.

This is XSA-307.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Julien Grall <julien@xen.org>
master commit: 7442006b9f0940fb36f1f8470a416ec836e0d2ce
master date: 2019-12-11 14:06:18 +0100
xen/arch/arm/arm32/lib/findbit.S
xen/include/asm-x86/bitops.h