diff options
author | glebius <glebius@FreeBSD.org> | 2007-06-06 14:21:49 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2007-06-06 14:21:49 +0000 |
commit | 27c6e3f25e2c0ab488171e7704cea4e8b215f483 (patch) | |
tree | 46366680d0da6e778155608ed1bfd7139a226b08 | |
parent | b9ae4d9a66c04e82694f4437dc5c94fe5bd36195 (diff) | |
download | FreeBSD-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.c | 8 |
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; |