LinuxLounge.net und ab auf die Couch!

24Aug/098

Patch für I/O-Wait Bug im Kernel in 2.6.32

Ein seit langer Zeit bekannter Input/Output Bug scheint nun mit einem Patch im kommenden Minor-Release .32 repariert zu werden.

Hatte man öfter mit größeren I/O-Operation, also Dateien kopieren, verschieben, löschen usw., zu tun so ist einem dies vielleicht schon aufgefallen. Ein Fehler im IO-Scheduler des Kernels hat bislang zur Folge, dass bei besagten Aktionen die CPU mit IO-Wait blockiert, also die CPU auf Daten von der Festplatte wartet. Dies hat zur Folge, dass das System äußerst träge wird, ja gar blockiert. Besonders bemerken tut man dies in jeglicher grafischen Oberfläche - unbenutzbar ist das Schlagwort.
21Aug/092

Linux-Kernel in Zahlen

Linux-Foundation gibt statistischen Überblick über den Kernel, seine Unterstützer und die Entwicklung.

Linux Kernel Development: How Fast it is Going, Who is Doing It, What They are Doing, and Who is Sponsoring It: An August 2009 Update Im siebzehnseitigen PDF, zusammengestellt von Greg Kroah-Hartman, Jonathan Corbet sowie Amanda McPherson, veröffentlichen die drei Kernelmitarbeiter unter dem Titel "How Fast it is Going, Who is Doing It, What They are Doing, and Who is Sponsoring It: An August 2009 Update" eine Reihe von Daten und Fakten zur Kernelentwicklung. Es lohnt kaum darauf einzugehen, es ist viel interessanter einfach mal die durchaus interessante Auswertung durchzuscrollen und zu bewerten. Hier nur einige Facts:

  • Im Durchschnitt erscheint alle 81 Tage (~11,6 Wochen) eine neue Kernel-Version
  • Seit Kernel 2.6.11 wurden jede Stunde im Durchschnitt 3,83 Patches angewendet
  • Der Kernel umfasst nun mehr als 2,7 Millionen Codezeilen
  • Jeden Tag werden 6422 Zeilen hinzugefügt, 3285 Zeilen entfernt sowie 1687 Zeilen verändert
  • Mittlerweile beteiligen sich über 1150 Entwickler und 240 Firmen am Kernel mit Programmcode
  • Die aktivsten Kernelentwickler (Anzahl an Änderungen seit 2.6.12) sind David S. Miller und Ingo Molnar, die jeweils 1,5% der Gesamtbeteiligung erreicht haben.
  • 18,2%, und somit der größte Codeanteil, kommt von Entwicklern, die nicht beruflich am Kernel arbeiten
Ich hoffe ich habe euch ein wenig Lust gemacht, denn ich wünsche nun viel Spaß beim Lesen. Weiterführende Links:
16Aug/090

Kernel bauen auf Debian-Art

Manchmal will oder muss man sogar seinen eigenen Kernel kompilieren. Debian hat ein paar nützliche Werkzeuge  an Bord die einem dabei behilflich sein können. Als Hauptwerkzeug werden wir make-kpkg verwenden, mit dessen Hilfe lassen sich deb-Pakete vom Kernel erstellen die sich auch mit Freunden teilen lassen.

tux

Das Linux-Maskottchen: Pinguin Tux.

Zum bauen des Kernels bietet sich das Verzeichnis /usr/src an. Auf kernel.org kann man sich den neusten Kernel im Quellcode herunterladen. Es ist von Vorteil von einem EU Server zu laden wenn man dort wohnt - einfach vor dem Downladlink die Subdomain eu. hinzufügen.

# cd /usr/src/ # wget http://eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.bz2
Jetzt entpacken wir das Archiv und wechseln in das neu enstandene Verzeichnis.
# tar xf linux-2.6.30.4.tar.bz2 # cd linux-2.6.30.4/
Als nächstes braucht man noch eine Kernel config Datei. Ich nehme immer die offizielle von Debian, die man hier erhalten kann. Sie wird unter dem Namen .config im Kernel-Quellcode Ordner als normale Textdatei gespeichert.
# wget http://merkel.debian.org/~jurij/2.6.30-5/amd64/config-2.6.30-1-amd64.gz # zcat config-2.6.30-1-amd64.gz > .config
Nun kann man sich daran machen die .config anzupassen, dies geht am besten über das ncurses-Interface, das man über make menuconfig starten kann.
# make menuconfig
Wenn man mit seinen Änderungen fertig ist, speichert man diese ab und kann dann theoretisch mit dem kompilieren beginnen, eventuell will man jedoch noch den einen oder anderen Patch auf den Kernel anwenden.
# patch -Np0 -i patch_datei
Für den Fall, dass auf einem Mehrkernprozessor gebaut wird, kann man noch einstellen wie viele Prozesse benutzt werden sollen. Ich habe 4 Kerne, und nutze um meinem CPU am besten auszulasten n+1 Prozesse, also 5.
# export CONCURRENCY_LEVEL=5
Und jetzt zum eigentlichen Kompilieren, dafür benutzen man make-kpkg weil es eine .deb Datei erstellt die man leicht installieren kann.
# make-kpkg --initrd --revision=debian01 kernel_image kernel_headers
Nun heisst es zurück lehnen und warten, denn dies kann einige Zeit in Anspruch nehmen - bei meinem 4x 2.6 Ghz AMD hat es etwa 15 Minuten gedauert. Nachdem alles fertig ist, befinden sich im /usr/src Verzeichnis zwei neue *.deb-Paketdateien, einmal die Kernel Headers und einmal das Kernel Image. Beide lassen sich bequem über dpkg -i installieren. Nartürlich kann man diese Pakete auch auf andern Computern mit der gleichen Architektur installieren.
# dpkg -i linux-*2.6.30.4_debian01_amd64.deb
Im Regelfall aktualisiert das Debian-Paketsystem APT dann automatisch die GRUB-Konfiguration, so dass der neue Kernel beim nächsten Start zur Auswahl steht. Viel Erfolg und Spaß beim experimentieren!
15Aug/090

sock_sendpage()-Bug ermöglicht Schadcodeausführung mit Root-Rechten

Kernel sock_sendpage()-Bug

Ein über 8 Jahre alter Bug im Linux-Kernel sorgt seit gestern für einigen Wirbel in der Szene. Hierbei handelt es sich um einen Bug im Socket-Handling des Kernels, der in der Funktion sock_sendpage() nicht auf Null-Pointer prüft, bevor er diesen dereferenziert. Dies führt bei einigen Protokollen, wie z.B. Appletalk, IPX, X.25, IRDA, Bluetooth und ISDN zu einer Schwachstelle, die es lokalen Benutzern erlaubt Programmcode mit Root-Rechten auszuführen. Betroffen sind vermutlich alle Kernel der Generationen 2.4 und 2.6 seit 2001. Es ist bereits ein Exploit besseres Exploit, sowie auch ein Kernel-Patch erschienen, der besagte Funktion nach kernel_sendpage() umleitet. Weiterführende Informationen finden sich unter Anderem hier: