summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Law <objecting@objecting.org>2026-03-06 19:16:47 +0300
committerAndrew Morton <akpm@linux-foundation.org>2026-03-28 07:19:41 +0300
commit84f24da3544abb7b6db102191bf7f98230a3af30 (patch)
tree64e95e4db1c51fc8232e02e9c29f23268a158ef7
parentbc6cc36855e9ebcf0c7e01f980ad67bcb0e50bdb (diff)
downloadlinux-84f24da3544abb7b6db102191bf7f98230a3af30.tar.xz
lib/inflate: fix memory leak in inflate_dynamic() on inflate_codes() failure
When inflate_codes() fails in inflate_dynamic(), the code jumps to the 'out' label which only frees 'll', leaking the Huffman tables 'tl' and 'td'. Restructure the code so that the decoding tables are always freed before reaching the 'out' label. Link: https://lkml.kernel.org/r/20260306161647.2811874-1-objecting@objecting.org Signed-off-by: Josh Law <objecting@objecting.org> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--lib/inflate.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/inflate.c b/lib/inflate.c
index 5b1e70d0ce8c..ae704e4f64ec 100644
--- a/lib/inflate.c
+++ b/lib/inflate.c
@@ -1009,10 +1009,10 @@ DEBG("dyn5d ");
DEBG("dyn6 ");
/* decompress until an end-of-block code */
- if (inflate_codes(tl, td, bl, bd)) {
+ if (inflate_codes(tl, td, bl, bd))
ret = 1;
- goto out;
- }
+ else
+ ret = 0;
DEBG("dyn7 ");
@@ -1021,7 +1021,6 @@ DEBG("dyn7 ");
huft_free(td);
DEBG(">");
- ret = 0;
out:
free(ll);
return ret;