diff options
author | Simon Glass <sjg@chromium.org> | 2023-07-30 11:16:04 -0600 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2023-08-09 23:31:11 +0800 |
commit | 4099df48a68fdfdc4b1d57a503679b35e724de4e (patch) | |
tree | 28a129e9b95612a5f06685e8c490257c86e10931 /arch/x86/lib | |
parent | 1fa64e155d93a9e8a44b34e22390db61bfb24afd (diff) | |
download | u-boot-4099df48a68fdfdc4b1d57a503679b35e724de4e.zip u-boot-4099df48a68fdfdc4b1d57a503679b35e724de4e.tar.gz u-boot-4099df48a68fdfdc4b1d57a503679b35e724de4e.tar.bz2 |
x86: Correct copying of BIOS mode information
This is copying beyond the end of the destination buffer. Correct the code
by using the size of the vesa_mode_info struct. We don't need to copy the
rest of the bytes in the buffer.
This long-standing bug prevents virtio bootdevs working correctly on
qemu-x86 at present.
Fixes: 0ca2426beae ("x86: Add support for running option ROMs natively")
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com> # qemu-x86_64
Diffstat (limited to 'arch/x86/lib')
-rw-r--r-- | arch/x86/lib/bios.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/lib/bios.c b/arch/x86/lib/bios.c index e29cae7..f146bbd 100644 --- a/arch/x86/lib/bios.c +++ b/arch/x86/lib/bios.c @@ -204,7 +204,7 @@ static u8 vbe_get_mode_info(struct vesa_state *mi) realmode_interrupt(0x10, VESA_GET_MODE_INFO, 0x0000, mi->video_mode, 0x0000, buffer_seg, buffer_adr); - memcpy(mi->mode_info_block, buffer, sizeof(struct vesa_state)); + memcpy(mi->mode_info_block, buffer, sizeof(struct vesa_mode_info)); mi->valid = true; return 0; |