]> git.baikalelectronics.ru Git - kernel.git/commit
virtio_ring: fix unmap of indirect descriptors
authorMatthias Lange <matthias.lange@kernkonzept.com>
Fri, 6 Sep 2019 14:59:01 +0000 (16:59 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Mon, 9 Sep 2019 14:43:15 +0000 (10:43 -0400)
commit42d552e13d9645d0007a1a1f9a5f40082a1c61a3
tree1bcd78442f26804d5b15643a44eedfdb9c984332
parentd3d0fdd2a2219ba714157881370c9d775de697cc
virtio_ring: fix unmap of indirect descriptors

The function virtqueue_add_split() DMA-maps the scatterlist buffers. In
case a mapping error occurs the already mapped buffers must be unmapped.
This happens by jumping to the 'unmap_release' label.

In case of indirect descriptors the release is wrong and may leak kernel
memory. Because the implementation assumes that the head descriptor is
already mapped it starts iterating over the descriptor list starting
from the head descriptor. However for indirect descriptors the head
descriptor is never mapped in case of an error.

The fix is to initialize the start index with zero in case of indirect
descriptors and use the 'desc' pointer directly for iterating over the
descriptor chain.

Signed-off-by: Matthias Lange <matthias.lange@kernkonzept.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/virtio/virtio_ring.c