[PATCH 3/8] math: Fix UB on logf
Carlos O'Donell
carlos@redhat.com
Tue Apr 29 12:29:40 GMT 2025
On 4/25/25 4:54 PM, Adhemerval Zanella wrote:
> The left shift overflows for 'int', use a literal instead. It syncs
> with OPTIMIZED-ROUTINES commit 0f87f607b976820ef41fe64d004fe67dc7af8236.
>
> Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu.
LGTM.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> ---
> sysdeps/ieee754/flt-32/e_logf.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sysdeps/ieee754/flt-32/e_logf.c b/sysdeps/ieee754/flt-32/e_logf.c
> index 6a595cf7f0..207151c76a 100644
> --- a/sysdeps/ieee754/flt-32/e_logf.c
> +++ b/sysdeps/ieee754/flt-32/e_logf.c
> @@ -70,7 +70,7 @@ __logf (float x)
> tmp = ix - OFF;
> i = (tmp >> (23 - LOGF_TABLE_BITS)) % N;
> k = (int32_t) tmp >> 23; /* arithmetic shift */
> - iz = ix - (tmp & 0x1ff << 23);
> + iz = ix - (tmp & 0xff800000);
> invc = T[i].invc;
> logc = T[i].logc;
> z = (double_t) asfloat (iz);
OK, confirmed from git@github.com:ARM-software/optimized-routines.git
commit 0f87f607b976820ef41fe64d004fe67dc7af8236
Author: Joe Ramsay <Joe.Ramsay@arm.com>
Date: Thu Jan 5 11:56:20 2023 +0000
Rewrite two abs masks as literals
These were technically undefined behaviour - they have been rewritten
without the shift so that their type is unsigned int by default.
--
Cheers,
Carlos.
More information about the Libc-alpha
mailing list