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;

Reply via email to