forked from mirrors/linux
		
	xhci: Fix xhci debugfs NULL pointer dereference in resume from hibernate
Free the virt_device and its debugfs_private member together.
When resuming from hibernate the .free_dev callback unconditionally
freed the debugfs_private member, but could leave virt_device intact.
This triggered a NULL pointer dereference after resume when usbmuxd
sent a USBDEVFS_SETCONFIGURATION ioctl to a device, trying to add a
endpoint debugfs entry to a already freed debugfs_private pointer.
Fixes: 02b6fdc2a1 ("usb: xhci: Add debugfs interface for xHCI driver")
Reported-by: Alexander Kappner <agk@godking.net>
Tested-by: Alexander Kappner <agk@godking.net>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									66da16850e
								
							
						
					
					
						commit
						052f71e25a
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -3525,8 +3525,6 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)
 | 
			
		|||
	struct xhci_slot_ctx *slot_ctx;
 | 
			
		||||
	int i, ret;
 | 
			
		||||
 | 
			
		||||
	xhci_debugfs_remove_slot(xhci, udev->slot_id);
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_USB_DEFAULT_PERSIST
 | 
			
		||||
	/*
 | 
			
		||||
	 * We called pm_runtime_get_noresume when the device was attached.
 | 
			
		||||
| 
						 | 
				
			
			@ -3555,8 +3553,10 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	ret = xhci_disable_slot(xhci, udev->slot_id);
 | 
			
		||||
	if (ret)
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		xhci_debugfs_remove_slot(xhci, udev->slot_id);
 | 
			
		||||
		xhci_free_virt_device(xhci, udev->slot_id);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue