monitor: Catch printing to non-existent monitor
The monitor_vprintf() function now touches the 'mon' pointer before calling monitor_puts(), this causes block migration to segfault as its functions call monitor_printf() with a NULL 'mon'. To fix the problem this commit moves the 'mon' NULL check from monitor_puts() to monitor_vprintf(). This can potentially hide bugs, but for some reason this has been the behavior for a long time. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
183e6e5257
commit
2daa119126
@ -177,9 +177,6 @@ static void monitor_puts(Monitor *mon, const char *str)
|
||||
{
|
||||
char c;
|
||||
|
||||
if (!mon)
|
||||
return;
|
||||
|
||||
for(;;) {
|
||||
c = *str++;
|
||||
if (c == '\0')
|
||||
@ -195,6 +192,9 @@ static void monitor_puts(Monitor *mon, const char *str)
|
||||
|
||||
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
|
||||
{
|
||||
if (!mon)
|
||||
return;
|
||||
|
||||
if (mon->mc && !mon->mc->print_enabled) {
|
||||
qemu_error_new(QERR_UNDEFINED_ERROR);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user