[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20251211171950.852001-1-devsec@tpz.ru>
Date: Thu, 11 Dec 2025 17:19:49 +0000
From: Ilya Krutskih <devsec@....ru>
To: Nick Terrell <terrelln@...com>
CC: Ilya Krutskih <devsec@....ru>, David Sterba <dsterba@...e.com>,
<linux-kernel@...r.kernel.org>, <lvc-project@...uxtesting.org>,
<stable@...r.kernel.org>
Subject: [PATCH v3] zstd: fixed possible 'rtbTable' underflow in FSE_normalizeCount()
'rtbTable' may be underflowed because 'proba' is used without
checking for a non-negative as index of rtbTable[].
Add check: proba >= 0
Cc: stable@...r.kernel.org # v5.10+
Fixes: e0c1b49f5b67 ("lib: zstd: Upgrade to latest upstream zstd version 1.4.10")
Signed-off-by: Ilya Krutskih <devsec@....ru>
---
lib/zstd/compress/fse_compress.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/lib/zstd/compress/fse_compress.c b/lib/zstd/compress/fse_compress.c
index 44a3c10becf2..6b83f8bc943a 100644
--- a/lib/zstd/compress/fse_compress.c
+++ b/lib/zstd/compress/fse_compress.c
@@ -492,9 +492,10 @@ size_t FSE_normalizeCount (short* normalizedCounter, unsigned tableLog,
stillToDistribute--;
} else {
short proba = (short)((count[s]*step) >> scale);
- if (proba<8) {
- U64 restToBeat = vStep * rtbTable[proba];
- proba += (count[s]*step) - ((U64)proba<<scale) > restToBeat;
+ if ((proba >= 0) && (proba < 8)) {
+ U64 restToBeat = vStep * rtbTable[proba];
+
+ proba += (count[s]*step) - ((U64)proba<<scale) > restToBeat;
}
if (proba > largestP) { largestP=proba; largest=s; }
normalizedCounter[s] = proba;
--
2.43.0
Powered by blists - more mailing lists