summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-07-30 20:16:04 +0300
committerBin Meng <bmeng.cn@gmail.com>2023-08-09 18:31:11 +0300
commit4099df48a68fdfdc4b1d57a503679b35e724de4e (patch)
tree28a129e9b95612a5f06685e8c490257c86e10931
parent1fa64e155d93a9e8a44b34e22390db61bfb24afd (diff)
downloadu-boot-4099df48a68fdfdc4b1d57a503679b35e724de4e.tar.xz
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
-rw-r--r--arch/x86/lib/bios.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/lib/bios.c b/arch/x86/lib/bios.c
index e29cae78e5..f146bbd542 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;