Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Aug 2005 18:10:43 +0200
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        Andrew Thompson <thompsa@freebsd.org>
Cc:        freebsd-current@freebsd.org, rwatson@FreeBSD.org
Subject:   Re: [PANIC] 6.0BETA2 in l2ping flood
Message-ID:  <20050820161042.GA749@garage.freebsd.pl>
In-Reply-To: <20050819011734.GA4206@heff.fud.org.nz>
References:  <b0ba593005081703416d19fbf4@mail.gmail.com> <20050817231838.GA97927@heff.fud.org.nz> <20050818210128.GD18375@garage.freebsd.pl> <20050819011734.GA4206@heff.fud.org.nz>

next in thread | previous in thread | raw e-mail | index | archive | help

--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=iso-8859-2
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Aug 19, 2005 at 01:17:34PM +1200, Andrew Thompson wrote:
+> On Thu, Aug 18, 2005 at 11:01:29PM +0200, Pawel Jakub Dawidek wrote:
+> > On Thu, Aug 18, 2005 at 11:18:38AM +1200, Andrew Thompson wrote:
+> > +> Interesting... I can get exactly the same panic by doing
+> > +>=20
+> > +>  ifconfig bridge0 create
+> > +>   <'tcpdump -i bridge0' on another terminal>
+> > +>  ifconfig bridge0 up
+> > +>  ifconfig bridge0 destroy
+> >=20
+> > Here, when you destroy bridge0, callout handle is also destroyed,
+> > but on detach, bpf wants to turn off promiscuous mode and call
+> > bridge_init(), because it doesn't have IFF_DRV_RUNNING flag set.
+> >=20
+> > bridge_init() calls callout_reset() on destroyed callout handle.
+> >=20
+>=20
+> Thanks for explaining this, you have saved me a lot of suffering.
+>=20
+> This patch fixes the panic on destroy, is it the correct way to solve
+> the problem? I need to commit something before 6.0.

My explanation wasn't quite right.

callout_reset() is called on a valid handle, but right after that, softc
structure if freed, so when softclock calls your function, softc is
already dead.

Here is a patch which fix it:

	http://people.freebsd.org/~pjd/patches/if_bridge.c.patch

If you don't want to change bridge_softc structure size, you can also
verify in bridge_init() if the given 'sc' is on bridge_list list.

--=20
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd@FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!

--IJpNTDwzlM2Ie8A6
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (FreeBSD)

iD8DBQFDB1YCForvXbEpPzQRAsQBAJ0cRNlI61i1eXMpAO600MPiJ4bragCgn9fA
5rdeujjOGPZvO9Jh3FGdDJs=
=LxDD
-----END PGP SIGNATURE-----

--IJpNTDwzlM2Ie8A6--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050820161042.GA749>