File CVE-2018-7550-qemuu-multiboot-OOB-access-while-loading-kernel-image.patch of Package xen.7317

While loading kernel via multiboot-v1 image, (flags & 0x00010000)
indicates that multiboot header contains valid addresses to load
the kernel image. In that, end of the data segment address
'mh_load_end_addr' should be less than the bss segment address
'mh_bss_end_addr'. Add check to validate that.

Reported-by: CERT CC <address@hidden>
Signed-off-by: Prasad J Pandit <address@hidden>
---
 hw/i386/multiboot.c | 4 ++++
 1 file changed, 4 insertions(+)

Index: xen-4.4.4-testing/tools/qemu-xen-dir-remote/hw/i386/multiboot.c
===================================================================
--- xen-4.4.4-testing.orig/tools/qemu-xen-dir-remote/hw/i386/multiboot.c
+++ xen-4.4.4-testing/tools/qemu-xen-dir-remote/hw/i386/multiboot.c
@@ -200,7 +200,13 @@ int load_multiboot(FWCfgState *fw_cfg,
         uint32_t mh_header_addr = ldl_p(header+i+12);
         uint32_t mh_load_end_addr = ldl_p(header+i+20);
         uint32_t mh_bss_end_addr = ldl_p(header+i+24);
+
         mh_load_addr = ldl_p(header+i+16);
+        if (mh_load_end_addr > mh_bss_end_addr) {
+            fprintf(stderr, "invalid mh_load_end_addr address\n");
+            exit(1);
+        }
+
         uint32_t mb_kernel_text_offset = i - (mh_header_addr - mh_load_addr);
         uint32_t mb_load_size = 0;
         mh_entry_addr = ldl_p(header+i+28);
openSUSE Build Service is sponsored by