usb: fix usb_qdev_init() error handling again
authorStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Thu, 15 Dec 2011 10:05:18 +0000 (10:05 +0000)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 15 Dec 2011 15:27:23 +0000 (09:27 -0600)
commitdb3a5ed7e4422491dac1f83264ebb01f6667ffc8
tree59172a410fa2fa10b11c1c221a6e493f5a7d6945
parent56384e8b1eebac750e6186f5041af710433ddc9e
usb: fix usb_qdev_init() error handling again

Commit f462141f18ffdd75847f6459ef83d90b831d12c0 introduced clean up code
when usb_qdev_init() fails.  Unfortunately it calls .handle_destroy()
when .init() was never invoked or failed.  This can lead to crashes when
.handle_destroy() tries to clean up things that were never initialized.

This patch is careful to undo only those steps that completed along the
usb_qdev_init() code path.  It's not as pretty as the unified error
handling in f462141f18ffdd75847f6459ef83d90b831d12c0 but it's necessary.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
hw/usb-bus.c