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;
|
char c;
|
||||||
|
|
||||||
if (!mon)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
c = *str++;
|
c = *str++;
|
||||||
if (c == '\0')
|
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)
|
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
|
if (!mon)
|
||||||
|
return;
|
||||||
|
|
||||||
if (mon->mc && !mon->mc->print_enabled) {
|
if (mon->mc && !mon->mc->print_enabled) {
|
||||||
qemu_error_new(QERR_UNDEFINED_ERROR);
|
qemu_error_new(QERR_UNDEFINED_ERROR);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user