Heap-buffer-overflow in virtio-serial set_config

Hello,

Reproducer

cat << EOF | ./qemu-system-i386 -display none -machine accel=qtest, -m \
512M -machine q35 -nodefaults -device virtio-serial -qtest stdio
outl 0xcf8 0x80000810
outl 0xcfc 0xc000
outl 0xcf8 0x80000804
outw 0xcfc 0x01
outl 0xc014 0x00
EOF

Stacktrace

==50365==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x50200006d818 at pc 0xaaaadc3d7f58 bp 0xffffe611f9d0 sp 0xffffe611f9c8
READ of size 4 at 0x50200006d818 thread T0
    #0 0xaaaadc3d7f54 in set_config /home/alxndr/Development/qemu/build/../hw/char/virtio-serial-bus.c:590:18
    #1 0xaaaadbf18f6c in memory_region_write_accessor /home/alxndr/Development/qemu/build/../system/memory.c:491:5
    #2 0xaaaadbf18b74 in access_with_adjusted_size /home/alxndr/Development/qemu/build/../system/memory.c:567:18
    #3 0xaaaadbf1853c in memory_region_dispatch_write /home/alxndr/Development/qemu/build/../system/memory.c
    #4 0xaaaadbf4ba08 in address_space_stm_internal /home/alxndr/Development/qemu/build/../system/memory_ldst.c.inc:85:13
    #5 0xaaaadbf5ba24 in qtest_process_command /home/alxndr/Development/qemu/build/../system/qtest.c:483:13
    #6 0xaaaadbf5ba24 in qtest_process_inbuf /home/alxndr/Development/qemu/build/../system/qtest.c:777:9
    #7 0xaaaadc74dfbc in fd_chr_read /home/alxndr/Development/qemu/build/../chardev/char-fd.c:72:9
    #8 0xffffba27bb34  (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x5bb34) (BuildId: c9da78597c6a0ebe7e725c7af12ab8c0b9da4b5b)
    #9 0xffffba27f894 in g_main_context_dispatch (/lib/aarch64-linux-gnu/libglib-2.0.so.0+0x5f894) (BuildId: c9da78597c6a0ebe7e725c7af12ab8c0b9da4b5b)
    #10 0xaaaadc997988 in glib_pollfds_poll /home/alxndr/Development/qemu/build/../util/main-loop.c:290:9
    #11 0xaaaadc997988 in os_host_main_loop_wait /home/alxndr/Development/qemu/build/../util/main-loop.c:313:5
    #12 0xaaaadc997988 in main_loop_wait /home/alxndr/Development/qemu/build/../util/main-loop.c:592:11
    #13 0xaaaadbf653e4 in qemu_main_loop /home/alxndr/Development/qemu/build/../system/runstate.c:907:9
    #14 0xaaaadc75c600 in qemu_default_main /home/alxndr/Development/qemu/build/../system/main.c:50:14
    #15 0xaaaadc75c7e4 in main /home/alxndr/Development/qemu/build/../system/main.c:93:9
    #16 0xffffb9d32298 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #17 0xffffb9d32378 in __libc_start_main csu/../csu/libc-start.c:360:3
    #18 0xaaaadb64b02c in _start (/home/alxndr/Development/qemu/build/qemu-system-i386+0xd7b02c) (BuildId: 83a1ab7fc0ed142c52fce8b9c0a40064f1b56642)

This error appears to have been introduced by d0660e5b ("hw/char/virtio-serial: Do not expose the 'emergency-write' property") CC: @philmd

OSS-Fuzz link: https://issues.oss-fuzz.com/issues/484647006

Assignee Loading
Time tracking Loading