* [PATCH] block/qed: fix use-after-free by nullifying timer pointer after free
@ 2025-03-04 8:39 gerben
2025-03-06 2:21 ` Stefan Hajnoczi
0 siblings, 1 reply; 2+ messages in thread
From: gerben @ 2025-03-04 8:39 UTC (permalink / raw)
To: qemu-devel, kwolf, hreitz; +Cc: sdl.qemu
From: Denis Rastyogin <gerben@altlinux.org>
This error was discovered by fuzzing qemu-img.
In the QED block driver, the need_check_timer timer is freed in
bdrv_qed_detach_aio_context, but the pointer to the timer is not
set to NULL. This can lead to a use-after-free scenario
in bdrv_qed_drain_begin().
The need_check_timer pointer is set to NULL after freeing the timer.
Which helps catch this condition when checking in bdrv_qed_drain_begin().
Closes: https://gitlab.com/qemu-project/qemu/-/issues/2852
Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
---
block/qed.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/block/qed.c b/block/qed.c
index 382c9e5335..ac24449ffb 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -353,6 +353,7 @@ static void bdrv_qed_detach_aio_context(BlockDriverState *bs)
qed_cancel_need_check_timer(s);
timer_free(s->need_check_timer);
+ s->need_check_timer = NULL;
}
static void bdrv_qed_attach_aio_context(BlockDriverState *bs,
--
2.42.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] block/qed: fix use-after-free by nullifying timer pointer after free
2025-03-04 8:39 [PATCH] block/qed: fix use-after-free by nullifying timer pointer after free gerben
@ 2025-03-06 2:21 ` Stefan Hajnoczi
0 siblings, 0 replies; 2+ messages in thread
From: Stefan Hajnoczi @ 2025-03-06 2:21 UTC (permalink / raw)
To: gerben; +Cc: qemu-devel, kwolf, hreitz, sdl.qemu
[-- Attachment #1: Type: text/plain, Size: 833 bytes --]
On Tue, Mar 04, 2025 at 11:39:10AM +0300, gerben@altlinux.org wrote:
> From: Denis Rastyogin <gerben@altlinux.org>
>
> This error was discovered by fuzzing qemu-img.
>
> In the QED block driver, the need_check_timer timer is freed in
> bdrv_qed_detach_aio_context, but the pointer to the timer is not
> set to NULL. This can lead to a use-after-free scenario
> in bdrv_qed_drain_begin().
>
> The need_check_timer pointer is set to NULL after freeing the timer.
> Which helps catch this condition when checking in bdrv_qed_drain_begin().
>
> Closes: https://gitlab.com/qemu-project/qemu/-/issues/2852
> Signed-off-by: Denis Rastyogin <gerben@altlinux.org>
> ---
> block/qed.c | 1 +
> 1 file changed, 1 insertion(+)
Thanks, applied to my block tree:
https://gitlab.com/stefanha/qemu/commits/block
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-03-06 2:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-04 8:39 [PATCH] block/qed: fix use-after-free by nullifying timer pointer after free gerben
2025-03-06 2:21 ` Stefan Hajnoczi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).