From 87d8b7dcd880e0cef0c043dfef5ae649652cfe21 Mon Sep 17 00:00:00 2001 From: WangJian Date: Wed, 9 Feb 2022 11:51:43 +0800 Subject: [PATCH] block: bugfix: disable process AIO when attach scsi disk When initializing the virtio-scsi disk, hd_geometry_guess() will be called to process AIO. At this time, the scsi disk has not been fully initialized, and some fields in struct SCSIDiskState, such as vendor and version, are NULL. If processing AIO at this time, qemu may crash down. Add aio_disable_external() before hd_geometry_guess() to disable processing AIO at that time. Signed-off-by: wangjian161 --- hw/block/block.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/block/block.c b/hw/block/block.c index 26c0767552..2cfc93a68e 100644 --- a/hw/block/block.c +++ b/hw/block/block.c @@ -224,9 +224,16 @@ bool blkconf_geometry(BlockConf *conf, int *ptrans, Error **errp) { if (!conf->cyls && !conf->heads && !conf->secs) { + AioContext *ctx = blk_get_aio_context(conf->blk); + + /* Callers may not expect this function to dispatch aio handlers, so + * disable external aio such as guest device emulation. + */ + aio_disable_external(ctx); hd_geometry_guess(conf->blk, &conf->cyls, &conf->heads, &conf->secs, ptrans); + aio_enable_external(ctx); } else if (ptrans && *ptrans == BIOS_ATA_TRANSLATION_AUTO) { *ptrans = hd_bios_chs_auto_trans(conf->cyls, conf->heads, conf->secs); } -- 2.27.0