[From nobody Sat Aug 10 21:38:45 2019 Return-Path: <owner-suse-announce@suse.de> Received: from Galois.suse.de (Galois.suse.de [195.125.217.193]) by mogli.trionet.de (8.8.5/8.8.5) with ESMTP id AAA10357 for <metze@trionet.de>; Fri, 28 Nov 1997 00:20:05 +0100 Received: from localhost (daemon@localhost) by Galois.suse.de (8.8.8/8.8.8) with SMTP id WAA21239; Thu, 27 Nov 1997 22:55:01 +0100 Received: by Galois.fs100.suse.de (bulk_mailer v1.5); Thu, 27 Nov 1997 22:38:47 +0100 Received: (from mdom@localhost) by Galois.suse.de (8.8.8/8.8.8) id WAA19192 for suse-announce-outgoing; Thu, 27 Nov 1997 22:38:47 +0100 Received: from localhost (hd@localhost) by Galois.suse.de (8.8.8/8.8.8) with SMTP id WAA19189 for <suse-announce@suse.de>; Thu, 27 Nov 1997 22:38:45 +0100 Date: Thu, 27 Nov 1997 22:38:45 +0100 (MET) From: Holger Dyroff <hd@suse.de> X-Sender: hd@Galois.fs100.suse.de To: suse-announce@suse.de Subject: [S.u.S.E. Announce] F00F- und Teardrop-Bug Details Message-ID: <Pine.LNX.3.95.971127223322.18408A-100000@Galois.fs100.suse.de> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=ISO-8859-1 X-MIME-Autoconverted: from QUOTED-PRINTABLE to 8bit by Galois.suse.de id WAA19190 Sender: owner-suse-announce@suse.de Reply-To: suse-announce-owner@suse.de Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by mogli.trionet.de id LAA11483 Sehr geehrter Linux-Anwender, aufgrund regen Interesses an den mit Kernel 2.0.32 (S.u.S.E. Linux 5.1) gefixten "Pentium-F00F"- und "Teardrop"-Bugs hier eine detaillierte Beschreibung: 1. Der Intel Pentium "F00F"-Bug =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D Intel-Bezeichnung: "Invalid Operand with Locked CMPXCHG8B" Erratum Es handelt sich um einen Fehler des Pentium-Prozessors selbst, ist also kein Fehler im Betriebssystem: Die Fehlerbehandlung einer legalen Anweisung mit illegalem Operanden unter Buslock-Bedingungen wird vom Prozessor nicht korrekt durchgefuehrt, der ausfuehrende Prozess wird nich= t abgebrochen. Stattdessen wird der Prozessor komplett angehalten. Mit folgendem trivialen Programm kann dieses Verhalten sehr einfach demonstriert werden: ---------------------------------------- char x[5]=3D{0xf0,0x0f,0xc7,0xc8,0x00}; main() { void(*f)() =3D x; (*f)(); } ---------------------------------------- Der String x[5]=3D{} entspricht dem Maschinenbefehl "LOCK CMPXCHG8B EBX". Betroffen von diesem Fehler sind nur original Intel Pentium und Pentium MMX Prozessoren. Die neueren Prozessoren Pentium Pro, Pentium II sowie di= e Prozessoren anderer Hersteller (AMD, Cyrix) sind von dem Fehler nicht betroffen. Der Fehler ("F00F"-Bug) wurde nach den ersten beiden Bytes der problematischen Instruktion benannt. Der Fehler ist sehr schwerwiegend, d= a er es einem normalen, nicht-privilegierten Benutzer gestattet, das komplette System zum Absturz zu bringen; fuer die Ausfuehrung des problematischen Befehls sind keinerlei besondere Rechte (Superuser) noetig. Als eines der ersten Betriebssysteme verfuegt Linux ueber einen Workaroun= d fuer diesen Prozessor-Fehler: Dabei wird ein Teil der IDT (Interrupt Descriptor Table) auf einen virtuellen Speicherbereich gelegt, der physikalisch nicht vorhanden ist. Bei Ausfuehrung der fehlerhaften Anweisung kann nun der Prozessor nicht sofort die normale Behandlungsroutine ausfuehren (durch die der Fehler zum Tragen kommen wuerde), sondern es wird ein Page Fault erzeugt, dessen Bearbeitung korrekt funktioniert. In dieser Bearbeitungsroutine kann nun der eigentliche Grund fuer die Exception ermittelt und entsprechend reagiert werden (Abbruch des betreffenden Programms durch "illegal instruction").=20 Mittlerweile hat sich herausgestellt, dass sogar eine noch etwas elegantere Moeglichkeit existiert, den Fehler abzufangen: Bei Eintreten der Fehler-Bedingung versucht der Prozessor, schreibend auf die IDT zuzugreifen, was im normalen Betrieb nur bei der Initialisierung geschieht. Es ist daher hinreichend, die IDT readonly zu setzen, um bei Ausfuehrung des problematischen Opcodes eine funktionierende Fehlerbehandlung zu erzwingen. Dadurch entfaellt das nachfolgende Anpasse= n des Instruction Pointers, was fuer das Verwenden von Debuggern essentiell ist. Die neue Version des Workarounds duerfte in die naechste Kernelversion einfliessen, da sie aeusserst einfach zu implementieren ist. 2. "Teardrop" =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Beim sogenannten "Teardrop"-Bug handelt es sich um einen Fehler im TCP/IP Subsystem verschiedener Betriebssysteme (neben Linux sind auch Windows 95 und Windows NT betroffen), dessen Auswirkungen noch dramatischer sind als die des F00F-Bugs, da ein potentieller Angreifer nicht einmal ein Login auf dem Rechner benoetigt; schon die Tatsache, dass der Rechner mittels TCP/IP erreichbar ist (im Internet oder in einem lokalen Netz), ist hinreichend, um den Rechner zum kompletten Crash zu bringen. Der Bug besteht darin, dass eine bestimmte Fragmentierung von IP-Paketen nicht korrekt sonderbehandelt wird; als Folge ueberschreibt sich Linux bei Eintreffen geeigneter IP-Pakete fast den gesamten eigenen Speicher, was z= u einem sofortigen Neu-Booten bzw. Anhalten des Systems fuehrt. Vor allem Linux-Rechner, die als Firewall oder WWW-Server im Internet eingesetzt werden, sollten daher unter allen Umstaenden mit einem korrigierten Kerne= l ausgestattet werden. Der eigentliche Bugfix ist ein Einzeiler und kann in jedem bestehenden Kernel "nachgeruestet" werden:=20 -------------------------------------------------------------------------= --- diff -urN linux/net/ipv4/ip_fragment.c linux-teardrop/net/ipv4/ip_fragmen= t.c --- linux/net/ipv4/ip_fragment.c Fri Nov 22 10:58:34 1996 +++ linux-teardrop/net/ipv4/ip_fragment.c Tue Nov 25 12:06:03 1997 @@ -375,7 +375,7 @@ fp =3D qp->fragments; while(fp !=3D NULL) { - if(count+fp->len > skb->len) + if(fp->len < 0 || count+fp->len > skb->len) { NETDEBUG(printk("Invalid fragment list: Fragment over size.\n")); ip_free(qp); -------------------------------------------------------------------------= --- Neben diesen beiden Fehlern wurden im Kernel 2.0.32 eine Reihe weiterer Fehler behoben, so dass generell zu einem Upgrade auf diese Kernelversion geraten werden muss. Ihr S.u.S.E. Team! --- Holger Dyroff, S.u.S.E. GmbH, Gebhardtstr. 2, 90762 F=FCrth, Germany E-Mail: hd@suse.de Voice: +49-911-74053-42 FAX: +49-911-7417755 http://www.suse.de -- To unsubscribe from this list please send a mail to majordomo@suse.de wit= h 'unsubscribe suse-announce' in it's body. ]