Re: Panic im Dummynet-Code

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Mon, 7 Feb 2005 13:27:40 +0100 (CET)

Eike Bernhardt <eike(at)unorganized.net> wrote:
> Der Kernel steigt immer im Dummynet-Code aus, das ist auch tatsaechlich
> eine Stelle an der es kuerzlich eine Aenderung bei uns auf dem Server
> gegeben hat, es wird nun halbstuendlich an den Dummynet-Pipes
> herumgestellt um Benutzer zeitnah ins Shaping einzubauen.
> Anscheinend mache ich dabei etwas, das dem Dummynet-Code nicht gefaellt.

Ich hatte mal einen ähnlichen Fall, wo durch häufige, cron-
gesteuerte Änderungen an Dummynet-Pipes Kernel-Panics aus-
gelöst wurden. Ich hatte dann herausgefunden, daß ich ei-
nen kleinen Fehler im Skript drinhatte. Nachdem ich den
entfernt hatte, waren die Panics weg. Leider weiß ich
nicht mehr genau, was der Fehler war, aber es war nur ir-
gendeine Kleinigkeit, vielleicht eine versehentlich doppelt
vergebene Regelnummer oder so. (Was natürlich kein Grund
für eine Panic sein sollte.)

Ich würde mich auch nicht wundern, wenn im IPFW/Dummynet-
Code noch einige Race-Conditions schlummern. Der Code
macht insgesamt einen relativ fragilen Eindruck auf mich
(subjektiv).

> --8<--
> (kgdb) list *0xc01b0e31
> 0xc01b0e31 is in transmit_event (/usr/home/stable/src/sys/netinet/ip_dummynet.c:
> 484).
> 479 printf("dummynet: bad switch %d!\n", pkt->dn_dir);
> 480 m_freem(pkt->dn_m);
> 481 break ;
> 482 }
> 483 free(pkt, M_DUMMYNET);
> 484 }
> 485 /* if there are leftover packets, put into the heap for next event *
> /
> 486 if ( (pkt = pipe->head) )
> 487 heap_insert(&extract_heap, pkt->output_time, pipe ) ;
> 488 /* XXX should check errors on heap_insert, by draining the
> (kgdb)
> -->8--
>
> Ich bin mir nun nur unsicher, ob denn da in Zeile 484 wirklich ein Panic
> passieren kann, weil das ist ja nur die schliessende Klammer?

Das ist durchaus denkbar. Insbesondere, wenn man mit Opti-
mierungen compiliert (d.h. eigentlich fast immer), stimmt
die Reihenfolge der Zeilen im Source nicht unbedingt mit
dem Objektcode überein. Es kann also durchaus sein, daß
der Codegenerator an der Stelle der schließenden Klammer
etwas ausspuckt. Sicherheit schafft hier wohl nur ein
Blick ins Disassembler-Listing des Codes.

> Waere nett wenn mir da jemand mal kurz sagen koennte ob die
> Informationen so sinnvoll aussehen, oder ob noch irgendwas falsch laeuft
> und ich noch was aendern muss.

Die Infos sehe eigentlich gut aus. Damit sollte jemand,
der den Dummynet-Code kennt, schon etwas anfangen können.
Du solltest aber noch das ipfw(8)-Kommando hinzufügen,
das zu dem Zeitpunkt ausgeführt wurde (und evtl. Infos,
welche Regeln und Pipes vorher aktiv waren).

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"C++ is over-complicated nonsense. And Bjorn Shoestrap's book
a danger to public health. I tried reading it once, I was in
recovery for months."
        -- Cliff Sarginson
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 07 Feb 2005 - 13:28:35 CET

search this site