Date: Wed, 28 Mar 2001 11:30:49 +0400 From: Yar Tikhiy <yar@comp.chem.msu.su> To: Archie Cobbs <archie@dellroad.org> Cc: freebsd-stable@FreeBSD.ORG, freebsd-net@FreeBSD.ORG Subject: Re: Kernel Panic on 4.3-RC #0 using PPPoE Message-ID: <20010328113049.B28919@comp.chem.msu.su> In-Reply-To: <200103272040.f2RKeBn44013@arch20m.dellroad.org>; from archie@dellroad.org on Tue, Mar 27, 2001 at 12:40:11PM -0800 References: <4.2.2.20010327070955.01db1268@192.168.0.12> <200103272040.f2RKeBn44013@arch20m.dellroad.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, On Tue, Mar 27, 2001 at 12:40:11PM -0800, Archie Cobbs wrote: > Mike Tancsa writes: > > >Not sure why this hasn't been detected before though. Below is > > >a possible patch. > > > > It has been at http://www.freebsd.org/cgi/query-pr.cgi?pr=25478 and > > discussed a few times in freebsd-net. > > Here is the better (?) patch. I'd like to commit this if nobody > objects.. Please take a careful look at the frames 6 through 9 of the stack trace in PR#25478, so you may notice that your patch happens to do nothing about the broblem. You are going to add a check for IFF_UP to ether_output_frame() while that function is just a bottom half of ether_output(), which does do the check at its very beginning. The real problem is that ethernet card drivers rely on ether_output() making sure they are up before calling their if_output()s. AFAIK the vlan driver is the only piece of code where the standard ether_output()->if_output() order is bypassed, and an if_output() routine of an ethernet card is called directly. Therefore, the IFF_UP check should be in the vlan code, and I'm going to commit a corresponding fix (PR: kern/22179). Any objections? > Luigi: would you mind reviewing this for possible BRIDGE problems? > > -Archie > > __________________________________________________________________________ > Archie Cobbs * Packet Design * http://www.packetdesign.com > > Index: if_ethersubr.c > =================================================================== > RCS file: /home/ncvs/src/sys/net/if_ethersubr.c,v > retrieving revision 1.70.2.15 > diff -u -r1.70.2.15 if_ethersubr.c > --- if_ethersubr.c 2001/03/13 22:00:32 1.70.2.15 > +++ if_ethersubr.c 2001/03/27 20:39:38 > @@ -366,6 +366,11 @@ > { > int s, error = 0; > > + if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING)) { > + m_freem(m); > + return (ENETDOWN); > + } > + > #ifdef BRIDGE > if (do_bridge && BDG_USED(ifp) ) { > struct ether_header *eh; /* a ptr suffices */ SY, Yar To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010328113049.B28919>