From cc01bd72a1ce1170d15e2b6edd888781ffee8596 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 23 Apr 2014 15:07:55 +0200 Subject: [PATCH] only use legitimate shift counts in bitmap shifting For rem being zero (where rem is the remainder of a division by BITS_PER_LONG), shifts by "BITS_PER_LONG - rem" degenerate to undefined constructs. An alternative would be to remove these implicitly unused functions. Coverity ID 1192174 (__bitmap_shift_right) Coverity ID 1192175 (__bitmap_shift_left) Signed-off-by: Jan Beulich Acked-by: Ian Campbell --- xen/common/bitmap.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xen/common/bitmap.c b/xen/common/bitmap.c index 67dfd001e6..61d1ea4eae 100644 --- a/xen/common/bitmap.c +++ b/xen/common/bitmap.c @@ -144,7 +144,9 @@ void __bitmap_shift_right(unsigned long *dst, lower = src[off + k]; if (left && off + k == lim - 1) lower &= mask; - dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem; + dst[k] = rem + ? (upper << (BITS_PER_LONG - rem)) | (lower >> rem) + : lower; if (left && k == lim - 1) dst[k] &= mask; } @@ -185,7 +187,9 @@ void __bitmap_shift_left(unsigned long *dst, upper = src[k]; if (left && k == lim - 1) upper &= (1UL << left) - 1; - dst[k + off] = lower >> (BITS_PER_LONG - rem) | upper << rem; + dst[k + off] = rem ? (lower >> (BITS_PER_LONG - rem)) + | (upper << rem) + : upper; if (left && k + off == lim - 1) dst[k + off] &= (1UL << left) - 1; } -- 2.39.5