]> git.proxmox.com Git - qemu.git/commitdiff
block: Fix multiwrite error handling
authorKevin Wolf <kwolf@redhat.com>
Thu, 1 Apr 2010 20:48:44 +0000 (22:48 +0200)
committerAurelien Jarno <aurelien@aurel32.net>
Fri, 9 Apr 2010 22:36:49 +0000 (00:36 +0200)
When two requests of the same multiwrite batch fail, the callback of all
requests in that batch were called twice. This could have any kind of nasty
effects, in my case it lead to use after free and eventually a segfault.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
(cherry picked from commit cb6d3ca07b8f62b47ef30c6a92caa3e8bd71248b)

block.c

diff --git a/block.c b/block.c
index 9697dc9c3d8569e7d57e637e64ac22bedbefd7fc..06e22a6155a62ec886a750daccc9329036ef344e 100644 (file)
--- a/block.c
+++ b/block.c
@@ -1617,7 +1617,7 @@ static void multiwrite_cb(void *opaque, int ret)
 {
     MultiwriteCB *mcb = opaque;
 
-    if (ret < 0) {
+    if (ret < 0 && !mcb->error) {
         mcb->error = ret;
         multiwrite_user_cb(mcb);
     }