Skip to content

Commit

Permalink
USB: core: only clean up what we allocated
Browse files Browse the repository at this point in the history
When cleaning up the configurations, make sure we only free the number
of configurations and interfaces that we could have allocated.

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Andrey Konovalov authored and Greg Kroah-Hartman committed Dec 12, 2017
1 parent c1ed473 commit 32fd87b
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions drivers/usb/core/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -764,18 +764,21 @@ void usb_destroy_configuration(struct usb_device *dev)
return;

if (dev->rawdescriptors) {
for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
for (i = 0; i < dev->descriptor.bNumConfigurations &&
i < USB_MAXCONFIG; i++)
kfree(dev->rawdescriptors[i]);

kfree(dev->rawdescriptors);
dev->rawdescriptors = NULL;
}

for (c = 0; c < dev->descriptor.bNumConfigurations; c++) {
for (c = 0; c < dev->descriptor.bNumConfigurations &&
c < USB_MAXCONFIG; c++) {
struct usb_host_config *cf = &dev->config[c];

kfree(cf->string);
for (i = 0; i < cf->desc.bNumInterfaces; i++) {
for (i = 0; i < cf->desc.bNumInterfaces &&
i < USB_MAXINTERFACES; i++) {
if (cf->intf_cache[i])
kref_put(&cf->intf_cache[i]->ref,
usb_release_interface_cache);
Expand Down

0 comments on commit 32fd87b

Please sign in to comment.