Files
Centos-kernel-stream-9/fs/iomap
CKI Backport Bot 4ec5b2f3cb iomap: fix out-of-bounds bitmap_set() with zero-length range
JIRA: https://redhat.atlassian.net/browse/RHEL-240184  
CVE: CVE-2026-68145
Backported from tree(s): linux

commit 9c7d8f7c8994c790fca501dc45ce66e7356cbe05
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Tue Jul 14 16:23:24 2026 +0800

    iomap: fix out-of-bounds bitmap_set() with zero-length range

    ifs_set_range_dirty() and ifs_set_range_uptodate() compute last_blk
    as (off + len - 1) >> i_blkbits.  When off is 0 and len is 0, the
    unsigned subtraction underflows to SIZE_MAX, producing a huge
    last_blk and nr_blks value that causes bitmap_set() to write far
    beyond the ifs->state allocation.

    Regarding ifs_set_range_uptodate(), it is temporarily safe because len
    cannot be passed in as 0. However, for ifs_set_range_dirty() this is
    reachable from __iomap_write_end(): when copy_folio_from_iter_atomic()
    returns 0 (e.g. user buffer fault) and the folio is already uptodate,
    the guard at the top of __iomap_write_end() does not trigger because
    !folio_test_uptodate() is false, and iomap_set_range_dirty() is called
    with copied == 0.

    Add a !len guard to both functions before the computation, so that a
    zero-length range is a no-op.

    Fixes: 4ce02c679722 ("iomap: Add per-block dirty state tracking to improve performance")
    Cc: stable@vger.kernel.org # v6.6
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Link: https://patch.msgid.link/20260714082325.325163-5-yi.zhang@huaweicloud.com
    Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
    Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>

(cherry picked from commit 9c7d8f7c8994c790fca501dc45ce66e7356cbe05)
Assisted-by: Patchpal
Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>
2026-08-13 15:28:47 +00:00
..
2023-03-24 11:19:01 -04:00