aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/printer.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2011-01-10 11:23:05 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-01-22 18:38:57 -0800
commitd5aa475180d03d45c5dc6134aa833f1b3e89c45e (patch)
tree751494124d88366fa8f9369911661bad2b7ad08d /drivers/usb/gadget/printer.c
parentbbfba05283ba482ab7c119150fd3c5611939f9fd (diff)
downloadkernel_samsung_smdk4412-d5aa475180d03d45c5dc6134aa833f1b3e89c45e.zip
kernel_samsung_smdk4412-d5aa475180d03d45c5dc6134aa833f1b3e89c45e.tar.gz
kernel_samsung_smdk4412-d5aa475180d03d45c5dc6134aa833f1b3e89c45e.tar.bz2
USB: g_printer: fix bug in unregistration
This patch (as1441) fixes a bug in g_printer. The gadget driver, char device number, and class device should be unregistered in reverse order of registration. As it is now, when the module is unloaded the class device gets unregistered first, causing a crash when the unbind method tries to access it. This fixes Bugzilla #25882. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> CC: Roland Kletzing <devzero@web.de> CC: Craig W. Nadler <craig@nadler.us> CC: <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/gadget/printer.c')
-rw-r--r--drivers/usb/gadget/printer.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
index 2fc8636..dacc677 100644
--- a/drivers/usb/gadget/printer.c
+++ b/drivers/usb/gadget/printer.c
@@ -1596,13 +1596,12 @@ cleanup(void)
int status;
mutex_lock(&usb_printer_gadget.lock_printer_io);
- class_destroy(usb_gadget_class);
- unregister_chrdev_region(g_printer_devno, 2);
-
status = usb_gadget_unregister_driver(&printer_driver);
if (status)
ERROR(dev, "usb_gadget_unregister_driver %x\n", status);
+ unregister_chrdev_region(g_printer_devno, 2);
+ class_destroy(usb_gadget_class);
mutex_unlock(&usb_printer_gadget.lock_printer_io);
}
module_exit(cleanup);