Commit a010a337 authored by Herton Ronaldo Krzesinski's avatar Herton Ronaldo Krzesinski Committed by Greg Kroah-Hartman

Staging: rtl8187se/rtl8192e/rtl8192su: allow module unload

On rtl81* additions, they had its wireless stack made builtin instead of
separated modules. But try_module_get/module_put in stack were kept,
they are uneeded with the stack builtin and makes rtl81* modules
impossible to remove on a system with an rtl81* card. request_module
calls are also uneeded with stack builtin, so remove them too.
Signed-off-by: default avatarHerton Ronaldo Krzesinski <herton@mandriva.com.br>
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 557c0288
...@@ -53,10 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee, ...@@ -53,10 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
list_del(ptr); list_del(ptr);
if (entry->ops) { if (entry->ops)
entry->ops->deinit(entry->priv); entry->ops->deinit(entry->priv);
module_put(entry->ops->owner);
}
kfree(entry); kfree(entry);
} }
} }
......
...@@ -189,10 +189,8 @@ void free_ieee80211(struct net_device *dev) ...@@ -189,10 +189,8 @@ void free_ieee80211(struct net_device *dev)
for (i = 0; i < WEP_KEYS; i++) { for (i = 0; i < WEP_KEYS; i++) {
struct ieee80211_crypt_data *crypt = ieee->crypt[i]; struct ieee80211_crypt_data *crypt = ieee->crypt[i];
if (crypt) { if (crypt) {
if (crypt->ops) { if (crypt->ops)
crypt->ops->deinit(crypt->priv); crypt->ops->deinit(crypt->priv);
module_put(crypt->ops->owner);
}
kfree(crypt); kfree(crypt);
ieee->crypt[i] = NULL; ieee->crypt[i] = NULL;
} }
......
...@@ -2839,16 +2839,12 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ...@@ -2839,16 +2839,12 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
goto skip_host_crypt; goto skip_host_crypt;
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0)
request_module("ieee80211_crypt_wep");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
} else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0)
request_module("ieee80211_crypt_tkip");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
} else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0)
request_module("ieee80211_crypt_ccmp");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
}
if (ops == NULL) { if (ops == NULL) {
printk("unknown crypto alg '%s'\n", param->u.crypt.alg); printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG; param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
...@@ -2869,7 +2865,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ...@@ -2869,7 +2865,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
} }
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
new_crypt->ops = ops; new_crypt->ops = ops;
if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) if (new_crypt->ops)
new_crypt->priv = new_crypt->priv =
new_crypt->ops->init(param->u.crypt.idx); new_crypt->ops->init(param->u.crypt.idx);
......
...@@ -331,12 +331,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, ...@@ -331,12 +331,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
return -ENOMEM; return -ENOMEM;
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
new_crypt->ops = ieee80211_get_crypto_ops("WEP"); new_crypt->ops = ieee80211_get_crypto_ops("WEP");
if (!new_crypt->ops) { if (!new_crypt->ops)
request_module("ieee80211_crypt_wep");
new_crypt->ops = ieee80211_get_crypto_ops("WEP"); new_crypt->ops = ieee80211_get_crypto_ops("WEP");
}
if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) if (new_crypt->ops)
new_crypt->priv = new_crypt->ops->init(key); new_crypt->priv = new_crypt->ops->init(key);
if (!new_crypt->ops || !new_crypt->priv) { if (!new_crypt->ops || !new_crypt->priv) {
...@@ -483,7 +481,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -483,7 +481,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
int i, idx, ret = 0; int i, idx, ret = 0;
int group_key = 0; int group_key = 0;
const char *alg, *module; const char *alg;
struct ieee80211_crypto_ops *ops; struct ieee80211_crypto_ops *ops;
struct ieee80211_crypt_data **crypt; struct ieee80211_crypt_data **crypt;
...@@ -539,15 +537,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -539,15 +537,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
switch (ext->alg) { switch (ext->alg) {
case IW_ENCODE_ALG_WEP: case IW_ENCODE_ALG_WEP:
alg = "WEP"; alg = "WEP";
module = "ieee80211_crypt_wep";
break; break;
case IW_ENCODE_ALG_TKIP: case IW_ENCODE_ALG_TKIP:
alg = "TKIP"; alg = "TKIP";
module = "ieee80211_crypt_tkip";
break; break;
case IW_ENCODE_ALG_CCMP: case IW_ENCODE_ALG_CCMP:
alg = "CCMP"; alg = "CCMP";
module = "ieee80211_crypt_ccmp";
break; break;
default: default:
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
...@@ -558,10 +553,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -558,10 +553,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
// printk("8-09-08-9=====>%s, alg name:%s\n",__func__, alg); // printk("8-09-08-9=====>%s, alg name:%s\n",__func__, alg);
ops = ieee80211_get_crypto_ops(alg); ops = ieee80211_get_crypto_ops(alg);
if (ops == NULL) { if (ops == NULL)
request_module(module);
ops = ieee80211_get_crypto_ops(alg); ops = ieee80211_get_crypto_ops(alg);
}
if (ops == NULL) { if (ops == NULL) {
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
dev->name, ext->alg); dev->name, ext->alg);
...@@ -581,7 +574,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -581,7 +574,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
goto done; goto done;
} }
new_crypt->ops = ops; new_crypt->ops = ops;
if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) if (new_crypt->ops)
new_crypt->priv = new_crypt->ops->init(idx); new_crypt->priv = new_crypt->ops->init(idx);
if (new_crypt->priv == NULL) { if (new_crypt->priv == NULL) {
kfree(new_crypt); kfree(new_crypt);
......
...@@ -53,14 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee, ...@@ -53,14 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
list_del(ptr); list_del(ptr);
if (entry->ops) { if (entry->ops)
entry->ops->deinit(entry->priv); entry->ops->deinit(entry->priv);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
module_put(entry->ops->owner);
#else
__MOD_DEC_USE_COUNT(entry->ops->owner);
#endif
}
kfree(entry); kfree(entry);
} }
} }
......
...@@ -242,14 +242,8 @@ void free_ieee80211(struct net_device *dev) ...@@ -242,14 +242,8 @@ void free_ieee80211(struct net_device *dev)
for (i = 0; i < WEP_KEYS; i++) { for (i = 0; i < WEP_KEYS; i++) {
struct ieee80211_crypt_data *crypt = ieee->crypt[i]; struct ieee80211_crypt_data *crypt = ieee->crypt[i];
if (crypt) { if (crypt) {
if (crypt->ops) { if (crypt->ops)
crypt->ops->deinit(crypt->priv); crypt->ops->deinit(crypt->priv);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
module_put(crypt->ops->owner);
#else
__MOD_DEC_USE_COUNT(crypt->ops->owner);
#endif
}
kfree(crypt); kfree(crypt);
ieee->crypt[i] = NULL; ieee->crypt[i] = NULL;
} }
......
...@@ -3284,17 +3284,14 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ...@@ -3284,17 +3284,14 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
goto skip_host_crypt; goto skip_host_crypt;
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0)
request_module("ieee80211_crypt_wep");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
//set WEP40 first, it will be modified according to WEP104 or WEP40 at other place /* set WEP40 first, it will be modified according to WEP104 or
} else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { * WEP40 at other place */
request_module("ieee80211_crypt_tkip"); else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0)
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
} else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0)
request_module("ieee80211_crypt_ccmp");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
}
if (ops == NULL) { if (ops == NULL) {
printk("unknown crypto alg '%s'\n", param->u.crypt.alg); printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG; param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
...@@ -3315,11 +3312,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ...@@ -3315,11 +3312,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
} }
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
new_crypt->ops = ops; new_crypt->ops = ops;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) if (new_crypt->ops)
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
#else
if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner))
#endif
new_crypt->priv = new_crypt->priv =
new_crypt->ops->init(param->u.crypt.idx); new_crypt->ops->init(param->u.crypt.idx);
......
...@@ -482,15 +482,9 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, ...@@ -482,15 +482,9 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
return -ENOMEM; return -ENOMEM;
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
new_crypt->ops = ieee80211_get_crypto_ops("WEP"); new_crypt->ops = ieee80211_get_crypto_ops("WEP");
if (!new_crypt->ops) { if (!new_crypt->ops)
request_module("ieee80211_crypt_wep");
new_crypt->ops = ieee80211_get_crypto_ops("WEP"); new_crypt->ops = ieee80211_get_crypto_ops("WEP");
} if (new_crypt->ops)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
#else
if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner))
#endif
new_crypt->priv = new_crypt->ops->init(key); new_crypt->priv = new_crypt->ops->init(key);
if (!new_crypt->ops || !new_crypt->priv) { if (!new_crypt->ops || !new_crypt->priv) {
...@@ -644,7 +638,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -644,7 +638,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
int i, idx; int i, idx;
int group_key = 0; int group_key = 0;
const char *alg, *module; const char *alg;
struct ieee80211_crypto_ops *ops; struct ieee80211_crypto_ops *ops;
struct ieee80211_crypt_data **crypt; struct ieee80211_crypt_data **crypt;
...@@ -711,15 +705,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -711,15 +705,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
switch (ext->alg) { switch (ext->alg) {
case IW_ENCODE_ALG_WEP: case IW_ENCODE_ALG_WEP:
alg = "WEP"; alg = "WEP";
module = "ieee80211_crypt_wep";
break; break;
case IW_ENCODE_ALG_TKIP: case IW_ENCODE_ALG_TKIP:
alg = "TKIP"; alg = "TKIP";
module = "ieee80211_crypt_tkip";
break; break;
case IW_ENCODE_ALG_CCMP: case IW_ENCODE_ALG_CCMP:
alg = "CCMP"; alg = "CCMP";
module = "ieee80211_crypt_ccmp";
break; break;
default: default:
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
...@@ -730,10 +721,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -730,10 +721,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
printk("alg name:%s\n",alg); printk("alg name:%s\n",alg);
ops = ieee80211_get_crypto_ops(alg); ops = ieee80211_get_crypto_ops(alg);
if (ops == NULL) { if (ops == NULL)
request_module(module);
ops = ieee80211_get_crypto_ops(alg); ops = ieee80211_get_crypto_ops(alg);
}
if (ops == NULL) { if (ops == NULL) {
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
dev->name, ext->alg); dev->name, ext->alg);
...@@ -758,7 +747,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -758,7 +747,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
goto done; goto done;
} }
new_crypt->ops = ops; new_crypt->ops = ops;
if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) if (new_crypt->ops)
new_crypt->priv = new_crypt->ops->init(idx); new_crypt->priv = new_crypt->ops->init(idx);
if (new_crypt->priv == NULL) { if (new_crypt->priv == NULL) {
kfree(new_crypt); kfree(new_crypt);
......
...@@ -53,10 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee, ...@@ -53,10 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
list_del(ptr); list_del(ptr);
if (entry->ops) { if (entry->ops)
entry->ops->deinit(entry->priv); entry->ops->deinit(entry->priv);
module_put(entry->ops->owner);
}
kfree(entry); kfree(entry);
} }
} }
......
...@@ -216,10 +216,8 @@ void free_ieee80211(struct net_device *dev) ...@@ -216,10 +216,8 @@ void free_ieee80211(struct net_device *dev)
for (i = 0; i < WEP_KEYS; i++) { for (i = 0; i < WEP_KEYS; i++) {
struct ieee80211_crypt_data *crypt = ieee->crypt[i]; struct ieee80211_crypt_data *crypt = ieee->crypt[i];
if (crypt) { if (crypt) {
if (crypt->ops) { if (crypt->ops)
crypt->ops->deinit(crypt->priv); crypt->ops->deinit(crypt->priv);
module_put(crypt->ops->owner);
}
kfree(crypt); kfree(crypt);
ieee->crypt[i] = NULL; ieee->crypt[i] = NULL;
} }
......
...@@ -3026,17 +3026,14 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ...@@ -3026,17 +3026,14 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
goto skip_host_crypt; goto skip_host_crypt;
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0)
request_module("ieee80211_crypt_wep");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
//set WEP40 first, it will be modified according to WEP104 or WEP40 at other place /* set WEP40 first, it will be modified according to WEP104 or
} else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { * WEP40 at other place */
request_module("ieee80211_crypt_tkip"); else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0)
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
} else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0)
request_module("ieee80211_crypt_ccmp");
ops = ieee80211_get_crypto_ops(param->u.crypt.alg); ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
}
if (ops == NULL) { if (ops == NULL) {
printk("unknown crypto alg '%s'\n", param->u.crypt.alg); printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG; param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
...@@ -3058,7 +3055,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ...@@ -3058,7 +3055,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
new_crypt->ops = ops; new_crypt->ops = ops;
if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) if (new_crypt->ops)
new_crypt->priv = new_crypt->priv =
new_crypt->ops->init(param->u.crypt.idx); new_crypt->ops->init(param->u.crypt.idx);
......
...@@ -358,11 +358,9 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, ...@@ -358,11 +358,9 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
return -ENOMEM; return -ENOMEM;
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
new_crypt->ops = ieee80211_get_crypto_ops("WEP"); new_crypt->ops = ieee80211_get_crypto_ops("WEP");
if (!new_crypt->ops) { if (!new_crypt->ops)
request_module("ieee80211_crypt_wep");
new_crypt->ops = ieee80211_get_crypto_ops("WEP"); new_crypt->ops = ieee80211_get_crypto_ops("WEP");
} if (new_crypt->ops)
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
new_crypt->priv = new_crypt->ops->init(key); new_crypt->priv = new_crypt->ops->init(key);
if (!new_crypt->ops || !new_crypt->priv) { if (!new_crypt->ops || !new_crypt->priv) {
...@@ -507,7 +505,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -507,7 +505,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
int i, idx; int i, idx;
int group_key = 0; int group_key = 0;
const char *alg, *module; const char *alg;
struct ieee80211_crypto_ops *ops; struct ieee80211_crypto_ops *ops;
struct ieee80211_crypt_data **crypt; struct ieee80211_crypt_data **crypt;
...@@ -570,15 +568,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -570,15 +568,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
switch (ext->alg) { switch (ext->alg) {
case IW_ENCODE_ALG_WEP: case IW_ENCODE_ALG_WEP:
alg = "WEP"; alg = "WEP";
module = "ieee80211_crypt_wep";
break; break;
case IW_ENCODE_ALG_TKIP: case IW_ENCODE_ALG_TKIP:
alg = "TKIP"; alg = "TKIP";
module = "ieee80211_crypt_tkip";
break; break;
case IW_ENCODE_ALG_CCMP: case IW_ENCODE_ALG_CCMP:
alg = "CCMP"; alg = "CCMP";
module = "ieee80211_crypt_ccmp";
break; break;
default: default:
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
...@@ -589,10 +584,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -589,10 +584,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
printk("alg name:%s\n",alg); printk("alg name:%s\n",alg);
ops = ieee80211_get_crypto_ops(alg); ops = ieee80211_get_crypto_ops(alg);
if (ops == NULL) { if (ops == NULL)
request_module("%s", module);
ops = ieee80211_get_crypto_ops(alg); ops = ieee80211_get_crypto_ops(alg);
}
if (ops == NULL) { if (ops == NULL) {
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
dev->name, ext->alg); dev->name, ext->alg);
...@@ -612,7 +605,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, ...@@ -612,7 +605,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
goto done; goto done;
} }
new_crypt->ops = ops; new_crypt->ops = ops;
if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) if (new_crypt->ops)
new_crypt->priv = new_crypt->ops->init(idx); new_crypt->priv = new_crypt->ops->init(idx);
if (new_crypt->priv == NULL) { if (new_crypt->priv == NULL) {
kfree(new_crypt); kfree(new_crypt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment