Skip to content

Commit bbdf902

Browse files
ZheyuMastefanhaRH
authored andcommitted
block/virtio-blk: Fix memory leak from virtio_blk_zone_report
This modification ensures that in scenarios where the buffer size is insufficient for a zone report, the function will now properly set an error status and proceed to a cleanup label, instead of merely returning. The following ASAN log reveals it: ==1767400==ERROR: LeakSanitizer: detected memory leaks Direct leak of 312 byte(s) in 1 object(s) allocated from: #0 0x64ac7b3280cd in malloc llvm/compiler-rt/lib/asan/asan_malloc_linux.cpp:129:3 #1 0x735b02fb9738 in g_malloc (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x5e738) #2 0x64ac7d23be96 in virtqueue_split_pop hw/virtio/virtio.c:1612:12 #3 0x64ac7d23728a in virtqueue_pop hw/virtio/virtio.c:1783:16 #4 0x64ac7cfcaacd in virtio_blk_get_request hw/block/virtio-blk.c:228:27 qemu#5 0x64ac7cfca7c7 in virtio_blk_handle_vq hw/block/virtio-blk.c:1123:23 qemu#6 0x64ac7cfecb95 in virtio_blk_handle_output hw/block/virtio-blk.c:1157:5 Signed-off-by: Zheyu Ma <[email protected]> Message-id: [email protected] Signed-off-by: Stefan Hajnoczi <[email protected]>
1 parent 786fd79 commit bbdf902

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

hw/block/virtio-blk.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,8 @@ static void virtio_blk_handle_zone_report(VirtIOBlockReq *req,
768768
sizeof(struct virtio_blk_zone_report) +
769769
sizeof(struct virtio_blk_zone_descriptor)) {
770770
virtio_error(vdev, "in buffer too small for zone report");
771-
return;
771+
err_status = VIRTIO_BLK_S_ZONE_INVALID_CMD;
772+
goto out;
772773
}
773774

774775
/* start byte offset of the zone report */

0 commit comments

Comments
 (0)