Module Name: src Committed By: martin Date: Thu Mar 8 13:22:26 UTC 2018
Modified Files: src/sys/net [netbsd-8]: if_gif.c if_pppoe.c if_spppsubr.c Log Message: Pull up following revision(s) (requested by knakahara in ticket #613): sys/net/if_pppoe.c: revision 1.130,1.134 sys/net/if_spppsubr.c: revision 1.172,1.175,1.179 sys/net/if_gif.c: revision 1.138,1.139 Mark callouts of pppoe(4) CALLOUT_MPSAFE. Suggested by ozaki-r@n.o. fix non-diagnostic compilation Fix spl leak. ifconfig gif0 create ifconfig gif0 destroy WARNING: SPL NOT LOWERED ON ... Fix breaking character limit. Pointed out by ozaki-r@n.o, thanks. Use m_freem instead of m_free. Otherwise we're leaking the next mbufs in the chain. To generate a diff of this commit: cvs rdiff -u -r1.126.2.8 -r1.126.2.9 src/sys/net/if_gif.c cvs rdiff -u -r1.125.6.5 -r1.125.6.6 src/sys/net/if_pppoe.c cvs rdiff -u -r1.169.6.4 -r1.169.6.5 src/sys/net/if_spppsubr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_gif.c diff -u src/sys/net/if_gif.c:1.126.2.8 src/sys/net/if_gif.c:1.126.2.9 --- src/sys/net/if_gif.c:1.126.2.8 Sun Feb 11 21:17:34 2018 +++ src/sys/net/if_gif.c Thu Mar 8 13:22:26 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_gif.c,v 1.126.2.8 2018/02/11 21:17:34 snj Exp $ */ +/* $NetBSD: if_gif.c,v 1.126.2.9 2018/03/08 13:22:26 martin Exp $ */ /* $KAME: if_gif.c,v 1.76 2001/08/20 02:01:02 kjc Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_gif.c,v 1.126.2.8 2018/02/11 21:17:34 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_gif.c,v 1.126.2.9 2018/03/08 13:22:26 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -458,7 +458,7 @@ gif_output(struct ifnet *ifp, struct mbu IFQ_CLASSIFY(&ifp->if_snd, m, dst->sa_family); if ((error = gif_check_nesting(ifp, m)) != 0) { - m_free(m); + m_freem(m); goto end; } @@ -1126,6 +1126,9 @@ gif_delete_tunnel(struct ifnet *ifp) mutex_exit(&sc->gif_lock); encap_lock_exit(); kmem_free(nvar, sizeof(*nvar)); +#ifndef GIF_MPSAFE + splx(s); +#endif return; } Index: src/sys/net/if_pppoe.c diff -u src/sys/net/if_pppoe.c:1.125.6.5 src/sys/net/if_pppoe.c:1.125.6.6 --- src/sys/net/if_pppoe.c:1.125.6.5 Tue Jan 2 10:20:33 2018 +++ src/sys/net/if_pppoe.c Thu Mar 8 13:22:25 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_pppoe.c,v 1.125.6.5 2018/01/02 10:20:33 snj Exp $ */ +/* $NetBSD: if_pppoe.c,v 1.125.6.6 2018/03/08 13:22:25 martin Exp $ */ /*- * Copyright (c) 2002, 2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.125.6.5 2018/01/02 10:20:33 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.125.6.6 2018/03/08 13:22:25 martin Exp $"); #ifdef _KERNEL_OPT #include "pppoe.h" @@ -315,7 +315,7 @@ pppoe_clone_create(struct if_clone *ifc, /* changed to real address later */ memcpy(&sc->sc_dest, etherbroadcastaddr, sizeof(sc->sc_dest)); - callout_init(&sc->sc_timeout, 0); + callout_init(&sc->sc_timeout, CALLOUT_MPSAFE); sc->sc_sppp.pp_if.if_start = pppoe_start; #ifdef PPPOE_MPSAFE @@ -1795,7 +1795,7 @@ pppoe_transmit(struct ifnet *ifp, struct PPPOE_LOCK(sc, RW_READER); if (sc->sc_state < PPPOE_STATE_SESSION) { PPPOE_UNLOCK(sc); - m_free(m); + m_freem(m); return ENOBUFS; } @@ -1887,13 +1887,13 @@ static void pppoe_enqueue(struct ifqueue *inq, struct mbuf *m) { if (m->m_flags & M_PROMISC) { - m_free(m); + m_freem(m); return; } #ifndef PPPOE_SERVER if (m->m_flags & (M_MCAST | M_BCAST)) { - m_free(m); + m_freem(m); return; } #endif Index: src/sys/net/if_spppsubr.c diff -u src/sys/net/if_spppsubr.c:1.169.6.4 src/sys/net/if_spppsubr.c:1.169.6.5 --- src/sys/net/if_spppsubr.c:1.169.6.4 Tue Jan 16 13:01:10 2018 +++ src/sys/net/if_spppsubr.c Thu Mar 8 13:22:25 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_spppsubr.c,v 1.169.6.4 2018/01/16 13:01:10 martin Exp $ */ +/* $NetBSD: if_spppsubr.c,v 1.169.6.5 2018/03/08 13:22:25 martin Exp $ */ /* * Synchronous PPP/Cisco link level subroutines. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.169.6.4 2018/01/16 13:01:10 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.169.6.5 2018/03/08 13:22:25 martin Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -999,7 +999,7 @@ sppp_attach(struct ifnet *ifp) /* Initialize keepalive handler. */ if (! spppq) { - callout_init(&keepalive_ch, 0); + callout_init(&keepalive_ch, CALLOUT_MPSAFE); callout_reset(&keepalive_ch, hz * LCP_KEEPALIVE_INTERVAL, sppp_keepalive, NULL); } @@ -2205,7 +2205,7 @@ sppp_lcp_init(struct sppp *sp) sp->lcp.max_terminate = 2; sp->lcp.max_configure = 10; sp->lcp.max_failure = 10; - callout_init(&sp->ch[IDX_LCP], 0); + callout_init(&sp->ch[IDX_LCP], CALLOUT_MPSAFE); } static void @@ -2967,9 +2967,9 @@ sppp_ipcp_init(struct sppp *sp) sp->fail_counter[IDX_IPCP] = 0; sp->pp_seq[IDX_IPCP] = 0; sp->pp_rseq[IDX_IPCP] = 0; - callout_init(&sp->ch[IDX_IPCP], 0); + callout_init(&sp->ch[IDX_IPCP], CALLOUT_MPSAFE); - error = workqueue_create(&sp->ipcp.update_addrs_wq, "ipcp_update_addrs", + error = workqueue_create(&sp->ipcp.update_addrs_wq, "ipcp_addr", sppp_update_ip_addrs_work, sp, PRI_SOFTNET, IPL_NET, 0); if (error) panic("%s: update_addrs workqueue_create failed (%d)\n", @@ -3526,7 +3526,7 @@ sppp_ipv6cp_init(struct sppp *sp) sp->fail_counter[IDX_IPV6CP] = 0; sp->pp_seq[IDX_IPV6CP] = 0; sp->pp_rseq[IDX_IPV6CP] = 0; - callout_init(&sp->ch[IDX_IPV6CP], 0); + callout_init(&sp->ch[IDX_IPV6CP], CALLOUT_MPSAFE); } static void @@ -4047,7 +4047,7 @@ sppp_ipv6cp_close(struct sppp *sp) static void sppp_ipv6cp_TO(void *cookie) { - struct sppp *sp = cookie; + struct sppp *sp __diagused = cookie; KASSERT(SPPP_WLOCKED(sp)); } @@ -4464,7 +4464,7 @@ sppp_chap_init(struct sppp *sp) sp->fail_counter[IDX_CHAP] = 0; sp->pp_seq[IDX_CHAP] = 0; sp->pp_rseq[IDX_CHAP] = 0; - callout_init(&sp->ch[IDX_CHAP], 0); + callout_init(&sp->ch[IDX_CHAP], CALLOUT_MPSAFE); } static void @@ -4832,8 +4832,8 @@ sppp_pap_init(struct sppp *sp) sp->fail_counter[IDX_PAP] = 0; sp->pp_seq[IDX_PAP] = 0; sp->pp_rseq[IDX_PAP] = 0; - callout_init(&sp->ch[IDX_PAP], 0); - callout_init(&sp->pap_my_to_ch, 0); + callout_init(&sp->ch[IDX_PAP], CALLOUT_MPSAFE); + callout_init(&sp->pap_my_to_ch, CALLOUT_MPSAFE); } static void