diff options
author | Johan Hovold <johan@hovoldconsulting.com> | 2016-08-17 15:43:32 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2016-08-17 15:59:13 +0200 |
commit | 5f62eab04ab7d78afd8acf00c48a7a1539794e1f (patch) | |
tree | 5b9f51047e3842245cd3498756fffb60f7f5b641 /drivers/staging/greybus/es2.c | |
parent | c9161d72b33ff5a3e43dd60c87adf113363866a1 (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.c | 7 |
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; } |