From: Kevin Wolf <kwolf@redhat.com>
To: malike <malike@kylinos.cn>
Cc: qemu-devel@nongnu.org, stefanha@redhat.com, hreitz@redhat.com
Subject: Re: [PATCH] block/bochs: validate bitmap size and compute extent_blocks after validation
Date: Tue, 10 Nov 2026 16:11:22 +0100 [thread overview]
Message-ID: <avM0GuId9N5ncs_S@redhat.com> (raw)
In-Reply-To: <20261014033419.236057-1-malike@kylinos.cn>
Am 14.10.2026 um 05:34 hat malike geschrieben:
> bochs_open() computes bitmap_blocks using the formula
> "1 + (le32_to_cpu(bochs.bitmap) - 1) / 512". le32_to_cpu() returns
> uint32_t, so when bochs.bitmap is zero the subtraction wraps to
> UINT32_MAX (0xFFFFFFFF) in unsigned arithmetic, yielding
> bitmap_blocks = 8388608 instead of 1.
>
> The bitmap field is read directly from the on-disk image header and was
> never validated. The overflowed bitmap_blocks propagates into
> seek_to_sector()'s bitmap_offset calculation, causing reads to target
> wrong offsets and return I/O errors or incorrect data.
>
> Add an explicit zero check for bochs.bitmap before the formula.
>
> Also move the extent_blocks calculation to after the existing
> extent_size validation. The same "1 + (x - 1) / 512" pattern applies
> to extent, but extent==0 is already caught by the "extent_size <
> BDRV_SECTOR_SIZE" check; the calculation is moved after that check for
> clarity and robustness, and uses the already-validated s->extent_size
> instead of re-reading the header field.
>
> Fixes: a8753c3466dc ("Bochs disk image support")
> Signed-off-by: malike <malike@kylinos.cn>
Thanks, applied to the block branch.
Of course, this alone isn't enough to fully validate the bitmap size.
Instead of incorrectly wrapping for a zero size bitmap and getting a too
large number from this, the header field could directly specify an
incorrect number that would have the same result in seek_to_sector().
qemu-iotests 078 could be extended to check different values for the
bitmap size, too, to catch these cases.
Kevin
prev parent reply other threads:[~2026-11-10 15:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-14 3:34 [PATCH] block/bochs: validate bitmap size and compute extent_blocks after validation malike
2026-11-10 15:11 ` Kevin Wolf [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=avM0GuId9N5ncs_S@redhat.com \
--to=kwolf@redhat.com \
--cc=hreitz@redhat.com \
--cc=malike@kylinos.cn \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.