display: ensure qxl log_buf is a nul terminated string
commit00f426974367a660d5228418b9b5843d969f4ac6
authorDaniel P. Berrangé <berrange@redhat.com>
Wed, 23 Jan 2019 12:00:13 +0000 (23 12:00 +0000)
committerStefan Hajnoczi <stefanha@redhat.com>
Thu, 24 Jan 2019 14:16:56 +0000 (24 14:16 +0000)
tree7805cd590affa81b8adbc6f23377b9f3f0403bfc
parentf6b06fcceef465de0cf2514c9f76fe0192896781
display: ensure qxl log_buf is a nul terminated string

The QXL_IO_LOG command allows the guest to send log messages to the host
via a buffer in the QXLRam struct. QEMU prints these to the console if
the qxl 'guestdebug' option is set to non-zero. It will also feed them
to the trace subsystem if any backends are built-in.

In both cases the log_buf data will get treated as being as a nul
terminated string, by the printf '%s' format specifier and / or other
code reading the buffer.

QEMU does nothing to guarantee that the log_buf really is nul terminated,
so there is potential for out of bounds array access.

This would affect any QEMU which has the log, syslog or ftrace trace
backends built into QEMU. It can only be triggered if the 'qxl_io_log'
trace event is enabled, however, so they are not vulnerable without
specific administrative action to enable this.

It would also affect QEMU if the 'guestdebug' parameter is set to a
non-zero value, which again is not the default and requires explicit
admin opt-in.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-id: 20190123120016.4538-2-berrange@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
hw/display/qxl.c
hw/display/trace-events