⬢ DragonFlyBSD Kernel Audit
DF-5267 / fix.diff
← back to finding ↓ download raw
--- 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__)