Control: tags 1131147 + patch
Control: tags 1131147 + pending
Control: tags 1134493 + patch
Control: tags 1134493 + pending

Dear maintainer,

I've prepared an NMU for kissfft (versioned as 131.1.0-4.1) and uploaded 
it to DELAYED/1. Please feel free to tell me if I should cancel it.

cu
Adrian
diffstat for kissfft-131.1.0 kissfft-131.1.0

 changelog                                                               |   10 +
 patches/0001-check-for-overflow-on-32-bit-platform-closes-120.patch     |   36 ++++
 patches/0002-kiss_fftndr_alloc-check-for-overflow-and-_perhaps_-l.patch |   82 ++++++++++
 patches/series                                                          |    2 
 4 files changed, 130 insertions(+)

diff -Nru kissfft-131.1.0/debian/changelog kissfft-131.1.0/debian/changelog
--- kissfft-131.1.0/debian/changelog	2025-09-26 00:32:11.000000000 +0300
+++ kissfft-131.1.0/debian/changelog	2026-05-07 14:02:10.000000000 +0300
@@ -1,3 +1,13 @@
+kissfft (131.1.0-4.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * CVE-2025-34297: Integer Overflow on 32-bit Systems
+    (Closes: #1131147)
+  * CVE-2026-41445: Integer Overflow in kiss_fftndr_alloc()
+    (Closes: #1134493)
+
+ -- Adrian Bunk <[email protected]>  Thu, 07 May 2026 14:02:10 +0300
+
 kissfft (131.1.0-4) unstable; urgency=medium
 
   * Team upload.
diff -Nru kissfft-131.1.0/debian/patches/0001-check-for-overflow-on-32-bit-platform-closes-120.patch kissfft-131.1.0/debian/patches/0001-check-for-overflow-on-32-bit-platform-closes-120.patch
--- kissfft-131.1.0/debian/patches/0001-check-for-overflow-on-32-bit-platform-closes-120.patch	1970-01-01 02:00:00.000000000 +0200
+++ kissfft-131.1.0/debian/patches/0001-check-for-overflow-on-32-bit-platform-closes-120.patch	2026-05-07 14:01:40.000000000 +0300
@@ -0,0 +1,36 @@
+From 9a13b3b7f8568ebdad4508447708ce6f509667ee Mon Sep 17 00:00:00 2001
+From: Mark Borgerding <[email protected]>
+Date: Wed, 26 Nov 2025 10:39:17 -0500
+Subject: check for overflow on 32 bit platform (closes #120)
+
+---
+ kiss_fft.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/kiss_fft.c b/kiss_fft.c
+index 58c24a0..aba63e0 100644
+--- a/kiss_fft.c
++++ b/kiss_fft.c
+@@ -6,7 +6,7 @@
+  *  See COPYING file for more information.
+  */
+ 
+-
++#include <stdint.h>
+ #include "_kiss_fft_guts.h"
+ /* The guts header contains all the multiplication and addition macros that are defined for
+  fixed or floating point complex numbers.  It also delares the kf_ internal functions.
+@@ -339,6 +339,10 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem
+     KISS_FFT_ALIGN_CHECK(mem)
+ 
+     kiss_fft_cfg st=NULL;
++    // check for overflow condition {memneeded > SIZE_MAX}.
++    if (nfft >= (SIZE_MAX - 2*sizeof(struct kiss_fft_state))/sizeof(kiss_fft_cpx))
++        return NULL;
++
+     size_t memneeded = KISS_FFT_ALIGN_SIZE_UP(sizeof(struct kiss_fft_state)
+         + sizeof(kiss_fft_cpx)*(nfft-1)); /* twiddle factors*/
+ 
+-- 
+2.47.3
+
diff -Nru kissfft-131.1.0/debian/patches/0002-kiss_fftndr_alloc-check-for-overflow-and-_perhaps_-l.patch kissfft-131.1.0/debian/patches/0002-kiss_fftndr_alloc-check-for-overflow-and-_perhaps_-l.patch
--- kissfft-131.1.0/debian/patches/0002-kiss_fftndr_alloc-check-for-overflow-and-_perhaps_-l.patch	1970-01-01 02:00:00.000000000 +0200
+++ kissfft-131.1.0/debian/patches/0002-kiss_fftndr_alloc-check-for-overflow-and-_perhaps_-l.patch	2026-05-07 14:01:40.000000000 +0300
@@ -0,0 +1,82 @@
+From 566bef407b555cc2a6a9b492f01676c8167b317e Mon Sep 17 00:00:00 2001
+From: Mark Borgerding <[email protected]>
+Date: Sat, 31 Jan 2026 16:06:10 -0500
+Subject: kiss_fftndr_alloc: check for overflow (and _perhaps_ let combined
+ dims > INT_MAX)
+
+---
+ kiss_fftndr.c | 28 ++++++++++++++++++++--------
+ 1 file changed, 20 insertions(+), 8 deletions(-)
+
+diff --git a/kiss_fftndr.c b/kiss_fftndr.c
+index e979d03..c1cd27b 100644
+--- a/kiss_fftndr.c
++++ b/kiss_fftndr.c
+@@ -13,15 +13,15 @@
+ struct kiss_fftndr_state
+ {
+     int dimReal;
+-    int dimOther;
++    size_t dimOther;
+     kiss_fftr_cfg cfg_r;
+     kiss_fftnd_cfg cfg_nd;
+     void * tmpbuf;
+ };
+ 
+-static int prod(const int *dims, int ndims)
++static size_t prod(const int *dims, int ndims)
+ {
+-    int x=1;
++    size_t x=1;
+     while (ndims--) 
+         x *= *dims++;
+     return x;
+@@ -34,18 +34,30 @@ kiss_fftndr_cfg kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void
+     kiss_fftndr_cfg st = NULL;
+     size_t nr=0 , nd=0,ntmp=0;
+     int dimReal = dims[ndims-1];
+-    int dimOther = prod(dims,ndims-1);
++    size_t dimOther = prod(dims,ndims-1);
+     size_t memneeded;
+     char * ptr = NULL;
++    int k,check;
+ 
+     (void)kiss_fftr_alloc(dimReal,inverse_fft,NULL,&nr);
+     (void)kiss_fftnd_alloc(dims,ndims-1,inverse_fft,NULL,&nd);
+     ntmp =
+         MAX( 2*dimOther , dimReal+2) * sizeof(kiss_fft_scalar)  // freq buffer for one pass
+-        + dimOther*(dimReal+2) * sizeof(kiss_fft_scalar);  // large enough to hold entire input in case of in-place
++        + dimOther*(size_t)(dimReal+2) * sizeof(kiss_fft_scalar);  // large enough to hold entire input in case of in-place
+ 
+     memneeded = KISS_FFT_ALIGN_SIZE_UP(sizeof( struct kiss_fftndr_state )) + KISS_FFT_ALIGN_SIZE_UP(nr) + KISS_FFT_ALIGN_SIZE_UP(nd) + KISS_FFT_ALIGN_SIZE_UP(ntmp);
+ 
++    /* check for overflow */
++    check = memneeded;
++    for (k=0;k<ndims;++k) {
++        check /= dims[k];
++        if (check <= sizeof(kiss_fft_scalar)) {
++            if (lenmem!=NULL)
++                *lenmem = (size_t)(-1);
++            return NULL;
++        }
++    }
++
+     if (lenmem==NULL) {
+         ptr = (char*) malloc(memneeded);
+     }else{
+@@ -73,9 +85,9 @@ kiss_fftndr_cfg kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void
+ 
+ void kiss_fftndr(kiss_fftndr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata)
+ {
+-    int k1,k2;
+-    int dimReal = st->dimReal;
+-    int dimOther = st->dimOther;
++    size_t k1,k2;
++    size_t dimReal = (size_t)st->dimReal;
++    size_t dimOther = st->dimOther;
+     int nrbins = dimReal/2+1;
+ 
+     kiss_fft_cpx * tmp1 = (kiss_fft_cpx*)st->tmpbuf; 
+-- 
+2.47.3
+
diff -Nru kissfft-131.1.0/debian/patches/series kissfft-131.1.0/debian/patches/series
--- kissfft-131.1.0/debian/patches/series	2025-09-26 00:32:11.000000000 +0300
+++ kissfft-131.1.0/debian/patches/series	2026-05-07 14:02:07.000000000 +0300
@@ -3,3 +3,5 @@
 0003-PR70.patch
 0004-libm.diff
 cmake_4.patch
+0001-check-for-overflow-on-32-bit-platform-closes-120.patch
+0002-kiss_fftndr_alloc-check-for-overflow-and-_perhaps_-l.patch

Reply via email to