[Fwd: assigning an address to ng_fec(4) iface causes panic]

Maksim Yevmenkin maksim.yevmenkin at gmail.com
Tue Aug 23 18:33:12 GMT 2005


On 8/23/05, Brooks Davis <brooks at one-eyed-alien.net> wrote:
> On Tue, Aug 23, 2005 at 10:09:06AM -0700, Maksim Yevmenkin wrote:
> > Hello,
> >
> > please try the attached patch.
> >
> > > >Description:
> > >         assigning an address to ng_fec(4) iface causes panic
> > >         during dumping to dumpdev another panic occurs preventing to identify the source of the first panic and having the crash dump
> > >
> > >         ng_iface creation sequence:
> > >         mkpeer fec dummy fec
> > >         msg fec0: add_iface "em0"
> > >         msg fec0: add_iface "em1"
> > >         msg fec0: set_mode_mac
> > >
> 
> > --- ng_fec.c.orig     Mon Aug 22 11:42:51 2005
> > +++ ng_fec.c  Tue Aug 23 10:05:23 2005
> > @@ -544,8 +544,8 @@
> >       struct ifnet            *ifp, *bifp;
> >       struct ng_fec_portlist  *p;
> >
> > -     ifp = arg;
> > -     priv = ifp->if_softc;
> > +     priv = arg;
> > +     ifp = priv->ifp;
> >       b = &priv->fec_bundle;
> >
> >       if (b->fec_ifcnt == 1 || b->fec_ifcnt == 3) {
> 
> This isn't quite sufficent.  You also should change the ng_fec_init(ifp)
> call on line 718 to ng_fec_init(ifp->if_softc).  If that work's I'll
> commit it.

oops... i missed this. thanks for catching this! i do not have
hardware to test it :) i have attached updated path. if anyone could
please test it and confirm that it works then feel free to commit it
(or let me know and i can commit it myself :)

> I've got to say this calling convention is really stupid.  I'm
> really tempted to change ifp->if_init() to take a struct ifnet * even
> though it means an API change and a tree sweep.

sounds good to me.

thanks,
max
-------------- next part --------------
--- ng_fec.c.orig	Mon Aug 22 11:42:51 2005
+++ ng_fec.c	Tue Aug 23 11:28:36 2005
@@ -544,8 +544,8 @@
 	struct ifnet		*ifp, *bifp;
 	struct ng_fec_portlist	*p;
 
-	ifp = arg;
-	priv = ifp->if_softc;
+	priv = arg;
+	ifp = priv->ifp;
 	b = &priv->fec_bundle;
 
 	if (b->fec_ifcnt == 1 || b->fec_ifcnt == 3) {
@@ -715,7 +715,7 @@
 				}
 				ifp->if_drv_flags &= ~(IFF_DRV_OACTIVE);
 				ifp->if_drv_flags |= IFF_DRV_RUNNING;
-				ng_fec_init(ifp);
+				ng_fec_init(priv);
 			}
 			/*
 			 * Bubble down changes in promisc mode to


More information about the freebsd-current mailing list