*BSD News Article 19648


Return to BSD News archive

Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!agate!howland.reston.ans.net!paladin.american.edu!news.univie.ac.at!fstgds15.tu-graz.ac.at!fstgds01.tu-graz.ac.at!not-for-mail
From: chmr@edvz.tu-graz.ac.at (Christoph Robitschko)
Newsgroups: comp.os.386bsd.bugs
Subject: Re: telnet finger BUG
Date: 18 Aug 1993 17:05:52 +0200
Organization: Technical University of Graz, Austria
Lines: 36
Message-ID: <24tgggINNou2@fstgds01.tu-graz.ac.at>
References: <3888@bigfoot.first.gmd.de>
NNTP-Posting-Host: fstgds01.tu-graz.ac.at
X-Newsreader: TIN [version 1.2 PL1]

In article <3888@bigfoot.first.gmd.de> Ralph Berg (ralph@eowyn.first.gmd.de) wrote:
> Hi Netters,

> did you ever tried to call telnet localhost, without having an ethernet card 
> installed? Try finger @localhost !

Yes I tried...

> MAKE a sync before you call one of these functions!!!!!!!!!

> Your system will make a reboot without any panic message!!!

> But perhaps I've configured something very wrong!

No, this really is a bug, but you can work around it by configuring a slip
device in your kernel.

A short description of the bug follows:
the lo0 driver's output routine blocks network interrupts while it is
executing. Since you have no network card, there are no interrupts to block
(netmask == 0). In the output routine, it sets up a software interrupt that
calls lo0's input routine when the interrupt priority is zero again (in
your case immediately, because netmask == 0). loinput in turn calls
looutput to acknoledge the packet (and etc), which sets up a software
interrupt for loinput, which .....
What follows is a kernel stack overflow, and therefore a triple exception
which resets the CPU (no chance for a panic because the kernel stack
is not valid...)

As said, the workaround is to either configure in a slip device,
or to include a line "if (!netmask) netmask = 0x8000;" at the end of
isa_configure() (/sys/i386/isa/isa.c, line ~130), as is done in NetBSD.
A real fix is not in sight.


								Christoph