How to hard lock FreeBSD-5.1 generic with sl

Chris McKenzie cjmckenzie at ucdavis.edu
Wed Dec 31 10:27:42 PST 2003


I will gladly do so.  HOWEVER, it also appears that sl itself is not
working.  I get a
ifconfig: SIOCIFCREATE: Invalid argument
if I just try
#ifconfig sl0 create.
If I do a
#slattach -s 115200 -l /dev/cuaa1
Then a ifconfig sl0 create . . . I get the same problem.  It is
_also_ worth noting that SL(4) is out of date and does not pertain to the
5.x series.  This problem persists independent of how I have
configured my kernel (since I have tried a few different
configurations) and the system it is running on. However,
I will definitely do the patch and see what happens from there.

On Wed, 31 Dec 2003, Peter Pentchev wrote:

> On Tue, Dec 30, 2003 at 04:28:00PM +0200, Peter Pentchev wrote:
> > On Tue, Dec 30, 2003 at 06:12:53AM -0800, Kris Kennaway wrote:
> > > On Mon, Dec 29, 2003 at 06:02:45PM -0800, Chris McKenzie wrote:
> > > > On three machines (PII 450, P3 450, Pentium laptop 200) with FreeBSD-5.1
> > > > generic (and specific builds) I am able to completely hard lock the system
> > > > by doing the following
> > > >
> > > > # ifconfig ppp0 create
> > > > # ifconfig sl0 create
> > > >
> > > > Heh . . . that shouldn't happen.
> > >
> > > Does the problem persist with 5.2?
> >
> > I just tested in on a 5.2-CURRENT as of today, and yes, the system
> > locked up solid - no ddb, no anything.  I'll try to do some more testing
> > as time permits.
>
> [cc'd to -net for a pre-commit review / discussion]
>
> OK, I think I've found the problem.  The if_clone_attach() routine in
> src/sys/net/if.c blindly adds the new cloned interface to the if_cloners
> list without checking if it is already on the list.  This,
> understandably, leads to problems when trying to attach an interface
> that already exists - such as a ppp interface.
>
> The if_ppp code adds itself to the if_cloners list at the module
> loading stage.  Thus, the very first invocation of ifconfig ppp0 create
> adds the ppp_cloner structure to the list *again* - and creates a loop
> on the list.  Any attempts to traverse the list later lead to lock-ups.
>
> Attached is a patch that does two things: first, only adds the interface
> to the list if it is not already there (the second and third chunks, at
> lines 812 and 827 of if.c), and second, adds a if_check_cloners_loop()
> routine to traverse the if_cloners list and panic if a loop is found.
> The if_check_cloners_loop() invocations could be protected by
> INVARIANTS, KASSERT, or WITNESS, but it sure helps find such problems :)
>
> Chris, could you try this patch and see if it helps in your situation?
>
> And.. happy New Year, everyone! (albeit a little early :)
>
> G'luck,
> Peter
>
> --
> Peter Pentchev	roam at ringlet.net    roam at sbnd.net    roam at FreeBSD.org
> PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
> Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
> I am not the subject of this sentence.
>

Sincerely,
	Christopher J. McKenzie
	cjm at ucdavis.edu



More information about the freebsd-net mailing list