summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/iwi/if_iwi.c5
-rw-r--r--sys/dev/iwi/if_iwireg.h3
2 files changed, 7 insertions, 1 deletions
diff --git a/sys/dev/iwi/if_iwi.c b/sys/dev/iwi/if_iwi.c
index e88e99d..2451281 100644
--- a/sys/dev/iwi/if_iwi.c
+++ b/sys/dev/iwi/if_iwi.c
@@ -2935,6 +2935,11 @@ iwi_auth_and_assoc(struct iwi_softc *sc)
IWI_MODE_11G;
rs.type = IWI_RATESET_TYPE_NEGOTIATED;
rs.nrates = ni->ni_rates.rs_nrates;
+ if (rs.nrates > IWI_RATESET_SIZE) {
+ DPRINTF(("Truncating negotiated rate set from %u\n",
+ rs.nrates));
+ rs.nrates = IWI_RATESET_SIZE;
+ }
memcpy(rs.rates, ni->ni_rates.rs_rates, rs.nrates);
DPRINTF(("Setting negotiated rates (%u)\n", rs.nrates));
error = iwi_cmd(sc, IWI_CMD_SET_RATES, &rs, sizeof rs);
diff --git a/sys/dev/iwi/if_iwireg.h b/sys/dev/iwi/if_iwireg.h
index 4816013..05ce168 100644
--- a/sys/dev/iwi/if_iwireg.h
+++ b/sys/dev/iwi/if_iwireg.h
@@ -338,7 +338,8 @@ struct iwi_rateset {
#define IWI_RATESET_TYPE_SUPPORTED 1
uint8_t reserved;
- uint8_t rates[12];
+#define IWI_RATESET_SIZE 12
+ uint8_t rates[IWI_RATESET_SIZE];
} __packed;
/* structure for command IWI_CMD_SET_TX_POWER */
OpenPOWER on IntegriCloud