[PATCH 6/8] math: Fix UB on cospif
Adhemerval Zanella
adhemerval.zanella@linaro.org
Fri Apr 25 20:54:27 GMT 2025
The left shift overflows for 'int', use uint32_t instead. It syncs
with CORE-MATH commit bbfabd993a71b049c210b0febfd06d18369fadc1.
Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu.
---
sysdeps/ieee754/flt-32/s_cospif.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sysdeps/ieee754/flt-32/s_cospif.c b/sysdeps/ieee754/flt-32/s_cospif.c
index 1e838037e1..eb4a10f57f 100644
--- a/sysdeps/ieee754/flt-32/s_cospif.c
+++ b/sysdeps/ieee754/flt-32/s_cospif.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/cospi/cospif.c, revision f786e13).
+project (src/binary32/cospi/cospif.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
@@ -58,10 +58,10 @@ __cospif (float x)
{
if (__glibc_unlikely (p > 63))
return 1.0f;
- int32_t iq = m << (p - 32);
+ int32_t iq = (uint32_t)m << (p - 32);
return S[(iq + 32) & 127];
}
- int32_t k = m << p;
+ int32_t k = (uint32_t)m << p;
if (__glibc_unlikely (k == 0))
{
int32_t iq = m >> (32 - p);
--
2.43.0
More information about the Libc-alpha
mailing list