From: Kevin Wolf <kw...@redhat.com> blk_insert_bs() requires that the caller holds the AioContext lock for the node to be inserted. Since commit c066e808e11, neglecting to do so causes a crash when the child has to be moved to a different AioContext to attach it to the BlockBackend.
This fixes qmp_blockdev_insert_anon_medium(), which is called for the QMP commands 'blockdev-insert-medium' and 'blockdev-change-medium', to correctly take the lock. Cc: qemu-sta...@nongnu.org Fixes: https://issues.redhat.com/browse/RHEL-3922 Fixes: c066e808e11a5c181b625537b6c78e0de27a4801 Signed-off-by: Kevin Wolf <kw...@redhat.com> Message-ID: <20231013153302.39234-2-kw...@redhat.com> Reviewed-by: Hanna Czenczek <hre...@redhat.com> Signed-off-by: Kevin Wolf <kw...@redhat.com> (cherry picked from commit fed824501501518b1ad3dc08a39f8f855508190d) Signed-off-by: Michael Tokarev <m...@tls.msk.ru> diff --git a/block/qapi-sysemu.c b/block/qapi-sysemu.c index ef07151892..305225db32 100644 --- a/block/qapi-sysemu.c +++ b/block/qapi-sysemu.c @@ -232,6 +232,7 @@ static void qmp_blockdev_insert_anon_medium(BlockBackend *blk, BlockDriverState *bs, Error **errp) { Error *local_err = NULL; + AioContext *ctx; bool has_device; int ret; @@ -253,7 +254,11 @@ static void qmp_blockdev_insert_anon_medium(BlockBackend *blk, return; } + ctx = bdrv_get_aio_context(bs); + aio_context_acquire(ctx); ret = blk_insert_bs(blk, bs, errp); + aio_context_release(ctx); + if (ret < 0) { return; } -- 2.39.2