[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 4/5] blockdev: Fix drive_del not to crash when drive
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH 4/5] blockdev: Fix drive_del not to crash when drive is not in use |
Date: |
Mon, 17 Jan 2011 19:31:29 +0100 |
Watch this:
(qemu) drive_add 0 if=none,file=tmp.img
OK
(qemu) info block
none0: type=hd removable=0 file=tmp.img ro=0 drv=raw encrypted=0
(qemu) drive_del none0
Segmentation fault (core dumped)
do_drive_del()'s code to clean up the pointer from a qdev using the
drive back to the drive needs to check whether such a device exists.
Signed-off-by: Markus Armbruster <address@hidden>
---
blockdev.c | 16 +++++++++-------
1 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 04a0e84..51a2da3 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -682,13 +682,15 @@ int do_drive_del(Monitor *mon, const QDict *qdict,
QObject **ret_data)
/* clean up guest state from pointing to host resource by
* finding and removing DeviceState "drive" property */
- for (prop = bs->peer->info->props; prop && prop->name; prop++) {
- if (prop->info->type == PROP_TYPE_DRIVE) {
- ptr = qdev_get_prop_ptr(bs->peer, prop);
- if ((*ptr) == bs) {
- bdrv_detach(bs, bs->peer);
- *ptr = NULL;
- break;
+ if (bs->peer) {
+ for (prop = bs->peer->info->props; prop && prop->name; prop++) {
+ if (prop->info->type == PROP_TYPE_DRIVE) {
+ ptr = qdev_get_prop_ptr(bs->peer, prop);
+ if (*ptr == bs) {
+ bdrv_detach(bs, bs->peer);
+ *ptr = NULL;
+ break;
+ }
}
}
}
--
1.7.2.3
- [Qemu-devel] [PATCH 0/5] -drive/drive_add fixes, Markus Armbruster, 2011/01/17
- [Qemu-devel] [PATCH 1/5] blockdev: Fix error message for invalid -drive CHS, Markus Armbruster, 2011/01/17
- [Qemu-devel] [PATCH 4/5] blockdev: Fix drive_del not to crash when drive is not in use,
Markus Armbruster <=
- [Qemu-devel] [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Markus Armbruster, 2011/01/17
- [Qemu-devel] Re: [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Kevin Wolf, 2011/01/21
- [Qemu-devel] Re: [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Markus Armbruster, 2011/01/21
- [Qemu-devel] Re: [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Kevin Wolf, 2011/01/21
- [Qemu-devel] Re: [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Markus Armbruster, 2011/01/21
- [Qemu-devel] Re: [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Kevin Wolf, 2011/01/21
- [Qemu-devel] Re: [PATCH 3/5] blockdev: Reject multiple definitions for the same drive, Markus Armbruster, 2011/01/24
[Qemu-devel] [PATCH 2/5] blockdev: Make drive_init() use error_report(), Markus Armbruster, 2011/01/17
[Qemu-devel] [PATCH 5/5] blockdev: Fix drive_add for drives without media, Markus Armbruster, 2011/01/17
Re: [Qemu-devel] [PATCH 0/5] -drive/drive_add fixes, Stefan Hajnoczi, 2011/01/21