From 3a2d501916dd392af400a6748fc5efb8baef05f2 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Fri, 13 Oct 2023 17:33:01 +0200 Subject: [PATCH] block: Fix locking in media change monitor commands 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-stable@nongnu.org Fixes: https://issues.redhat.com/browse/RHEL-3922 Fixes: c066e808e11a5c181b625537b6c78e0de27a4801 Signed-off-by: Kevin Wolf Message-ID: <20231013153302.39234-2-kwolf@redhat.com> Reviewed-by: Hanna Czenczek Signed-off-by: Kevin Wolf (cherry picked from commit fed824501501518b1ad3dc08a39f8f855508190d) Signed-off-by: Michael Tokarev --- block/qapi-sysemu.c | 5 +++++ 1 file changed, 5 insertions(+) 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; }