From: Adhemerval Zanella Date: Mon, 21 Apr 2025 18:12:21 +0000 (-0300) Subject: math: Fix UB in setayload X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=beb6d2de65281e86cc643d796f98a9b6045765e3;p=thirdparty%2Fglibc.git math: Fix UB in setayload The code can shift the 1ULL for value larger than 63 depending of the exponent value. Add a check prior the shift. --- diff --git a/sysdeps/ieee754/dbl-64/s_setpayload_main.c b/sysdeps/ieee754/dbl-64/s_setpayload_main.c index 779371837c..2c6c946ae7 100644 --- a/sysdeps/ieee754/dbl-64/s_setpayload_main.c +++ b/sysdeps/ieee754/dbl-64/s_setpayload_main.c @@ -37,7 +37,9 @@ FUNC (double *x, double payload) except for 0 when allowed; (c) not an integer. */ if (exponent >= BIAS + PAYLOAD_DIG || (exponent < BIAS && !(SET_HIGH_BIT && ix == 0)) - || (ix & ((1ULL << (BIAS + EXPLICIT_MANT_DIG - exponent)) - 1)) != 0) + || ((BIAS + EXPLICIT_MANT_DIG - exponent) < 64 + && (ix & ((1ULL << (BIAS + EXPLICIT_MANT_DIG - exponent)) - 1)) + != 0)) { INSERT_WORDS64 (*x, 0); return 1;