summaryrefslogtreecommitdiff
path: root/drivers/staging/greybus/es2.c
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2016-08-17 15:43:32 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2016-08-17 15:59:13 +0200
commit5f62eab04ab7d78afd8acf00c48a7a1539794e1f (patch)
tree5b9f51047e3842245cd3498756fffb60f7f5b641 /drivers/staging/greybus/es2.c
parentc9161d72b33ff5a3e43dd60c87adf113363866a1 (diff)
greybus: es2: fix memory leak in probe error path
In case a bulk-in transfer-buffer allocation failed during probe, we'd currently leak the corresponding URB. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/es2.c')
-rw-r--r--drivers/staging/greybus/es2.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c
index 7f46f2a91833..8803bc9d410d 100644
--- a/drivers/staging/greybus/es2.c
+++ b/drivers/staging/greybus/es2.c
@@ -1623,6 +1623,8 @@ static int ap_probe(struct usb_interface *interface,
retval = -ENOMEM;
goto error;
}
+ cport_in->urb[i] = urb;
+
buffer = kmalloc(ES2_GBUF_MSG_SIZE_MAX, GFP_KERNEL);
if (!buffer) {
retval = -ENOMEM;
@@ -1634,7 +1636,7 @@ static int ap_probe(struct usb_interface *interface,
cport_in->endpoint),
buffer, ES2_GBUF_MSG_SIZE_MAX,
cport_in_callback, hd);
- cport_in->urb[i] = urb;
+
cport_in->buffer[i] = buffer;
}
}
@@ -1649,6 +1651,8 @@ static int ap_probe(struct usb_interface *interface,
retval = -ENOMEM;
goto error;
}
+ es2->arpc_urb[i] = urb;
+
buffer = kmalloc(ARPC_IN_SIZE_MAX, GFP_KERNEL);
if (!buffer) {
retval = -ENOMEM;
@@ -1661,7 +1665,6 @@ static int ap_probe(struct usb_interface *interface,
buffer, ARPC_IN_SIZE_MAX,
arpc_in_callback, es2);
- es2->arpc_urb[i] = urb;
es2->arpc_buffer[i] = buffer;
}