aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorOleg Bulyzhin <oleg@FreeBSD.org>2013-04-21 21:28:38 +0000
committerOleg Bulyzhin <oleg@FreeBSD.org>2013-04-21 21:28:38 +0000
commit1571132f144846047268a9850a97fd77fae653ad (patch)
tree17df1bf449f71a8ee23de4986566e7195c1c0c7c /sys/netinet
parentf7854e924755b27f4b29d6c2d90ee06a3ef875a6 (diff)
downloadsrc-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.c8
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;