Skip site navigation (1)Skip section navigation (2)
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-stable" 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>