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>
This commit is contained in:
Josh Law 2026-03-06 16:16:47 +00:00 committed by Andrew Morton
parent bc6cc36855
commit 84f24da354

View File

@ -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;