2
0
Эх сурвалжийг харах

block: fix aio_flush segfaults for read-only protocols (e.g. curl)

Not all block format drivers expose an io_flush method (reasonable for
read-only protocols), so calling io_flush there will immediately segfault.

Fix by checking for the method's existence before calling it.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Avi Kivity 15 жил өмнө
parent
commit
c53a7285b4
1 өөрчлөгдсөн 3 нэмэгдсэн , 1 устгасан
  1. 3 1
      aio.c

+ 3 - 1
aio.c

@@ -113,7 +113,9 @@ void qemu_aio_flush(void)
         qemu_aio_wait();
         qemu_aio_wait();
 
 
         QLIST_FOREACH(node, &aio_handlers, node) {
         QLIST_FOREACH(node, &aio_handlers, node) {
-            ret |= node->io_flush(node->opaque);
+            if (node->io_flush) {
+                ret |= node->io_flush(node->opaque);
+            }
         }
         }
     } while (qemu_bh_poll() || ret > 0);
     } while (qemu_bh_poll() || ret > 0);
 }
 }