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;
> +}

Reply via email to