From: Tavian Barnes Date: Fri, 21 Jun 2024 20:38:44 +0000 (-0400) Subject: bcachefs: mean_and_variance: Avoid too-large shift amounts X-Git-Tag: v6.11-rc1~81^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73f88592dd1bef38542024ef8223599afc2c41bb;p=thirdparty%2Fkernel%2Flinux.git bcachefs: mean_and_variance: Avoid too-large shift amounts Shifting a value by the width of its type or more is undefined. Signed-off-by: Tavian Barnes Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/mean_and_variance.h b/fs/bcachefs/mean_and_variance.h index 4fcf062dd22c7..47e4a3c3d26e7 100644 --- a/fs/bcachefs/mean_and_variance.h +++ b/fs/bcachefs/mean_and_variance.h @@ -111,11 +111,11 @@ static inline u128_u u128_shl(u128_u i, s8 shift) { u128_u r; - r.lo = i.lo << shift; + r.lo = i.lo << (shift & 63); if (shift < 64) - r.hi = (i.hi << shift) | (i.lo >> (64 - shift)); + r.hi = (i.hi << (shift & 63)) | (i.lo >> (-shift & 63)); else { - r.hi = i.lo << (shift - 64); + r.hi = i.lo << (-shift & 63); r.lo = 0; } return r;