media: cpia2_usb: fix memory leaks
authorWenwen Wang <wenwen@cs.uga.edu>
Sat, 17 Aug 2019 05:27:46 +0000 (02:27 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Oct 2019 10:47:55 +0000 (12:47 +0200)
[ Upstream commit 1c770f0f52dca1a2323c594f01f5ec6f1dddc97f ]

In submit_urbs(), 'cam->sbuf[i].data' is allocated through kmalloc_array().
However, it is not deallocated if the following allocation for urbs fails.
To fix this issue, free 'cam->sbuf[i].data' if usb_alloc_urb() fails.

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/usb/cpia2/cpia2_usb.c

index 0964ff556f4ec51f87f421363a43b13d3bd4f605..91b9eaa9b2ad7d0c2e328e152f94cb779d236fa3 100644 (file)
@@ -684,6 +684,10 @@ static int submit_urbs(struct camera_data *cam)
                if (!urb) {
                        for (j = 0; j < i; j++)
                                usb_free_urb(cam->sbuf[j].urb);
+                       for (j = 0; j < NUM_SBUF; j++) {
+                               kfree(cam->sbuf[j].data);
+                               cam->sbuf[j].data = NULL;
+                       }
                        return -ENOMEM;
                }