Skip to content
  • hansmi's avatar
    Avoid use-after-free in serialization · 03c519ff
    hansmi authored
    Serializing parsers with large amounts of buffered write data (e.g. in case of
    a slow or blocked write destination) would cause "serialize_data" to reallocate
    the state buffer whose default size is 64kB (USBREDIRPARSER_SERIALIZE_BUF_SIZE).
    The pointer to the position for the write buffer count would then point to
    a location outside the buffer where the number of write buffers would be written
    as a 32-bit value.
    
    As of QEMU 5.2.0 the serializer is invoked for migrations. Serializations for
    migrations may happen regularily such as when using the COLO feature[1].
    Serialization happens under QEMU's I/O lock. The guest can't control the state
    while the serialization is happening. The value written is the number of
    outstanding buffers which would be suceptible to timing and host system system
    load. The guest would have to continously groom the write buffers. A useful
    value needs to be allocated in the exact position freed during the buffer size
    increase, but before the buffer count is written. The author doesn't consider it
    realistic to exploit this use-after-free reliably.
    
    [1] https://wiki.qemu.org/Features/COLO
    
    
    
    Signed-off-by: default avatarMichael Hanselmann <public@hansmi.ch>
    03c519ff