1
From: Ben Hutchings <ben@decadent.org.uk>
2
Date: Tue, 25 May 2010 04:20:30 +0100
3
Subject: [PATCH] Staging: rtl8192su: Clean up in case of an error in module initialisation
5
commit 9a3dfa0555130952517b9a9c3918729495aa709a upstream.
7
Currently various resources may be leaked in case of an error.
9
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
10
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
12
drivers/staging/rtl8192su/r8192U_core.c | 43 ++++++++++++++++++++++++++-----
13
1 files changed, 36 insertions(+), 7 deletions(-)
15
diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
16
index 447d647..1b4ff90 100644
17
--- a/drivers/staging/rtl8192su/r8192U_core.c
18
+++ b/drivers/staging/rtl8192su/r8192U_core.c
19
@@ -990,10 +990,11 @@ static int proc_get_stats_rx(char *page, char **start,
23
-void rtl8192_proc_module_init(void)
24
+int rtl8192_proc_module_init(void)
26
RT_TRACE(COMP_INIT, "Initializing proc filesystem");
27
rtl8192_proc=create_proc_entry(RTL819xU_MODULE_NAME, S_IFDIR, init_net.proc_net);
28
+ return rtl8192_proc ? 0 : -ENOMEM;
32
@@ -7473,35 +7474,63 @@ static int __init rtl8192_usb_module_init(void)
33
ret = ieee80211_crypto_init();
35
printk(KERN_ERR "ieee80211_crypto_init() failed %d\n", ret);
40
ret = ieee80211_crypto_tkip_init();
42
printk(KERN_ERR "ieee80211_crypto_tkip_init() failed %d\n",
45
+ goto fail_crypto_tkip;
48
ret = ieee80211_crypto_ccmp_init();
50
printk(KERN_ERR "ieee80211_crypto_ccmp_init() failed %d\n",
53
+ goto fail_crypto_ccmp;
56
ret = ieee80211_crypto_wep_init();
58
printk(KERN_ERR "ieee80211_crypto_wep_init() failed %d\n", ret);
60
+ goto fail_crypto_wep;
63
printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n");
64
printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan\n");
65
RT_TRACE(COMP_INIT, "Initializing module");
66
RT_TRACE(COMP_INIT, "Wireless extensions version %d", WIRELESS_EXT);
67
- rtl8192_proc_module_init();
68
- return usb_register(&rtl8192_usb_driver);
70
+ ret = rtl8192_proc_module_init();
72
+ pr_err("rtl8192_proc_module_init() failed %d\n", ret);
76
+ ret = usb_register(&rtl8192_usb_driver);
78
+ pr_err("usb_register() failed %d\n", ret);
85
+ rtl8192_proc_module_remove();
87
+ ieee80211_crypto_wep_exit();
89
+ ieee80211_crypto_ccmp_exit();
91
+ ieee80211_crypto_tkip_exit();
93
+ ieee80211_crypto_deinit();
95
+#ifdef CONFIG_IEEE80211_DEBUG
96
+ ieee80211_debug_exit();