Module Name: src Committed By: mrg Date: Tue Aug 8 06:31:18 UTC 2023
Modified Files: src/lib/libm/src: k_rem_pio2.c k_rem_pio2f.c Log Message: avoid uninitialised variable accesses. if __kernel_rem_pio2() or __kernel_rem_pio2f() are called with "nx" less than 2, the local variable fq[0] may be accessed uninitialised. __kernel_rem_pio2() has direct calls with nx = 1, and __kernel_rem_pio2f() is called with a value starting at 3, but may be decreased to less than 2, implied by this code , if not actually avoided by the tx[] setup above: nx = 3; while(tx[nx-1]==zero) nx--; /* skip zero term */ n = __kernel_rem_pio2f(tx,y,e0,nx,2,two_over_pi); found by GCC 12. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/lib/libm/src/k_rem_pio2.c cvs rdiff -u -r1.9 -r1.10 src/lib/libm/src/k_rem_pio2f.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libm/src/k_rem_pio2.c diff -u src/lib/libm/src/k_rem_pio2.c:1.14 src/lib/libm/src/k_rem_pio2.c:1.15 --- src/lib/libm/src/k_rem_pio2.c:1.14 Wed Aug 24 13:51:19 2022 +++ src/lib/libm/src/k_rem_pio2.c Tue Aug 8 06:31:17 2023 @@ -16,7 +16,7 @@ __FBSDID("$FreeBSD: head/lib/msun/src/k_rem_pio2.c 342651 2018-12-31 15:43:06Z pfg $"); #endif #if defined(LIBM_SCCS) && !defined(lint) -__RCSID("$NetBSD: k_rem_pio2.c,v 1.14 2022/08/24 13:51:19 christos Exp $"); +__RCSID("$NetBSD: k_rem_pio2.c,v 1.15 2023/08/08 06:31:17 mrg Exp $"); #endif /* @@ -302,6 +302,11 @@ __kernel_rem_pio2(double *x, double *y, int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih; double z,fw,f[20],fq[20],q[20]; + /* if nx < 2, fq[0] may be accessed uninitialised */ + if (nx < 2) { + fq[0] = 0; + } + /* initialize jk*/ jk = init_jk[prec]; jp = jk; Index: src/lib/libm/src/k_rem_pio2f.c diff -u src/lib/libm/src/k_rem_pio2f.c:1.9 src/lib/libm/src/k_rem_pio2f.c:1.10 --- src/lib/libm/src/k_rem_pio2f.c:1.9 Thu Jun 22 12:43:43 2017 +++ src/lib/libm/src/k_rem_pio2f.c Tue Aug 8 06:31:17 2023 @@ -15,7 +15,7 @@ #include <sys/cdefs.h> #if defined(LIBM_SCCS) && !defined(lint) -__RCSID("$NetBSD: k_rem_pio2f.c,v 1.9 2017/06/22 12:43:43 maya Exp $"); +__RCSID("$NetBSD: k_rem_pio2f.c,v 1.10 2023/08/08 06:31:17 mrg Exp $"); #endif #include "namespace.h" @@ -53,6 +53,11 @@ __kernel_rem_pio2f(float *x, float *y, i int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih; float z,fw,f[20],fq[20],q[20]; + /* if nx < 2, fq[0] may be accessed uninitialised */ + if (nx < 2) { + fq[0] = 0; + } + /* initialize jk*/ jk = init_jk[prec]; jp = jk;