On Thu, Oct 29, 2026 at 12:23:57AM +0100, Kevin Wolf wrote:
> +static uint8_t get_id_request(QVirtioDevice *dev, QVirtQueue *vq,
> + char *buf, size_t buf_len,
> + QGuestAllocator *t_alloc)
> +{
> + QTestState *qts = global_qtest;
> + uint64_t req_addr;
> + uint32_t free_head;
> + uint8_t status;
> +
> + QVirtioBlkReq req = {
> + .type = VIRTIO_BLK_T_GET_ID,
> + .data = buf,
> + };
> +
> + req_addr = virtio_blk_request(t_alloc, dev, &req, buf_len);
> +
> + memset(req.data, 0xa5, buf_len);
> + memwrite(req_addr + 16, req.data, buf_len);
> +
> + free_head = qvirtqueue_add(qts, vq, req_addr, 16, false, true);
> + qvirtqueue_add(qts, vq, req_addr + 16, buf_len, true, true);
> + qvirtqueue_add(qts, vq, req_addr + 16 + buf_len, 1, true, false);
> +
> + qvirtqueue_kick(qts, dev, vq, free_head);
> +
> + qvirtio_wait_used_elem(qts, dev, vq, free_head, NULL,
> + QVIRTIO_BLK_TIMEOUT_US);
> + status = readb(req_addr + 16 + buf_len);
> + memread(req_addr + 16, buf, buf_len);
Missing guest_free(t_alloc, req_addr);
> + return status;
> +}