From owner-freebsd-stable Tue Mar 27 23:31:40 2001 Delivered-To: freebsd-stable@freebsd.org Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.157]) by hub.freebsd.org (Postfix) with ESMTP id 8C86737B71A; Tue, 27 Mar 2001 23:31:24 -0800 (PST) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.11.1/8.11.1) id f2S7Ung35554; Wed, 28 Mar 2001 11:30:49 +0400 (MSD) (envelope-from yar) Date: Wed, 28 Mar 2001 11:30:49 +0400 From: Yar Tikhiy To: Archie Cobbs 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> References: <4.2.2.20010327070955.01db1268@192.168.0.12> <200103272040.f2RKeBn44013@arch20m.dellroad.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <200103272040.f2RKeBn44013@arch20m.dellroad.org>; from archie@dellroad.org on Tue, Mar 27, 2001 at 12:40:11PM -0800 Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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-stable" in the body of the message