Commit 23d3090f authored by Dan Carpenter's avatar Dan Carpenter Committed by Mauro Carvalho Chehab

[media] vmalloc_sg: off by one in error handling

The "i--" needs to happen at the start of the loop or it will try to
release something bogus (probably it will crash) and it won't release
the first ->vaddr_page[].

Fixes: 7b4eeed1 ('[media] vmalloc_sg: make sure all pages in vmalloc area are really DMA-ready')
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 5b6aa199
...@@ -253,9 +253,11 @@ int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction, ...@@ -253,9 +253,11 @@ int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction,
return 0; return 0;
out_free_pages: out_free_pages:
while (i > 0) { while (i > 0) {
void *addr = page_address(dma->vaddr_pages[i]); void *addr;
dma_free_coherent(dma->dev, PAGE_SIZE, addr, dma->dma_addr[i]);
i--; i--;
addr = page_address(dma->vaddr_pages[i]);
dma_free_coherent(dma->dev, PAGE_SIZE, addr, dma->dma_addr[i]);
} }
kfree(dma->dma_addr); kfree(dma->dma_addr);
dma->dma_addr = NULL; dma->dma_addr = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment