media: ti-vpe: Add cleanup in vpdma_list_cleanup()
authorWenwen Wang <wenwen@cs.uga.edu>
Sun, 18 Aug 2019 06:40:04 +0000 (03:40 -0300)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 26 Aug 2019 13:42:29 +0000 (10:42 -0300)
If an error occurs in this function, no cleanup is executed, leading to
memory/resource leaks. To fix this issue, introduce two labels to perform
the cleanup work.

Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/ti-vpe/vpdma.c

index fd37d79e16191871c19ca65df5beb94711c3c820..53d27cd6e10aee27756a96e0cfe46d0a89fc1a2a 100644 (file)
@@ -445,23 +445,25 @@ int vpdma_list_cleanup(struct vpdma_data *vpdma, int list_num,
 
        ret = vpdma_map_desc_buf(vpdma, &abort_list.buf);
        if (ret)
-               return ret;
+               goto free_desc;
        ret = vpdma_submit_descs(vpdma, &abort_list, list_num);
        if (ret)
-               return ret;
+               goto unmap_desc;
 
        while (vpdma_list_busy(vpdma, list_num) && --timeout)
                ;
 
        if (timeout == 0) {
                dev_err(&vpdma->pdev->dev, "Timed out cleaning up VPDMA list\n");
-               return -EBUSY;
+               ret = -EBUSY;
        }
 
+unmap_desc:
        vpdma_unmap_desc_buf(vpdma, &abort_list.buf);
+free_desc:
        vpdma_free_desc_buf(&abort_list.buf);
 
-       return 0;
+       return ret;
 }
 EXPORT_SYMBOL(vpdma_list_cleanup);