]> git.ipfire.org Git - thirdparty/qemu.git/commit
multiboot: Reject kernels exceeding the address space
authorKevin Wolf <kwolf@redhat.com>
Wed, 14 Mar 2018 16:46:38 +0000 (17:46 +0100)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Thu, 21 Jun 2018 01:45:00 +0000 (20:45 -0500)
commit31b0eb0dad3daef6cd9eef74bc107cb3367450e7
treea916ef0e7b7e471bdcc63d5fec47fe2ec0f81e81
parentbbdcfd2dbcf447233aabb6768fe05e3861171665
multiboot: Reject kernels exceeding the address space

The code path where mh_load_end_addr is non-zero in the Multiboot
header checks that mh_load_end_addr >= mh_load_addr and so
mb_load_size is checked.  However, mb_load_size is not checked when
calculated from the file size, when mh_load_end_addr is 0.

If the kernel binary size is larger than can fit in the address space
after load_addr, we ended up with a kernel_size that is smaller than
load_size, which means that we read the file into a too small buffer.

Add a check to reject kernel files with such Multiboot headers.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Jack Schwartz <jack.schwartz@oracle.com>
(cherry picked from commit b17a9054a0652a1481be48a6729e972abf02412f)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
hw/i386/multiboot.c