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 <wen...@cs.uga.edu>
---
 drivers/media/usb/cpia2/cpia2_usb.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/media/usb/cpia2/cpia2_usb.c 
b/drivers/media/usb/cpia2/cpia2_usb.c
index 17468f7..3ab80a7 100644
--- a/drivers/media/usb/cpia2/cpia2_usb.c
+++ b/drivers/media/usb/cpia2/cpia2_usb.c
@@ -676,6 +676,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;
                }
 
-- 
2.7.4

Reply via email to