aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/if_ndis
diff options
context:
space:
mode:
authorAndrew Thompson <thompsa@FreeBSD.org>2007-12-07 10:37:25 +0000
committerAndrew Thompson <thompsa@FreeBSD.org>2007-12-07 10:37:25 +0000
commit30d9c7698a5d641977c1ec25b91b567fccf965ec (patch)
treea23041cdb9ecea263977500c309121c53aa8d62a /sys/dev/if_ndis
parentca16b7ddc846f004b3b301de522140fd9769543a (diff)
Notes
Diffstat (limited to 'sys/dev/if_ndis')
-rw-r--r--sys/dev/if_ndis/if_ndis.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c
index 4752793e49b0..c5bde2e768ff 100644
--- a/sys/dev/if_ndis/if_ndis.c
+++ b/sys/dev/if_ndis/if_ndis.c
@@ -2514,13 +2514,20 @@ ndis_get_assoc(sc, assoc)
return(ENOENT);
}
- len = 4;
- error = ndis_get_info(sc, OID_802_11_BSSID_LIST, NULL, &len);
- if (error != ENOSPC)
- len = 65536;
+ len = sizeof(uint32_t) + (sizeof(ndis_wlan_bssid_ex) * 16);
+ bl = malloc(len, M_TEMP, M_NOWAIT | M_ZERO);
+ if (bl == NULL)
+ return (ENOMEM);
- bl = malloc(len, M_TEMP, M_NOWAIT|M_ZERO);
error = ndis_get_info(sc, OID_802_11_BSSID_LIST, bl, &len);
+ if (error == ENOSPC) {
+ free(bl, M_TEMP);
+ bl = malloc(len, M_TEMP, M_NOWAIT | M_ZERO);
+ if (bl == NULL)
+ return (ENOMEM);
+
+ error = ndis_get_info(sc, OID_802_11_BSSID_LIST, bl, &len);
+ }
if (error) {
free(bl, M_TEMP);
device_printf(sc->ndis_dev, "bssid_list failed\n");
@@ -3279,13 +3286,22 @@ ndis_scan_results(struct ndis_softc *sc)
uint8_t rates[2+IEEE80211_RATE_MAXSIZE];
uint8_t *frm, *efrm;
- len = 0;
noise = -96;
- error = ndis_get_info(sc, OID_802_11_BSSID_LIST, NULL, &len);
- if (error != ENOSPC)
- len = 65536;
+
+ len = sizeof(uint32_t) + (sizeof(ndis_wlan_bssid_ex) * 16);
bl = malloc(len, M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (bl == NULL)
+ return;
+
error = ndis_get_info(sc, OID_802_11_BSSID_LIST, bl, &len);
+ if (error == ENOSPC) {
+ free(bl, M_DEVBUF);
+ bl = malloc(len, M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (bl == NULL)
+ return;
+
+ error = ndis_get_info(sc, OID_802_11_BSSID_LIST, bl, &len);
+ }
if (error) {
DPRINTF(("%s: failed to read\n", __func__));
free(bl, M_DEVBUF);