USB: core: only clean up what we allocated
commit 32fd87b3bb
upstream.
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: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
466ab66b5c
commit
0cd08672e0
@ -734,18 +734,21 @@ void usb_destroy_configuration(struct usb_device *dev)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (dev->rawdescriptors) {
|
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[i]);
|
||||||
|
|
||||||
kfree(dev->rawdescriptors);
|
kfree(dev->rawdescriptors);
|
||||||
dev->rawdescriptors = NULL;
|
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];
|
struct usb_host_config *cf = &dev->config[c];
|
||||||
|
|
||||||
kfree(cf->string);
|
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])
|
if (cf->intf_cache[i])
|
||||||
kref_put(&cf->intf_cache[i]->ref,
|
kref_put(&cf->intf_cache[i]->ref,
|
||||||
usb_release_interface_cache);
|
usb_release_interface_cache);
|
||||||
|
Reference in New Issue
Block a user