BUG unable to handle kernel NULL pointer dereference at 0000000000000304 beheben

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Aufgrund eines Fehlers im Linux Kernel Code intel-iommu.c kann es zur Kernel Version 4.9.35 zu einer Kernel Panic mit der Meldung BUG: unable to handle kernel NULL pointer dereference at 0000000000000304 kommen. Ein Update auf Kernel Version 4.9.36 oder höher behebt dieses Problem.

Problem

Nach einem Update eines Gentoo-basierenden Linux Systems auf Linux Kernel 4.9.33 kommt es wiederholt zu Kernel Panics mit der folgenden Meldung:[1]

BUG: unable to handle kernel NULL pointer dereference at 0000000000000304
[136234.369489] IP: [<ffffffff814f1717>] flush_unmaps_timeout+0xa7/0x1c0
[136234.382388] PGD 0 [136234.386238]
[136234.389393] Oops: 0000 [#1] SMP
[136234.395844] Modules linked in: rbd libceph deadline_iosched nf_log_ipv4
iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv6
nf_log_common xt_LOG xt_limit nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack
x86_pkg_temp_thermal kvm_intel kvm irqbypass crc32c_intel acpi_cpufreq
nf_conntrack_ftp nf_conntrack dm_zero dm_thin_pool dm_persistent_data
dm_bio_prison dm_round_robin dm_multipath xts aesni_intel glue_helper lrw
ablk_helper cryptd aes_x86_64 fuse dm_snapshot dm_bufio dm_crypt dm_mirror
dm_region_hash dm_log
[136234.491272] CPU: 6 PID: 40 Comm: ksoftirqd/6 Not tainted 4.9.33 #1
[136234.503785] Hardware name: Thomas-Krenn.AG X9DR3-F/X9DR3-F, BIOS 3.0a 07/31/2013
[136234.518733] task: ffff88105b86b900 task.stack: ffffc90006518000
[136234.530735] RIP: 0010:[<ffffffff814f1717>]  [<ffffffff814f1717>] flush_unmaps_timeout+0xa7/0x1c0
[136234.548498] RSP: 0018:ffffc9000651bd18  EFLAGS: 00010006
[136234.559283] RAX: ffff880858a01f48 RBX: 0000000000000000 RCX: ffff88085c246000
[...]
[136234.913446] CR2: 0000000000000304
[136234.920624] ---[ end trace c3bd71ceb3b717b2 ]---
[136234.930021] Kernel panic - not syncing: Fatal exception in interrupt

Analyse

Zur Analyse ob für dieses Problem bereits eine Lösung verfügbar ist, und ab welcher Kernel Version das Problem nicht mehr auftreten sollte, werden folgende Schritte durchgeführt:

  1. Eine Suche auf Elixir (nach Auswahl des Kernels 4.9.33) nach flush_unmaps_timeout zeigt, dass diese Funktion in der Datei drivers/iommu/intel-iommu.c des Linux Kernels liegt (siehe [1])
  2. Zur weiteren Analyse wird der Quellcode des Linux Kernels via git bezogen:[2]
    git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable
    cd linux-stable
  3. Mit folgendem Skript werden die Maintainer abgefragt. Das Ergebnis zeigt, dass die bereits erfolgte Anfrage bei der iommu Mailinglist die korrekte Anlaufstelle war:
    scripts/get_maintainer.pl -f drivers/iommu/intel-iommu.c
  4. Mit dem folgenden Kommando wird überprüft, ob nach Kernel 4.9.33 relevante Änderungen am Quellcode der iommu vorgenommen wurde:
    git log --reverse v4.9.33..v4.9.41 drivers/iommu/intel*
  5. Das Ergbnis liefert den commit c19bfc6765d44847a3880333474e2c992d63802f ("iommu/vt-d: Don't over-free page table directories"). Als Upstream Commit ist dort commit f7116e115acdd74bc75a4daf6492b11d43505125 angeführt. In der Zeile "Fixes" ist der commit 3269ee0bd668 erwähnt.
  6. Mit git describe auf die jeweiligen angeführten Commits ist ersichtlich mit welchen Versionen das Problem gelöst wurde ab wann das Problem potentiell auftreten kann:
    git describe c19bfc6765d44847a3880333474e2c992d63802f
    Liefert v4.9.35-155-gc19bfc6 - damit wurde für Kernel 4.9 das Problem gelöst - ab Kernel 4.9.36 ist der Commit enthalten
    git describe f7116e115acdd74bc75a4daf6492b11d43505125
    Liefert v4.10-rc6-3-gf7116e1 - ab Kernel 4.11 ist der Commit enthalten
    git describe 3269ee0bd668
    v3.11-rc5-1-g3269ee0 - Ab Kernel 3.11 tritt das Problem potentiell auf

Lösung

Verwenden Sie abhängig von Ihrer Kernel Basis-Version folgende Versionen:

  • Vanilla Kernel 4.9: verwenden Sie Kernel 4.9.36 oder neuer
  • Vanilla Kernel >4.9: verwenden Sie Kernel 4.11 oder neuer

Beim Einsatz von Kerneln aus Ihrer Linux Distribution wenden Sie sich an das Kernel-Team Ihrer jeweiligen Linux Distribution.

Einzelnachweise

  1. Kernel crashes in iommu_flush_iotlb_psi() (iommu Mailing List, 26.06.2017)
  2. Worldwide Mirrors of git.kernel.org (opensource.googleblog.com, 24.04.2012)


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

Apache mod rpaf
Md5sum und sha1sum zum Überprüfen von Dateidownloads verwenden
Rdesktop remote Zugriff auf Windows