summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2016-12-20 12:18:44 +0000
committermpi <mpi@openbsd.org>2016-12-20 12:18:44 +0000
commit11c698dd19c58672ebd0483e059400ee29c747b7 (patch)
tree58348e77765e3969fd702c0e6586f510723092db
parentfix an uninitialised variable on altivec assist trap (diff)
downloadwireguard-openbsd-11c698dd19c58672ebd0483e059400ee29c747b7.tar.xz
wireguard-openbsd-11c698dd19c58672ebd0483e059400ee29c747b7.zip
Kill recursive splsoftnet()/splx() dances in ioctl(2) path.
ok rzalamena@
-rw-r--r--sys/net/if_mpe.c8
-rw-r--r--sys/net/if_mpw.c7
2 files changed, 3 insertions, 12 deletions
diff --git a/sys/net/if_mpe.c b/sys/net/if_mpe.c
index d1c0ad054e0..b16f395bcde 100644
--- a/sys/net/if_mpe.c
+++ b/sys/net/if_mpe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_mpe.c,v 1.55 2016/09/21 07:41:49 mpi Exp $ */
+/* $OpenBSD: if_mpe.c,v 1.56 2016/12/20 12:18:44 mpi Exp $ */
/*
* Copyright (c) 2008 Pierre-Yves Ritschard <pyr@spootnik.org>
@@ -270,7 +270,7 @@ mpeioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
struct mpe_softc *ifm;
struct ifreq *ifr;
struct shim_hdr shim;
- int s, error = 0;
+ int error = 0;
ifr = (struct ifreq *)data;
switch (cmd) {
@@ -320,7 +320,6 @@ mpeioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
if (error)
break;
ifm = ifp->if_softc;
- s = splsoftnet();
if (ifm->sc_smpls.smpls_label) {
/* remove old MPLS route */
rt_ifa_del(&ifm->sc_ifa, RTF_MPLS,
@@ -330,7 +329,6 @@ mpeioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
ifm->sc_smpls.smpls_label = shim.shim_label;
error = rt_ifa_add(&ifm->sc_ifa, RTF_MPLS,
smplstosa(&ifm->sc_smpls));
- splx(s);
if (error) {
ifm->sc_smpls.smpls_label = 0;
break;
@@ -341,10 +339,8 @@ mpeioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
ifm = ifp->if_softc;
if (ifr->ifr_rdomainid != ifp->if_rdomain) {
if (ifm->sc_smpls.smpls_label) {
- s = splsoftnet();
rt_ifa_add(&ifm->sc_ifa, RTF_MPLS,
smplstosa(&ifm->sc_smpls));
- splx(s);
}
}
/* return with ENOTTY so that the parent handler finishes */
diff --git a/sys/net/if_mpw.c b/sys/net/if_mpw.c
index a967d83b5aa..a1364d6f3c1 100644
--- a/sys/net/if_mpw.c
+++ b/sys/net/if_mpw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_mpw.c,v 1.15 2016/09/21 07:41:49 mpi Exp $ */
+/* $OpenBSD: if_mpw.c,v 1.16 2016/12/20 12:18:44 mpi Exp $ */
/*
* Copyright (c) 2015 Rafael Zalamena <rzalamena@openbsd.org>
@@ -152,7 +152,6 @@ mpw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
struct sockaddr_in *sin;
struct sockaddr_in *sin_nexthop;
int error = 0;
- int s;
struct ifmpwreq imr;
switch (cmd) {
@@ -183,11 +182,9 @@ mpw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
/* Teardown all configuration if got no nexthop */
sin = (struct sockaddr_in *) &imr.imr_nexthop;
if (sin->sin_addr.s_addr == 0) {
- s = splsoftnet();
if (rt_ifa_del(&sc->sc_ifa, RTF_MPLS,
smplstosa(&sc->sc_smpls)) == 0)
sc->sc_smpls.smpls_label = 0;
- splx(s);
memset(&sc->sc_rshim, 0, sizeof(sc->sc_rshim));
memset(&sc->sc_nexthop, 0, sizeof(sc->sc_nexthop));
@@ -213,7 +210,6 @@ mpw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
htonl(imr.imr_rshim.shim_label << MPLS_LABEL_OFFSET);
if (sc->sc_smpls.smpls_label != imr.imr_lshim.shim_label) {
- s = splsoftnet();
if (sc->sc_smpls.smpls_label)
rt_ifa_del(&sc->sc_ifa, RTF_MPLS,
smplstosa(&sc->sc_smpls));
@@ -221,7 +217,6 @@ mpw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
sc->sc_smpls.smpls_label = imr.imr_lshim.shim_label;
error = rt_ifa_add(&sc->sc_ifa, RTF_MPLS,
smplstosa(&sc->sc_smpls));
- splx(s);
if (error != 0) {
sc->sc_smpls.smpls_label = 0;
break;