erofs: fix memory leak of LZMA global compressed deduplication

JIRA: https://issues.redhat.com/browse/RHEL-31991
Upstream status: Linus

commit 75a5221630fe5aa3fedba7a06be618db0f79ba1e
Author: Gao Xiang <xiang@kernel.org>
Date:   Thu Sep 7 13:05:42 2023 +0800

    erofs: fix memory leak of LZMA global compressed deduplication

    When stressing microLZMA EROFS images with the new global compressed
    deduplication feature enabled (`-Ededupe`), I found some short-lived
    temporary pages weren't properly released, which could slowly cause
    unexpected OOMs hours later.

    Let's fix it now (LZ4 and DEFLATE don't have this issue.)

    Fixes: 5c2a64252c5d ("erofs: introduce partial-referenced pclusters")
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20230907050542.97152-1-hsiangkao@linux.alibaba.com

Signed-off-by: Ian Kent <ikent@redhat.com>
CVE: CVE-2023-52526
This commit is contained in:
Ian Kent 2024-12-21 11:52:44 +08:00
parent 8e612b4a19
commit 23241ef4fe
1 changed files with 4 additions and 1 deletions

View File

@ -217,9 +217,12 @@ again:
strm->buf.out_size = min_t(u32, outlen,
PAGE_SIZE - pageofs);
outlen -= strm->buf.out_size;
if (!rq->out[no] && rq->fillgaps) /* deduped */
if (!rq->out[no] && rq->fillgaps) { /* deduped */
rq->out[no] = erofs_allocpage(pagepool,
GFP_KERNEL | __GFP_NOFAIL);
set_page_private(rq->out[no],
Z_EROFS_SHORTLIVED_PAGE);
}
if (rq->out[no])
strm->buf.out = kmap(rq->out[no]) + pageofs;
pageofs = 0;