USB Elan FTDI: check for workqueue creation

Avoid NULL pointer usage if workqueue creation failed.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by Cyrill Gorcunov and committed by Greg Kroah-Hartman ee17b289 834dbca5

+16 -2
+16 -2
drivers/usb/misc/ftdi-elan.c
··· 2905 { 2906 int result; 2907 printk(KERN_INFO "driver %s built at %s on %s\n", ftdi_elan_driver.name, 2908 - __TIME__, __DATE__); 2909 init_MUTEX(&ftdi_module_lock); 2910 INIT_LIST_HEAD(&ftdi_static_list); 2911 status_queue = create_singlethread_workqueue("ftdi-status-control"); 2912 command_queue = create_singlethread_workqueue("ftdi-command-engine"); 2913 respond_queue = create_singlethread_workqueue("ftdi-respond-engine"); 2914 result = usb_register(&ftdi_elan_driver); 2915 if (result) 2916 printk(KERN_ERR "usb_register failed. Error number %d\n", 2917 - result); 2918 return result; 2919 } 2920 2921 static void __exit ftdi_elan_exit(void)
··· 2905 { 2906 int result; 2907 printk(KERN_INFO "driver %s built at %s on %s\n", ftdi_elan_driver.name, 2908 + __TIME__, __DATE__); 2909 init_MUTEX(&ftdi_module_lock); 2910 INIT_LIST_HEAD(&ftdi_static_list); 2911 status_queue = create_singlethread_workqueue("ftdi-status-control"); 2912 + if (!status_queue) 2913 + goto err1; 2914 command_queue = create_singlethread_workqueue("ftdi-command-engine"); 2915 + if (!command_queue) 2916 + goto err2; 2917 respond_queue = create_singlethread_workqueue("ftdi-respond-engine"); 2918 + if (!respond_queue) 2919 + goto err3; 2920 result = usb_register(&ftdi_elan_driver); 2921 if (result) 2922 printk(KERN_ERR "usb_register failed. Error number %d\n", 2923 + result); 2924 return result; 2925 + 2926 + err3: 2927 + destroy_workqueue(command_queue); 2928 + err2: 2929 + destroy_workqueue(status_queue); 2930 + err1: 2931 + printk(KERN_ERR "%s couldn't create workqueue\n", ftdi_elan_driver.name); 2932 + return -ENOMEM; 2933 } 2934 2935 static void __exit ftdi_elan_exit(void)