diff options
author | bz <bz@FreeBSD.org> | 2010-09-04 16:06:01 +0000 |
---|---|---|
committer | bz <bz@FreeBSD.org> | 2010-09-04 16:06:01 +0000 |
commit | ef87b56ba430fb708d0ff06166a0687ab73bb9b4 (patch) | |
tree | 656830d5b0bf9db279df96b9f4e03b7398f62467 /sys/netinet/in.c | |
parent | ddc5322166bee8f5c2b317bef177aa7f6d6e3d26 (diff) | |
download | FreeBSD-src-ef87b56ba430fb708d0ff06166a0687ab73bb9b4.zip FreeBSD-src-ef87b56ba430fb708d0ff06166a0687ab73bb9b4.tar.gz |
In case of RADIX_MPATH do not leak the IN_IFADDR read lock on
early return.
MFC after: 3 days
Diffstat (limited to 'sys/netinet/in.c')
-rw-r--r-- | sys/netinet/in.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/netinet/in.c b/sys/netinet/in.c index b5873d8..aded2c6 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -1039,9 +1039,10 @@ in_addprefix(struct in_ifaddr *target, int flags) if (ia->ia_flags & IFA_ROUTE) { #ifdef RADIX_MPATH if (ia->ia_addr.sin_addr.s_addr == - target->ia_addr.sin_addr.s_addr) + target->ia_addr.sin_addr.s_addr) { + IN_IFADDR_RUNLOCK(); return (EEXIST); - else + } else break; #endif if (V_sameprefixcarponly && |