mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 22:54:01 +00:00
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: Herton Ronaldo Krzesinski <herton@mandriva.com.br> Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
557c0288b5
commit
a010a33752
12 changed files with 37 additions and 96 deletions
|
@ -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)
|
||||||
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,
|
||||||
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,
|
||||||
}
|
}
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
// 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,
|
||||||
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,
|
||||||
|
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
}
|
}
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Reference in a new issue