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;