Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4562d224 authored by Luis de Bethencourt's avatar Luis de Bethencourt Committed by Greg Kroah-Hartman
Browse files

staging: wilc1000: arrays can't be NULL



hif_drv->usr_scan_req.net.net_info[i] contains found_net_info structs
which have the following element:
u8 bssid[6];

pstrNetworkInfo, of type network_info, also contains an u8 array named
bssid.

request->ssids is an array of cfg80211_ssid structs. Making ssid:
u8 ssid[IEEE80211_MAX_SSID_LEN];

In these 3 cases the arrays are being checked against NULL, which can't
happen. Removing the checks since they will always be true.

Found with smatch:
drivers/staging/wilc1000/host_interface.c:1234 Handle_RcvdNtwrkInfo() warn: this array is probably non-NULL. 'hif_drv->usr_scan_req.net_info[i].bssid'
drivers/staging/wilc1000/host_interface.c:1235 Handle_RcvdNtwrkInfo() warn: this array is probably non-NULL. 'pstrNetworkInfo->bssid'
drivers/staging/wilc1000/host_interface.c:1253 Handle_RcvdNtwrkInfo() warn: this array is probably non-NULL. 'hif_drv->usr_scan_req.net_info[hif_drv->usr_scan_req.rcvd_ch_cnt].bssid'
drivers/staging/wilc1000/host_interface.c:1254 Handle_RcvdNtwrkInfo() warn: this array is probably non-NULL. 'pstrNetworkInfo->bssid'

Signed-off-by: default avatarLuis de Bethencourt <luisbg@osg.samsung.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a5c84b2f
Loading
Loading
Loading
Loading
+16 −22
Original line number Diff line number Diff line
@@ -1237,8 +1237,6 @@ static s32 Handle_RcvdNtwrkInfo(struct wilc_vif *vif,
		}

		for (i = 0; i < hif_drv->usr_scan_req.rcvd_ch_cnt; i++) {
			if ((hif_drv->usr_scan_req.net_info[i].bssid) &&
			    (pstrNetworkInfo->bssid)) {
			if (memcmp(hif_drv->usr_scan_req.net_info[i].bssid,
				   pstrNetworkInfo->bssid, 6) == 0) {
				if (pstrNetworkInfo->rssi <= hif_drv->usr_scan_req.net_info[i].rssi) {
@@ -1250,14 +1248,11 @@ static s32 Handle_RcvdNtwrkInfo(struct wilc_vif *vif,
				}
			}
		}
		}

		if (bNewNtwrkFound) {
			if (hif_drv->usr_scan_req.rcvd_ch_cnt < MAX_NUM_SCANNED_NETWORKS) {
				hif_drv->usr_scan_req.net_info[hif_drv->usr_scan_req.rcvd_ch_cnt].rssi = pstrNetworkInfo->rssi;

				if (hif_drv->usr_scan_req.net_info[hif_drv->usr_scan_req.rcvd_ch_cnt].bssid &&
				    pstrNetworkInfo->bssid) {
				memcpy(hif_drv->usr_scan_req.net_info[hif_drv->usr_scan_req.rcvd_ch_cnt].bssid,
				       pstrNetworkInfo->bssid, 6);

@@ -1270,7 +1265,6 @@ static s32 Handle_RcvdNtwrkInfo(struct wilc_vif *vif,
								  hif_drv->usr_scan_req.arg,
								  pJoinParams);
			}
			}
		} else {
			pstrNetworkInfo->new_network = false;
			hif_drv->usr_scan_req.scan_result(SCAN_EVENT_NETWORK_FOUND, pstrNetworkInfo,
+1 −2
Original line number Diff line number Diff line
@@ -625,8 +625,7 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)


			for (i = 0; i < request->n_ssids; i++) {
				if (request->ssids[i].ssid &&
				    request->ssids[i].ssid_len != 0) {
				if (request->ssids[i].ssid_len != 0) {
					strHiddenNetwork.net_info[i].ssid = kmalloc(request->ssids[i].ssid_len, GFP_KERNEL);
					memcpy(strHiddenNetwork.net_info[i].ssid, request->ssids[i].ssid, request->ssids[i].ssid_len);
					strHiddenNetwork.net_info[i].ssid_len = request->ssids[i].ssid_len;