1 From: Hante Meuleman <meuleman@broadcom.com>
2 Date: Wed, 25 Nov 2015 11:32:37 +0100
3 Subject: [PATCH] brcmfmac: Cleanup ssid storage.
5 SSIDs used for connect and p2p got stored, but never used.
7 Reviewed-by: Arend Van Spriel <arend@broadcom.com>
8 Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
9 Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
10 Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
11 Signed-off-by: Arend van Spriel <arend@broadcom.com>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
16 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
17 @@ -959,7 +959,7 @@ brcmf_run_escan(struct brcmf_cfg80211_in
18 params_size += sizeof(u32) * ((request->n_channels + 1) / 2);
20 /* Allocate space for populating ssids in struct */
21 - params_size += sizeof(struct brcmf_ssid) * request->n_ssids;
22 + params_size += sizeof(struct brcmf_ssid_le) * request->n_ssids;
25 params = kzalloc(params_size, GFP_KERNEL);
26 @@ -1291,6 +1291,7 @@ brcmf_cfg80211_join_ibss(struct wiphy *w
32 brcmf_dbg(TRACE, "Enter\n");
33 if (!check_vif_up(ifp->vif))
34 @@ -1368,17 +1369,15 @@ brcmf_cfg80211_join_ibss(struct wiphy *w
35 memset(&join_params, 0, sizeof(struct brcmf_join_params));
38 - profile->ssid.SSID_len = min_t(u32, params->ssid_len, 32);
39 - memcpy(profile->ssid.SSID, params->ssid, profile->ssid.SSID_len);
40 - memcpy(join_params.ssid_le.SSID, params->ssid, profile->ssid.SSID_len);
41 - join_params.ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
42 + ssid_len = min_t(u32, params->ssid_len, IEEE80211_MAX_SSID_LEN);
43 + memcpy(join_params.ssid_le.SSID, params->ssid, ssid_len);
44 + join_params.ssid_le.SSID_len = cpu_to_le32(ssid_len);
45 join_params_size = sizeof(join_params.ssid_le);
49 memcpy(join_params.params_le.bssid, params->bssid, ETH_ALEN);
50 - join_params_size = sizeof(join_params.ssid_le) +
51 - BRCMF_ASSOC_PARAMS_FIXED_SIZE;
52 + join_params_size += BRCMF_ASSOC_PARAMS_FIXED_SIZE;
53 memcpy(profile->bssid, params->bssid, ETH_ALEN);
55 eth_broadcast_addr(join_params.params_le.bssid);
56 @@ -1728,7 +1727,6 @@ brcmf_cfg80211_connect(struct wiphy *wip
58 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
59 struct brcmf_if *ifp = netdev_priv(ndev);
60 - struct brcmf_cfg80211_profile *profile = &ifp->vif->profile;
61 struct ieee80211_channel *chan = sme->channel;
62 struct brcmf_join_params join_params;
63 size_t join_params_size;
64 @@ -1739,6 +1737,7 @@ brcmf_cfg80211_connect(struct wiphy *wip
65 struct brcmf_ext_join_params_le *ext_join_params;
70 brcmf_dbg(TRACE, "Enter\n");
71 if (!check_vif_up(ifp->vif))
72 @@ -1824,15 +1823,6 @@ brcmf_cfg80211_connect(struct wiphy *wip
76 - profile->ssid.SSID_len = min_t(u32, (u32)sizeof(profile->ssid.SSID),
77 - (u32)sme->ssid_len);
78 - memcpy(&profile->ssid.SSID, sme->ssid, profile->ssid.SSID_len);
79 - if (profile->ssid.SSID_len < IEEE80211_MAX_SSID_LEN) {
80 - profile->ssid.SSID[profile->ssid.SSID_len] = 0;
81 - brcmf_dbg(CONN, "SSID \"%s\", len (%d)\n", profile->ssid.SSID,
82 - profile->ssid.SSID_len);
85 /* Join with specific BSSID and cached SSID
86 * If SSID is zero join based on BSSID only
88 @@ -1845,9 +1835,12 @@ brcmf_cfg80211_connect(struct wiphy *wip
92 - ext_join_params->ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
93 - memcpy(&ext_join_params->ssid_le.SSID, sme->ssid,
94 - profile->ssid.SSID_len);
95 + ssid_len = min_t(u32, sme->ssid_len, IEEE80211_MAX_SSID_LEN);
96 + ext_join_params->ssid_le.SSID_len = cpu_to_le32(ssid_len);
97 + memcpy(&ext_join_params->ssid_le.SSID, sme->ssid, ssid_len);
98 + if (ssid_len < IEEE80211_MAX_SSID_LEN)
99 + brcmf_dbg(CONN, "SSID \"%s\", len (%d)\n",
100 + ext_join_params->ssid_le.SSID, ssid_len);
102 /* Set up join scan parameters */
103 ext_join_params->scan_le.scan_type = -1;
104 @@ -1895,8 +1888,8 @@ brcmf_cfg80211_connect(struct wiphy *wip
105 memset(&join_params, 0, sizeof(join_params));
106 join_params_size = sizeof(join_params.ssid_le);
108 - memcpy(&join_params.ssid_le.SSID, sme->ssid, profile->ssid.SSID_len);
109 - join_params.ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
110 + memcpy(&join_params.ssid_le.SSID, sme->ssid, ssid_len);
111 + join_params.ssid_le.SSID_len = cpu_to_le32(ssid_len);
114 memcpy(join_params.params_le.bssid, sme->bssid, ETH_ALEN);
115 @@ -2775,9 +2768,7 @@ CleanUp:
116 static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
117 struct brcmf_if *ifp)
119 - struct brcmf_cfg80211_profile *profile = ndev_to_prof(ifp->ndev);
120 struct brcmf_bss_info_le *bi;
121 - struct brcmf_ssid *ssid;
122 const struct brcmf_tlv *tim;
125 @@ -2789,8 +2780,6 @@ static s32 brcmf_update_bss_info(struct
126 if (brcmf_is_ibssmode(ifp->vif))
129 - ssid = &profile->ssid;
131 *(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX);
132 err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSS_INFO,
133 cfg->extra_buf, WL_EXTRA_BUF_MAX);
134 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
135 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
136 @@ -124,13 +124,11 @@ struct brcmf_cfg80211_security {
138 * struct brcmf_cfg80211_profile - profile information.
140 - * @ssid: ssid of associated/associating ap.
141 * @bssid: bssid of joined/joining ibss.
142 * @sec: security information.
143 * @key: key information
145 struct brcmf_cfg80211_profile {
146 - struct brcmf_ssid ssid;
148 struct brcmf_cfg80211_security sec;
149 struct brcmf_wsec_key key[BRCMF_MAX_DEFAULT_KEYS];
150 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
151 +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
152 @@ -282,14 +282,9 @@ struct brcm_rateset_le {
153 u8 rates[BRCMF_MAXRATES_IN_SET];
158 - unsigned char SSID[32];
161 struct brcmf_ssid_le {
163 - unsigned char SSID[32];
164 + unsigned char SSID[IEEE80211_MAX_SSID_LEN];
167 struct brcmf_scan_params_le {
168 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
169 +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
170 @@ -642,7 +642,6 @@ static s32 brcmf_p2p_escan(struct brcmf_
171 struct brcmf_cfg80211_vif *vif;
172 struct brcmf_p2p_scan_le *p2p_params;
173 struct brcmf_scan_params_le *sparams;
174 - struct brcmf_ssid ssid;
176 memsize += num_chans * sizeof(__le16);
177 memblk = kzalloc(memsize, GFP_KERNEL);
178 @@ -655,16 +654,16 @@ static s32 brcmf_p2p_escan(struct brcmf_
182 + p2p_params = (struct brcmf_p2p_scan_le *)memblk;
183 + sparams = &p2p_params->eparams.params_le;
185 switch (search_state) {
186 case WL_P2P_DISC_ST_SEARCH:
188 * If we in SEARCH STATE, we don't need to set SSID explictly
189 - * because dongle use P2P WILDCARD internally by default
190 + * because dongle use P2P WILDCARD internally by default, use
191 + * null ssid, which it is already due to kzalloc.
193 - /* use null ssid */
195 - memset(ssid.SSID, 0, sizeof(ssid.SSID));
197 case WL_P2P_DISC_ST_SCAN:
199 @@ -673,8 +672,10 @@ static s32 brcmf_p2p_escan(struct brcmf_
200 * P2P WILDCARD because we just do broadcast scan unless
203 - ssid.SSID_len = BRCMF_P2P_WILDCARD_SSID_LEN;
204 - memcpy(ssid.SSID, BRCMF_P2P_WILDCARD_SSID, ssid.SSID_len);
205 + sparams->ssid_le.SSID_len =
206 + cpu_to_le32(BRCMF_P2P_WILDCARD_SSID_LEN);
207 + memcpy(sparams->ssid_le.SSID, BRCMF_P2P_WILDCARD_SSID,
208 + BRCMF_P2P_WILDCARD_SSID_LEN);
211 brcmf_err(" invalid search state %d\n", search_state);
212 @@ -687,11 +688,9 @@ static s32 brcmf_p2p_escan(struct brcmf_
214 * set p2p scan parameters.
216 - p2p_params = (struct brcmf_p2p_scan_le *)memblk;
217 p2p_params->type = 'E';
219 /* determine the scan engine parameters */
220 - sparams = &p2p_params->eparams.params_le;
221 sparams->bss_type = DOT11_BSSTYPE_ANY;
222 if (p2p->cfg->active_scan)
223 sparams->scan_type = 0;
224 @@ -699,9 +698,6 @@ static s32 brcmf_p2p_escan(struct brcmf_
225 sparams->scan_type = 1;
227 eth_broadcast_addr(sparams->bssid);
229 - memcpy(sparams->ssid_le.SSID, ssid.SSID, ssid.SSID_len);
230 - sparams->ssid_le.SSID_len = cpu_to_le32(ssid.SSID_len);
231 sparams->home_time = cpu_to_le32(P2PAPI_SCAN_HOME_TIME_MS);
234 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
235 +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
236 @@ -112,7 +112,6 @@ struct afx_hdl {
237 * @int_addr: P2P interface address.
238 * @bss_idx: informate for P2P bss types.
239 * @listen_timer: timer for @WL_P2P_DISC_ST_LISTEN discover state.
240 - * @ssid: ssid for P2P GO.
241 * @listen_channel: channel for @WL_P2P_DISC_ST_LISTEN discover state.
242 * @remain_on_channel: contains copy of struct used by cfg80211.
243 * @remain_on_channel_cookie: cookie counter for remain on channel cmd
244 @@ -133,7 +132,6 @@ struct brcmf_p2p_info {
245 u8 int_addr[ETH_ALEN];
246 struct p2p_bss bss_idx[P2PAPI_BSSCFG_MAX];
247 struct timer_list listen_timer;
248 - struct brcmf_ssid ssid;
250 struct ieee80211_channel remain_on_channel;
251 u32 remain_on_channel_cookie;