diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c index 032279526d17..60c97f764a49 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c @@ -378,13 +378,12 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, if (param_len != (u32)((u8 *) param->u.crypt.key - (u8 *)param) + param->u.crypt.key_len) return -EINVAL; - if (is_broadcast_ether_addr(param->sta_addr)) { - if (param->u.crypt.idx >= WEP_KEYS) { - /* for large key indices, set the default (0) */ - param->u.crypt.idx = 0; - } - } else { + if (!is_broadcast_ether_addr(param->sta_addr)) return -EINVAL; + + if (param->u.crypt.idx >= WEP_KEYS) { + /* for large key indices, set the default (0) */ + param->u.crypt.idx = 0; } if (strcmp(param->u.crypt.alg, "WEP") == 0) { netdev_info(dev, "r8712u: %s: crypt.alg = WEP\n", __func__); @@ -396,23 +395,19 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, wep_key_len = param->u.crypt.key_len; if (wep_key_idx >= WEP_KEYS) wep_key_idx = 0; - if (wep_key_len > 0) { - wep_key_len = wep_key_len <= 5 ? 5 : 13; - pwep = kzalloc(sizeof(*pwep), GFP_ATOMIC); - if (!pwep) - return -ENOMEM; - pwep->KeyLength = wep_key_len; - pwep->Length = wep_key_len + - FIELD_OFFSET(struct NDIS_802_11_WEP, - KeyMaterial); - if (wep_key_len == 13) { - padapter->securitypriv.PrivacyAlgrthm = - _WEP104_; - padapter->securitypriv.XGrpPrivacy = - _WEP104_; - } - } else { + if (wep_key_len <= 0) return -EINVAL; + + wep_key_len = wep_key_len <= 5 ? 5 : 13; + pwep = kzalloc(sizeof(*pwep), GFP_ATOMIC); + if (!pwep) + return -ENOMEM; + pwep->KeyLength = wep_key_len; + pwep->Length = wep_key_len + + FIELD_OFFSET(struct NDIS_802_11_WEP, KeyMaterial); + if (wep_key_len == 13) { + padapter->securitypriv.PrivacyAlgrthm = _WEP104_; + padapter->securitypriv.XGrpPrivacy = _WEP104_; } pwep->KeyIndex = wep_key_idx; pwep->KeyIndex |= 0x80000000;