|
@@ -960,7 +960,7 @@ brcmf_run_escan(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp,
|
|
params_size += sizeof(u32) * ((request->n_channels + 1) / 2);
|
|
params_size += sizeof(u32) * ((request->n_channels + 1) / 2);
|
|
|
|
|
|
/* Allocate space for populating ssids in struct */
|
|
/* Allocate space for populating ssids in struct */
|
|
- params_size += sizeof(struct brcmf_ssid) * request->n_ssids;
|
|
|
|
|
|
+ params_size += sizeof(struct brcmf_ssid_le) * request->n_ssids;
|
|
}
|
|
}
|
|
|
|
|
|
params = kzalloc(params_size, GFP_KERNEL);
|
|
params = kzalloc(params_size, GFP_KERNEL);
|
|
@@ -1292,6 +1292,7 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
|
|
s32 wsec = 0;
|
|
s32 wsec = 0;
|
|
s32 bcnprd;
|
|
s32 bcnprd;
|
|
u16 chanspec;
|
|
u16 chanspec;
|
|
|
|
+ u32 ssid_len;
|
|
|
|
|
|
brcmf_dbg(TRACE, "Enter\n");
|
|
brcmf_dbg(TRACE, "Enter\n");
|
|
if (!check_vif_up(ifp->vif))
|
|
if (!check_vif_up(ifp->vif))
|
|
@@ -1369,17 +1370,15 @@ brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
|
|
memset(&join_params, 0, sizeof(struct brcmf_join_params));
|
|
memset(&join_params, 0, sizeof(struct brcmf_join_params));
|
|
|
|
|
|
/* SSID */
|
|
/* SSID */
|
|
- profile->ssid.SSID_len = min_t(u32, params->ssid_len, 32);
|
|
|
|
- memcpy(profile->ssid.SSID, params->ssid, profile->ssid.SSID_len);
|
|
|
|
- memcpy(join_params.ssid_le.SSID, params->ssid, profile->ssid.SSID_len);
|
|
|
|
- join_params.ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
|
|
|
|
|
|
+ ssid_len = min_t(u32, params->ssid_len, IEEE80211_MAX_SSID_LEN);
|
|
|
|
+ memcpy(join_params.ssid_le.SSID, params->ssid, ssid_len);
|
|
|
|
+ join_params.ssid_le.SSID_len = cpu_to_le32(ssid_len);
|
|
join_params_size = sizeof(join_params.ssid_le);
|
|
join_params_size = sizeof(join_params.ssid_le);
|
|
|
|
|
|
/* BSSID */
|
|
/* BSSID */
|
|
if (params->bssid) {
|
|
if (params->bssid) {
|
|
memcpy(join_params.params_le.bssid, params->bssid, ETH_ALEN);
|
|
memcpy(join_params.params_le.bssid, params->bssid, ETH_ALEN);
|
|
- join_params_size = sizeof(join_params.ssid_le) +
|
|
|
|
- BRCMF_ASSOC_PARAMS_FIXED_SIZE;
|
|
|
|
|
|
+ join_params_size += BRCMF_ASSOC_PARAMS_FIXED_SIZE;
|
|
memcpy(profile->bssid, params->bssid, ETH_ALEN);
|
|
memcpy(profile->bssid, params->bssid, ETH_ALEN);
|
|
} else {
|
|
} else {
|
|
eth_broadcast_addr(join_params.params_le.bssid);
|
|
eth_broadcast_addr(join_params.params_le.bssid);
|
|
@@ -1729,7 +1728,6 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
|
|
{
|
|
{
|
|
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
|
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
|
struct brcmf_if *ifp = netdev_priv(ndev);
|
|
struct brcmf_if *ifp = netdev_priv(ndev);
|
|
- struct brcmf_cfg80211_profile *profile = &ifp->vif->profile;
|
|
|
|
struct ieee80211_channel *chan = sme->channel;
|
|
struct ieee80211_channel *chan = sme->channel;
|
|
struct brcmf_join_params join_params;
|
|
struct brcmf_join_params join_params;
|
|
size_t join_params_size;
|
|
size_t join_params_size;
|
|
@@ -1740,6 +1738,7 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
|
|
struct brcmf_ext_join_params_le *ext_join_params;
|
|
struct brcmf_ext_join_params_le *ext_join_params;
|
|
u16 chanspec;
|
|
u16 chanspec;
|
|
s32 err = 0;
|
|
s32 err = 0;
|
|
|
|
+ u32 ssid_len;
|
|
|
|
|
|
brcmf_dbg(TRACE, "Enter\n");
|
|
brcmf_dbg(TRACE, "Enter\n");
|
|
if (!check_vif_up(ifp->vif))
|
|
if (!check_vif_up(ifp->vif))
|
|
@@ -1825,15 +1824,6 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
|
|
goto done;
|
|
goto done;
|
|
}
|
|
}
|
|
|
|
|
|
- profile->ssid.SSID_len = min_t(u32, (u32)sizeof(profile->ssid.SSID),
|
|
|
|
- (u32)sme->ssid_len);
|
|
|
|
- memcpy(&profile->ssid.SSID, sme->ssid, profile->ssid.SSID_len);
|
|
|
|
- if (profile->ssid.SSID_len < IEEE80211_MAX_SSID_LEN) {
|
|
|
|
- profile->ssid.SSID[profile->ssid.SSID_len] = 0;
|
|
|
|
- brcmf_dbg(CONN, "SSID \"%s\", len (%d)\n", profile->ssid.SSID,
|
|
|
|
- profile->ssid.SSID_len);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/* Join with specific BSSID and cached SSID
|
|
/* Join with specific BSSID and cached SSID
|
|
* If SSID is zero join based on BSSID only
|
|
* If SSID is zero join based on BSSID only
|
|
*/
|
|
*/
|
|
@@ -1846,9 +1836,12 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
|
|
err = -ENOMEM;
|
|
err = -ENOMEM;
|
|
goto done;
|
|
goto done;
|
|
}
|
|
}
|
|
- ext_join_params->ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
|
|
|
|
- memcpy(&ext_join_params->ssid_le.SSID, sme->ssid,
|
|
|
|
- profile->ssid.SSID_len);
|
|
|
|
|
|
+ ssid_len = min_t(u32, sme->ssid_len, IEEE80211_MAX_SSID_LEN);
|
|
|
|
+ ext_join_params->ssid_le.SSID_len = cpu_to_le32(ssid_len);
|
|
|
|
+ memcpy(&ext_join_params->ssid_le.SSID, sme->ssid, ssid_len);
|
|
|
|
+ if (ssid_len < IEEE80211_MAX_SSID_LEN)
|
|
|
|
+ brcmf_dbg(CONN, "SSID \"%s\", len (%d)\n",
|
|
|
|
+ ext_join_params->ssid_le.SSID, ssid_len);
|
|
|
|
|
|
/* Set up join scan parameters */
|
|
/* Set up join scan parameters */
|
|
ext_join_params->scan_le.scan_type = -1;
|
|
ext_join_params->scan_le.scan_type = -1;
|
|
@@ -1896,8 +1889,8 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
|
|
memset(&join_params, 0, sizeof(join_params));
|
|
memset(&join_params, 0, sizeof(join_params));
|
|
join_params_size = sizeof(join_params.ssid_le);
|
|
join_params_size = sizeof(join_params.ssid_le);
|
|
|
|
|
|
- memcpy(&join_params.ssid_le.SSID, sme->ssid, profile->ssid.SSID_len);
|
|
|
|
- join_params.ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
|
|
|
|
|
|
+ memcpy(&join_params.ssid_le.SSID, sme->ssid, ssid_len);
|
|
|
|
+ join_params.ssid_le.SSID_len = cpu_to_le32(ssid_len);
|
|
|
|
|
|
if (sme->bssid)
|
|
if (sme->bssid)
|
|
memcpy(join_params.params_le.bssid, sme->bssid, ETH_ALEN);
|
|
memcpy(join_params.params_le.bssid, sme->bssid, ETH_ALEN);
|
|
@@ -2776,9 +2769,7 @@ CleanUp:
|
|
static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
|
|
static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
|
|
struct brcmf_if *ifp)
|
|
struct brcmf_if *ifp)
|
|
{
|
|
{
|
|
- struct brcmf_cfg80211_profile *profile = ndev_to_prof(ifp->ndev);
|
|
|
|
struct brcmf_bss_info_le *bi;
|
|
struct brcmf_bss_info_le *bi;
|
|
- struct brcmf_ssid *ssid;
|
|
|
|
const struct brcmf_tlv *tim;
|
|
const struct brcmf_tlv *tim;
|
|
u16 beacon_interval;
|
|
u16 beacon_interval;
|
|
u8 dtim_period;
|
|
u8 dtim_period;
|
|
@@ -2790,8 +2781,6 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
|
|
if (brcmf_is_ibssmode(ifp->vif))
|
|
if (brcmf_is_ibssmode(ifp->vif))
|
|
return err;
|
|
return err;
|
|
|
|
|
|
- ssid = &profile->ssid;
|
|
|
|
-
|
|
|
|
*(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX);
|
|
*(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX);
|
|
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSS_INFO,
|
|
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSS_INFO,
|
|
cfg->extra_buf, WL_EXTRA_BUF_MAX);
|
|
cfg->extra_buf, WL_EXTRA_BUF_MAX);
|