⬢ DragonFlyBSD Kernel Audit
DF-3751 / fix.diff
← back to finding ↓ download raw
diff -u -r a/sys/dev/netif/ral/rt2860.c b/sys/dev/netif/ral/rt2860.c
--- a/sys/dev/netif/ral/rt2860.c	2026-09-16 01:13:46.570414810 +0000
+++ b/sys/dev/netif/ral/rt2860.c	2026-09-16 01:14:31.985841721 +0000
@@ -102,6 +102,8 @@
 static void	rt2860_updatestats(struct rt2860_softc *);
 static void	rt2860_newassoc(struct ieee80211_node *, int);
 static void	rt2860_node_free(struct ieee80211_node *);
+static struct ieee80211_node *rt2860_node_alloc(struct ieee80211vap *,
+		    const uint8_t [IEEE80211_ADDR_LEN]);
 #ifdef IEEE80211_HT
 static int	rt2860_ampdu_rx_start(struct ieee80211com *,
 		    struct ieee80211_node *, uint8_t);
@@ -350,6 +352,7 @@
 	ic->ic_update_promisc = rt2860_update_promisc;
 	ic->ic_raw_xmit = rt2860_raw_xmit;
 	sc->sc_node_free = ic->ic_node_free;
+	ic->ic_node_alloc = rt2860_node_alloc;
 	ic->ic_node_free = rt2860_node_free;
 	ic->ic_newassoc = rt2860_newassoc;
 	ic->ic_transmit = rt2860_transmit;
@@ -884,6 +887,7 @@
 
 	wcid = IEEE80211_AID(ni->ni_associd);
 	if (isnew && ni->ni_associd != 0) {
+		((struct rt2860_node *)ni)->wcid = wcid;
 		sc->wcid2ni[wcid] = ni;
 
 		/* init WCID table entry */
@@ -894,6 +898,18 @@
 	    isnew, ether_sprintf(ni->ni_macaddr), wcid));
 }
 
+static struct ieee80211_node *
+rt2860_node_alloc(struct ieee80211vap *vap,
+    const uint8_t mac[IEEE80211_ADDR_LEN])
+{
+	struct rt2860_node *rn;
+
+	rn = kmalloc(sizeof(struct rt2860_node), M_80211_NODE,
+	    M_INTWAIT | M_ZERO);
+
+	return rn != NULL ? &rn->ni : NULL;
+}
+
 static void
 rt2860_node_free(struct ieee80211_node *ni)
 {