• Xuan Zhuo's avatar
    virtio: packed: fix unmap leak for indirect desc table · d5c0ed17
    Xuan Zhuo authored
    When use_dma_api and premapped are true, then the do_unmap is false.
    
    Because the do_unmap is false, vring_unmap_extra_packed is not called by
    detach_buf_packed.
    
      if (unlikely(vq->do_unmap)) {
                    curr = id;
                    for (i = 0; i < state->num; i++) {
                            vring_unmap_extra_packed(vq,
                                                     &vq->packed.desc_extra[curr]);
                            curr = vq->packed.desc_extra[curr].next;
                    }
      }
    
    So the indirect desc table is not unmapped. This causes the unmap leak.
    
    So here, we check vq->use_dma_api instead. Synchronously, dma info is
    updated based on use_dma_api judgment
    
    This bug does not occur, because no driver use the premapped with
    indirect.
    
    Fixes: b319940f ("virtio_ring: skip unmap for premapped")
    Signed-off-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
    Message-Id: <20240223071833.26095-1-xuanzhuo@linux.alibaba.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    d5c0ed17
virtio_ring.c 82.9 KB