--- a/sys/bus/u4b/wlan/if_mtw.c +++ b/sys/bus/u4b/wlan/if_mtw.c @@ -1721,6 +1721,8 @@ if (rt2860_rates[ridx].rate == rate) break; } + if (ridx == MTW_RIDX_MAX) + ridx = MTW_RIDX_CCK1; /* rate not in table: clamp */ ni = ieee80211_ref_node(vap->iv_bss); rn = MTW_NODE(ni); rn->fix_ridx = ridx; @@ -2324,6 +2326,8 @@ break; } } + if (ridx == MTW_RIDX_MAX) + ridx = MTW_RIDX_CCK1; /* rate not in table: clamp */ rn->amrr_ridx = ridx; fail: MTW_UNLOCK(sc); @@ -2394,6 +2398,8 @@ for (ridx = 0; ridx < MTW_RIDX_MAX; ridx++) if (rt2860_rates[ridx].rate == rate) break; + if (ridx == MTW_RIDX_MAX) + ridx = MTW_RIDX_CCK1; /* rate not in table: clamp */ mn->mgt_ridx = ridx; MTW_DPRINTF(sc, MTW_DEBUG_STATE | MTW_DEBUG_RATE, "rate=%d, ctl_ridx=%d\n", rate, ridx); @@ -3349,6 +3355,8 @@ for (ridx = 0; ridx < MTW_RIDX_MAX; ridx++) if (rt2860_rates[ridx].rate == protrate) break; + if (ridx == MTW_RIDX_MAX) + ridx = MTW_RIDX_CCK1; /* rate not in table: clamp */ data->ridx = ridx; mtw_set_tx_desc(sc, data); @@ -3428,6 +3436,8 @@ for (ridx = 0; ridx < MTW_RIDX_MAX; ridx++) if (rt2860_rates[ridx].rate == rate) break; + if (ridx == MTW_RIDX_MAX) + ridx = MTW_RIDX_CCK1; /* rate not in table: clamp */ data->ridx = ridx; #if !defined(__DragonFly__)