Stefan Hajnoczi 7103895123 block-backend: avoid bdrv_unregister_buf() NULL pointer deref
bdrv_*() APIs expect a valid BlockDriverState. Calling them with bs=NULL
leads to undefined behavior.

Jonathan Cameron reported this following NULL pointer dereference when a
VM with a virtio-blk device and a memory-backend-file object is
terminated:
1. qemu_cleanup() closes all drives, setting blk->root to NULL
2. qemu_cleanup() calls user_creatable_cleanup(), which results in a RAM
   block notifier callback because the memory-backend-file is destroyed.
3. blk_unregister_buf() is called by virtio-blk's BlockRamRegistrar
   notifier callback and undefined behavior occurs.

Fixes: baf422684d73 ("virtio-blk: use BDRV_REQ_REGISTERED_BUF optimization hint")
Co-authored-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20221121211923.1993171-1-stefanha@redhat.com>
2022-11-29 18:15:26 -05:00
..
2022-10-30 15:15:12 -04:00
2022-10-27 20:14:11 +02:00
2022-10-30 15:15:12 -04:00
2022-10-26 14:56:42 -04:00
2022-10-27 20:14:11 +02:00
2022-10-30 15:15:12 -04:00
2022-10-27 20:14:11 +02:00
2022-10-30 15:15:12 -04:00
2022-10-27 20:14:11 +02:00
2022-10-30 15:15:12 -04:00
2022-10-30 15:15:12 -04:00
2022-10-30 15:15:12 -04:00
2022-10-30 15:15:12 -04:00
2022-10-27 20:14:11 +02:00
2022-10-30 15:15:12 -04:00
2022-10-27 20:14:11 +02:00
2022-10-31 20:37:58 +00:00