diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2021-09-29 11:50:13 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2021-09-29 12:53:52 +0200 |
| commit | e08fe93770083bf534bd468c3fb46ad26e57d83f (patch) | |
| tree | 684ad88f0750ea76eba0ae62a13be9513a3acc08 | |
| parent | 81cc67e3a14a127f3983fa87c7be1cf9971c824f (diff) | |
vm/qemu: fix nil deref in qmp
A user has reported the following crash:
panic: runtime error: invalid memory address or nil pointer dereference
goroutine 1021 [running]:
github.com/google/syzkaller/vm/qemu.(*instance).qmp()
vm/qemu/qmp.go:96 +0x1c9
github.com/google/syzkaller/vm/qemu.(*instance).hmp()
vm/qemu/qmp.go:115 +0xbd
github.com/google/syzkaller/vm/qemu.(*instance).Diagnose()
vm/qemu/qemu.go:662 +0x18d
qmp function accesses resp even if doQmp returns an error
and doQmp can return a nil resp in this case if inst.monEnc.Encode fails.
Don't access resp if error is returned. The only caller hmp
does not use the returned object is an error is returned.
| -rw-r--r-- | vm/qemu/qmp.go | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/vm/qemu/qmp.go b/vm/qemu/qmp.go index a0ff727ff..dba151f37 100644 --- a/vm/qemu/qmp.go +++ b/vm/qemu/qmp.go @@ -93,10 +93,10 @@ func (inst *instance) qmp(cmd *qmpCommand) (interface{}, error) { } resp, err := inst.doQmp(cmd) if err != nil { - return resp.Return, err + return nil, err } if resp.Error.Desc != "" { - return resp.Return, fmt.Errorf("error %v", resp.Error) + return nil, fmt.Errorf("error %v", resp.Error) } if resp.Return == nil { return nil, fmt.Errorf(`no "return" nor "error" in [%v]`, resp) |
