summaryrefslogtreecommitdiff
path: root/sys/dev/ic/atw.c
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2010-09-20 00:11:38 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2010-09-20 00:11:38 +0000
commit44d3d4bd8a4729216da78a7465817d5f4421156b (patch)
tree911e76871f04e13e93c51a1d64f1e2e1feb2bb56 /sys/dev/ic/atw.c
parentab152d450f88876a1f75c7a20f5aaa86a693fbbc (diff)
After the gcc4 switch the stack protector triggers in atw
when a buffer is overflowed. Fix this and increase the size of the rate buffer (which is still < IEEE80211_RATE_MAXSIZE due to hardware restrictions) while here. ok claudio@ damien@
Diffstat (limited to 'sys/dev/ic/atw.c')
-rw-r--r--sys/dev/ic/atw.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/sys/dev/ic/atw.c b/sys/dev/ic/atw.c
index 2c61da2ade7..fb04ad2809c 100644
--- a/sys/dev/ic/atw.c
+++ b/sys/dev/ic/atw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: atw.c,v 1.73 2010/09/07 16:21:42 deraadt Exp $ */
+/* $OpenBSD: atw.c,v 1.74 2010/09/20 00:11:37 jsg Exp $ */
/* $NetBSD: atw.c,v 1.69 2004/07/23 07:07:55 dyoung Exp $ */
/*-
@@ -2292,15 +2292,20 @@ void
atw_write_sup_rates(struct atw_softc *sc)
{
struct ieee80211com *ic = &sc->sc_ic;
- /* 14 bytes are probably (XXX) reserved in the ADM8211 SRAM for
- * supported rates
+ /*
+ * There is not enough space in the ADM8211 SRAM for the
+ * full IEEE80211_RATE_MAXSIZE
*/
- u_int8_t buf[roundup(1 /* length */ + IEEE80211_RATE_SIZE, 2)];
+ u_int8_t buf[12];
+ u_int8_t nrates;
memset(buf, 0, sizeof(buf));
- buf[0] = ic->ic_bss->ni_rates.rs_nrates;
- memcpy(&buf[1], ic->ic_bss->ni_rates.rs_rates,
- ic->ic_bss->ni_rates.rs_nrates);
+ if (ic->ic_bss->ni_rates.rs_nrates > sizeof(buf) - 1)
+ nrates = sizeof(buf) - 1;
+ else
+ nrates = ic->ic_bss->ni_rates.rs_nrates;
+ buf[0] = nrates;
+ memcpy(&buf[1], ic->ic_bss->ni_rates.rs_rates, nrates);
/* XXX deal with rev BA bug linux driver talks of? */