From owner-p4-projects@FreeBSD.ORG Thu Jan 20 01:14:14 2005 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4D5EF16A4D0; Thu, 20 Jan 2005 01:14:14 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2398216A4CE for ; Thu, 20 Jan 2005 01:14:14 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0EF3743D54 for ; Thu, 20 Jan 2005 01:14:14 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j0K1EDWB013404 for ; Thu, 20 Jan 2005 01:14:13 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j0K1EDAX013401 for perforce@freebsd.org; Thu, 20 Jan 2005 01:14:13 GMT (envelope-from sam@freebsd.org) Date: Thu, 20 Jan 2005 01:14:13 GMT Message-Id: <200501200114.j0K1EDAX013401@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 69338 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Jan 2005 01:14:15 -0000 http://perforce.freebsd.org/chv.cgi?CH=69338 Change 69338 by sam@sam_ebb on 2005/01/20 01:13:59 fix refcnt leak in adhoc mode: entries in the neighbor table created due to rx'd frames had an extra reference Affected files ... .. //depot/projects/wifi/sys/net80211/ieee80211_node.c#44 edit Differences ... ==== //depot/projects/wifi/sys/net80211/ieee80211_node.c#44 (text+ko) ==== @@ -1014,7 +1014,6 @@ 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; } @@ -1094,9 +1093,16 @@ 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__);