[Midnightbsd-cvs] src: if_ndis.c: Fix a problem with broadcom and marvell wifi using ndis.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Tue Jan 20 14:40:54 EST 2009
Log Message:
-----------
Fix a problem with broadcom and marvell wifi using ndis. Scan results are not stored properly as some do not give a desired buffer length. Make a default. This fixes problems with some macbooks too
Modified Files:
--------------
src/sys/dev/if_ndis:
if_ndis.c (r1.4 -> r1.5)
-------------- next part --------------
Index: if_ndis.c
===================================================================
RCS file: /home/cvs/src/sys/dev/if_ndis/if_ndis.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -L sys/dev/if_ndis/if_ndis.c -L sys/dev/if_ndis/if_ndis.c -u -r1.4 -r1.5
--- sys/dev/if_ndis/if_ndis.c
+++ sys/dev/if_ndis/if_ndis.c
@@ -2544,13 +2544,20 @@
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");
@@ -3317,13 +3324,22 @@
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);
More information about the Midnightbsd-cvs
mailing list