aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2025-04-25 17:54:29 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2025-04-29 15:20:28 -0300
commit84977600dace5a7cfcb0918e6757939fd4969839 (patch)
tree37e7e1ceb39631dc131f87bb6e00ff1f0eed7a29 /sysdeps
parent7a0d7fb25c22cc7237315792b0f340ec49e3783f (diff)
downloadglibc-master.zip
glibc-master.tar.gz
glibc-master.tar.bz2
math: Fix UB on sinpif (BZ 32925)HEADmaster
The left shift overflows for 'int', use uint32_t instead. It syncs with CORE-MATH commit bbfabd99. Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/ieee754/flt-32/s_sinpif.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sysdeps/ieee754/flt-32/s_sinpif.c b/sysdeps/ieee754/flt-32/s_sinpif.c
index 99a8bbb..c0d15e7 100644
--- a/sysdeps/ieee754/flt-32/s_sinpif.c
+++ b/sysdeps/ieee754/flt-32/s_sinpif.c
@@ -3,7 +3,7 @@
Copyright (c) 2022-2025 Alexei Sibidanov.
The original version of this file was copied from the CORE-MATH
-project (src/binary32/sinpi/sinpif.c, revision f786e13).
+project (src/binary32/sinpi/sinpif.c, revision bbfabd99.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -51,7 +51,7 @@ __sinpif (float x)
{
if (__glibc_unlikely (s < -6))
return copysignf (0.0f, x);
- int32_t iq = m << (-s - 1);
+ int32_t iq = (uint32_t)m << (-s - 1);
iq &= 127;
if (iq == 0 || iq == 64)
return copysignf (0.0f, x);
@@ -63,10 +63,10 @@ __sinpif (float x)
return z * (0x1.921fb54442d18p+1 + z2 * (-0x1.4abbce625be53p+2));
}
int32_t si = 25 - s;
- if (__glibc_unlikely (si >= 0 && (m << si) == 0))
+ if (__glibc_unlikely (si >= 0 && ((uint32_t)m << si) == 0))
return copysignf (0.0f, x);
- int32_t k = m << (31 - s);
+ int32_t k = (uint32_t)m << (31 - s);
double z = k, z2 = z * z;
double fs = SN[0] + z2 * (SN[1] + z2 * SN[2]);
double fc = CN[0] + z2 * (CN[1] + z2 * CN[2]);