diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2019-08-23 16:11:35 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2019-08-23 16:11:35 +0100 |
commit | 5428e12d528fcbe31e8a9b236d1359ad52066382 (patch) | |
tree | c9cc9dac8e14f61fb4dc39ce44a9bf34eb49615e /util | |
parent | 586f3dced9f2b354480c140c070a3d02a0c66a1e (diff) | |
parent | 5d4c1ed3d46d7e2010b389fe5f3376f605182ab0 (diff) |
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
Pull request
# gpg: Signature made Thu 22 Aug 2019 16:52:45 BST
# gpg: using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full]
# gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" [full]
# Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8
* remotes/stefanha/tags/block-pull-request:
vhost-user-scsi: prevent using uninitialized vqs
util/async: hold AioContext ref to prevent use-after-free
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/async.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/util/async.c b/util/async.c index 8d2105729c..4e4c7af51e 100644 --- a/util/async.c +++ b/util/async.c @@ -459,9 +459,17 @@ void aio_co_schedule(AioContext *ctx, Coroutine *co) abort(); } + /* The coroutine might run and release the last ctx reference before we + * invoke qemu_bh_schedule(). Take a reference to keep ctx alive until + * we're done. + */ + aio_context_ref(ctx); + QSLIST_INSERT_HEAD_ATOMIC(&ctx->scheduled_coroutines, co, co_scheduled_next); qemu_bh_schedule(ctx->co_schedule_bh); + + aio_context_unref(ctx); } void aio_co_wake(struct Coroutine *co) |