in_rtalloc1(9) returns a locked route, so make sure that we use

RTFREE_LOCKED() here.  This macro makes sure the reference count
on the route is being managed properly.  This elimates another
case which results in the following message being printed to the
console:

rtfree: 0xc841ee88 has 1 refs

Reviewed by:	bz
MFC after:	2 weeks
This commit is contained in:
Christian S.J. Peron 2008-12-06 19:09:38 +00:00
parent 8f6a8ed553
commit 4e57bc3338
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=185713

View File

@ -924,12 +924,12 @@ in_arpinput(struct mbuf *m)
* over who claims what Ether address.
*/
if (rt->rt_ifp == ifp) {
rtfree(rt);
RTFREE_LOCKED(rt);
goto drop;
}
(void)memcpy(ar_tha(ah), ar_sha(ah), ah->ar_hln);
(void)memcpy(ar_sha(ah), enaddr, ah->ar_hln);
rtfree(rt);
RTFREE_LOCKED(rt);
/*
* Also check that the node which sent the ARP packet
@ -948,10 +948,10 @@ in_arpinput(struct mbuf *m)
" from %s via %s, expecting %s\n",
inet_ntoa(isaddr), ifp->if_xname,
rt->rt_ifp->if_xname);
rtfree(rt);
RTFREE_LOCKED(rt);
goto drop;
}
rtfree(rt);
RTFREE_LOCKED(rt);
#ifdef DEBUG_PROXY
printf("arp: proxying for %s\n",