diff options
author | Oleg Bulyzhin <oleg@FreeBSD.org> | 2013-04-21 21:28:38 +0000 |
---|---|---|
committer | Oleg Bulyzhin <oleg@FreeBSD.org> | 2013-04-21 21:28:38 +0000 |
commit | 1571132f144846047268a9850a97fd77fae653ad (patch) | |
tree | 17df1bf449f71a8ee23de4986566e7195c1c0c7c /sys/netinet | |
parent | f7854e924755b27f4b29d6c2d90ee06a3ef875a6 (diff) | |
download | src-1571132f144846047268a9850a97fd77fae653ad.tar.gz src-1571132f144846047268a9850a97fd77fae653ad.zip |
Plug static llentry leak (ipv4 & ipv6 were affected).
PR: kern/172985
MFC after: 1 month
Notes
Notes:
svn path=/head/; revision=249742
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/in.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/netinet/in.c b/sys/netinet/in.c index 3ddb46c248cb..4e73b959fe59 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -1467,10 +1467,14 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add LLE_WLOCK(lle); lle->la_flags |= LLE_DELETED; EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED); - LLE_WUNLOCK(lle); #ifdef DIAGNOSTIC - log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); + log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); #endif + if ((lle->la_flags & + (LLE_STATIC | LLE_IFADDR)) == LLE_STATIC) + llentry_free(lle); + else + LLE_WUNLOCK(lle); } lle = (void *)-1; |