diff options
| author | Kevin Wolf <kwolf@redhat.com> | 2023-10-13 17:33:01 +0200 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2023-10-31 13:51:28 +0100 |
| commit | fed824501501518b1ad3dc08a39f8f855508190d (patch) | |
| tree | 8989ee1a6f41260684f5ffd2c00cea61b8ce27ec | |
| parent | 87fe52ceca697e2ff8d42e881538219ced86f760 (diff) | |
| download | focaccia-qemu-fed824501501518b1ad3dc08a39f8f855508190d.tar.gz focaccia-qemu-fed824501501518b1ad3dc08a39f8f855508190d.zip | |
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 <kwolf@redhat.com> Message-ID: <20231013153302.39234-2-kwolf@redhat.com> Reviewed-by: Hanna Czenczek <hreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| -rw-r--r-- | block/qapi-sysemu.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/block/qapi-sysemu.c b/block/qapi-sysemu.c index 3f614cbc04..1618cd225a 100644 --- a/block/qapi-sysemu.c +++ b/block/qapi-sysemu.c @@ -237,6 +237,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; @@ -258,7 +259,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; } |