summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2007-06-06 14:21:49 +0000
committerglebius <glebius@FreeBSD.org>2007-06-06 14:21:49 +0000
commit27c6e3f25e2c0ab488171e7704cea4e8b215f483 (patch)
tree46366680d0da6e778155608ed1bfd7139a226b08
parentb9ae4d9a66c04e82694f4437dc5c94fe5bd36195 (diff)
downloadFreeBSD-src-27c6e3f25e2c0ab488171e7704cea4e8b215f483.zip
FreeBSD-src-27c6e3f25e2c0ab488171e7704cea4e8b215f483.tar.gz
Do not leak lock in the case of EEXIST error.
PR: kern/92776 Submitted by: Ed Schouten <Ed.Schouten tunix.nl>
-rw-r--r--sys/netinet/ip_carp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index bff8d29..32b8680 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -1906,8 +1906,12 @@ carp_ioctl(struct ifnet *ifp, u_long cmd, caddr_t addr)
cif = (struct carp_if *)sc->sc_carpdev->if_carp;
TAILQ_FOREACH(vr, &cif->vhif_vrs, sc_list)
if (vr != sc &&
- vr->sc_vhid == carpr.carpr_vhid)
- return EEXIST;
+ vr->sc_vhid == carpr.carpr_vhid) {
+ error = EEXIST;
+ break;
+ }
+ if (error == EEXIST)
+ break;
}
sc->sc_vhid = carpr.carpr_vhid;
IF_LLADDR(sc->sc_ifp)[0] = 0;
OpenPOWER on IntegriCloud