Skip to content

Commit b55a21b

Browse files
oneukumkuba-moo
authored andcommitted
usbnet: fix memory leak in error case
usbnet_write_cmd_async() mixed up which buffers need to be freed in which error case. v2: add Fixes tag v3: fix uninitialized buf pointer Fixes: 877bd86 ("usbnet: introduce usbnet 3 command helpers") Signed-off-by: Oliver Neukum <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent a069a90 commit b55a21b

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

drivers/net/usb/usbnet.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2137,7 +2137,7 @@ static void usbnet_async_cmd_cb(struct urb *urb)
21372137
int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
21382138
u16 value, u16 index, const void *data, u16 size)
21392139
{
2140-
struct usb_ctrlrequest *req = NULL;
2140+
struct usb_ctrlrequest *req;
21412141
struct urb *urb;
21422142
int err = -ENOMEM;
21432143
void *buf = NULL;
@@ -2155,7 +2155,7 @@ int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
21552155
if (!buf) {
21562156
netdev_err(dev->net, "Error allocating buffer"
21572157
" in %s!\n", __func__);
2158-
goto fail_free;
2158+
goto fail_free_urb;
21592159
}
21602160
}
21612161

@@ -2179,14 +2179,21 @@ int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
21792179
if (err < 0) {
21802180
netdev_err(dev->net, "Error submitting the control"
21812181
" message: status=%d\n", err);
2182-
goto fail_free;
2182+
goto fail_free_all;
21832183
}
21842184
return 0;
21852185

2186+
fail_free_all:
2187+
kfree(req);
21862188
fail_free_buf:
21872189
kfree(buf);
2188-
fail_free:
2189-
kfree(req);
2190+
/*
2191+
* avoid a double free
2192+
* needed because the flag can be set only
2193+
* after filling the URB
2194+
*/
2195+
urb->transfer_flags = 0;
2196+
fail_free_urb:
21902197
usb_free_urb(urb);
21912198
fail:
21922199
return err;

0 commit comments

Comments
 (0)