summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/net80211/ieee80211_node.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c
index 39bf737..94c8ac2 100644
--- a/sys/net80211/ieee80211_node.c
+++ b/sys/net80211/ieee80211_node.c
@@ -1037,7 +1037,6 @@ ieee80211_fakeup_adhoc_node(struct ieee80211_node_table *nt,
ic->ic_newassoc(ic, ni, 1);
/* XXX not right for 802.1x/WPA */
ieee80211_node_authorize(ic, ni);
- ieee80211_ref_node(ni); /* hold reference */
}
return ni;
}
@@ -1117,9 +1116,16 @@ ieee80211_find_txnode(struct ieee80211com *ic, const u_int8_t *macaddr)
if (ni == NULL) {
if (ic->ic_opmode == IEEE80211_M_IBSS ||
- ic->ic_opmode == IEEE80211_M_AHDEMO)
+ ic->ic_opmode == IEEE80211_M_AHDEMO) {
+ /*
+ * In adhoc mode cons up a node for the destination.
+ * Note that we need an additional reference for the
+ * caller to be consistent with _ieee80211_find_node.
+ */
ni = ieee80211_fakeup_adhoc_node(nt, macaddr);
- else {
+ if (ni != NULL)
+ (void) ieee80211_ref_node(ni);
+ } else {
IEEE80211_DPRINTF(ic, IEEE80211_MSG_OUTPUT,
"[%s] no node, discard frame (%s)\n",
ether_sprintf(macaddr), __func__);
OpenPOWER on IntegriCloud