Das Snapdragon Samsung Galaxy S9 weist einen GPU-Stabilitätsfehler auf, der ausgenutzt werden kann, um Remote-Neustarts auszulösen

Das Samsung Galaxy S9 und das Galaxy S9+ wurden in mehreren Märkten eingeführt, darunter in den USA, Hongkong und Teilen Lateinamerikas, mit dem Qualcomm Snapdragon 845 System-on-Chip. Das britische Unternehmen GraphicsFuzz hat einen GPU-Stabilitätsfehler entdeckt, der ausgenutzt werden kann, um Remote-Neustarts/Abstürze von Telefonen auszulösen.

Das neue Samsung Galaxy S9 umfasst das neueste Qualcomm Snapdragon 845 System-on-Chip für mehrere Märkte, darunter Hongkong, die Vereinigten Staaten, Kanada und Teile Lateinamerikas. Samsung hat sich in einigen Märkten oft für das neueste Flaggschiff-SoC Qualcomm Snapdragon gegenüber dem hauseigenen Exynos-SoC entschieden. Dies ist in den USA normalerweise der Fall, mit Ausnahme des Samsung Galaxy S6. Für den Durchschnittsverbraucher gibt es kaum Unterschiede zwischen den Varianten Exynos 9810 und Snapdragon 845. Unter der Haube können die unterschiedlichen Chipsätze jedoch zu völlig unterschiedlichen Erfahrungen führen.

AnandtechDer Test des Snapdragon Galaxy S9 und des Exynos Galaxy S9 zeigte deutliche Leistungsunterschiede und Akkulaufzeit zwischen den beiden Modellen, wobei das Snapdragon-Modell das Exynos-Modell deutlich übertrifft. Bei diesen beiden sehr unterschiedlichen Chipsätzen scheint ein Leistungsunterschied dieses Mal nicht das einzige Problem zu sein, so ein in Großbritannien ansässiges Unternehmen 

GraphicsFuzz. GraphicsFuzz ist ein Start-up-Unternehmen, das sich auf das Testen der GPU-Zuverlässigkeit auf Geräten spezialisiert hat. Sie entwickeln Tests zur Suche nach Fehlern in Grafiktreibern und bieten Hilfe bei der Diagnose der Grundursachen aller entdeckten Probleme. Beispielsweise entdeckte das Team ein Sicherheitsproblem Auswirkungen auf den ARM-Treiber für das Samsung Galaxy S6, wofür sie von Google ein Bug-Bounty erhielten. Während ihres Tests des Snapdragon Samsung Galaxy S9, GraphicsFuzz haben einen Fehler im Grafiktreiber der Adreno 630 gefunden, der dies ermöglicht einen Neustart des gesamten Telefons auslösen über eine gültige WebGL-Internetseite beim Surfen mit dem Standard-Internetbrowser von Samsung.

Insbesondere liegt ein Fehler bei der Darstellung eines komplexen, aber gültigen Shaders durch die Adreno 630 vor, der ausgenutzt werden kann, um das Gerät einzufrieren und schließlich neu zu starten. Ein Shader ist einfach ein Programm, das es der GPU ermöglicht, ein Bild zu rendern. GraphicsFuzz haben die WebGL-Seite nicht mit der böswilligen Absicht entworfen, diesen Fehler auszulösen, sondern sagen stattdessen, dass er zufällig während ihrer Standardtests der GPU-Stabilität von Geräten entdeckt wurde. Als sich herausstellte, dass dieser Remote-Absturz reproduzierbar war, nahm das Unternehmen Kontakt mit uns auf XDA-Entwickler um den Offenlegungsprozess sowohl bei Qualcomm als auch bei Samsung zu erleichtern.

Reproduktion eines WebGL-Absturzes auf dem Snapdragon Samsung Galaxy S9

Bevor wir uns an Vertreter beider Unternehmen wandten, führten wir eine Validierung durch GraphicsFuzzDie Erkenntnisse auf unserem eigenen Gerät. GraphicsFuzz Wir haben eine spezielle Webseite zum Testen eingerichtet und die fünf beliebtesten Internetbrowser im Google Play Store ausgewählt, um zu sehen, was passieren würde. Die folgende Tabelle zeigt die Auswirkungen des Renderns des komplexen Shaders in fünf verschiedenen Webbrowsern.

Getestetes Gerät: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)

Betriebssystem: Android 8.0.0 Oreo SM-G965U

Webbrowser

Ergebnis

Google Chrome v65.0.3325.109

Friert nur ca. 2 Sekunden ein

Samsung Internet v7.0.10.46

Das Einfrieren löst dann schließlich einen vollständigen Neustart aus

Opera v45.1.2246.125351

Das Telefon friert ein

Microsoft Edge v1.0.0.1726

Friert nur ca. 3 Sekunden ein

Firefox v59.0.2

Browser stürzt ab

Sowohl Google Chrome als auch Microsoft Edge frieren das Telefon für einige Sekunden ein und generieren einen WebGL-Fehler, aber letztendlich ist das Gerät in Ordnung. GraphicsFuzz haben uns berichtet, dass sie seit einiger Zeit mit dem Google Chrome-Team im Gespräch sind und daraus gelernt haben dass Chrome einen Mechanismus implementiert, der den GPU-Prozess nach einer festgelegten Zeitspanne beendet, um ein volles Telefon zu verhindern Absturz. Opera friert das Telefon ein, löst jedoch keinen Neustart aus. Die Firefox-App selbst stürzt ab, aber das Telefon ist in Ordnung. Schließlich führt der Zugriff auf die Seite über Samsung Internet dazu, dass das Telefon langsamer wird, bevor ein vollständiger Neustart des Telefons ausgelöst wird.

Hier ist eine Videodemonstration des Absturzes:

Detaillierte Erklärung des Fehlers

GraphicsFuzz hat eine eingehendere Untersuchung durchgeführt, die darauf hindeutet, dass das Problem, das den Neustart des Telefons verursacht, vorliegt im GPU-Treiber für den Qualcomm Adreno 630, der Teil des Qualcomm Snapdragon 845 ist System-on-Chip. GraphicsFuzz Wir haben ein Protokoll über den Absturz erstellt, das wir unten eingebettet haben. Um eine kurze Zusammenfassung dessen zu geben, was passiert: Wenn das Telefon den komplexen Shader rendert, legt die GPU fest etwas, das man „Zaun“ nennt. Ein Zaun wird verwendet, um den Zugriff auf den gemeinsam genutzten Speicher zwischen den CPUs zu orchestrieren und GPU. Eine mobile GPU hat im Gegensatz zu einem Desktop-Computer Zugriff auf denselben RAM wie die CPU. Wenn also ein Spiel gespielt oder etwas anderes gerendert wird, verwendet sie einen Zaun, um auf den gemeinsam genutzten Speicher zuzugreifen. Bei einem Gerät mit separater Grafikkarte verfügt die GPU selbst über einen eigenen Speicher. Alle aktuellen Mobiltelefone teilen sich den Videospeicher und den Arbeitsspeicher mit dem Flash-Speicher des RAM. Das Problem besteht darin, dass der Zaun nicht vollständig ausgeführt werden kann, was eine Kernel-Panik auslöst und einen Neustart des Telefons verursacht.

Beenden Sie die Kernel-Panik vor dem Neustart

[12681.035590] [2:crtc_commit: 117: 433] kgsl kgsl-3d0: |a6xx_snapshot_gmu| set FENCE toALLOWmode:0
[12681.035839] [2:crtc_commit: 117: 433] kgsl kgsl-3d0: |kgsl_device_snapshot| snapshot created at pa 0x000000016e500000 size 927400
[12681.035993] [0: kworker/u16:5:27740] kgsl kgsl-3d0: |kgsl_snapshot_save_frozen_<wbr />objs| kgsl_snapshot_save_frozen_objs start
[12681.036085][2:crtc_commit: 117: 433]Kernelpanic-notsyncing: !!!FENCETIMEOUT
[12681.036156][2:crtc_commit: 117: 433]CPU: 2 PID: 433 Comm: crtc_commit:117Tainted: GW 4.9.65-13087505#1
[12681.036248][2:crtc_commit: 117: 433]Hardwarename: SamsungSTARQLTEPROJECTRev14 (DT)
[12681.036319][2:crtc_commit: 117: 433]Calltrace:
[12681.036368] [2:crtc_commit: 117: 433] [] dump_backtrace+0x0/0x248
[12681.036438] [2:crtc_commit: 117: 433] [] show_stack+0x18/0x28
[12681.036509] [2:crtc_commit: 117: 433] [] dump_stack+0x98/0xc0
[12681.036578] [2:crtc_commit: 117: 433] [] panic+0x1e0/0x44c
[12681.036646] [2:crtc_commit:117: 433] [] sde_plane_wait_input_fence+<wbr />0x174/0x28c
[12681.036727] [2:crtc_commit:117: 433] [] sde_crtc_atomic_flush+0x1c4/<wbr />0x5e8
[12681.036807] [2:crtc_commit: 117: 433] [] drm_atomic_helper_commit_<wbr />planes+0x19c/0x1fc
[12681.036891] [2:crtc_commit: 117: 433] [] complete_commit+0x74/0x6a4
[12681.036960] [2:crtc_commit:117: 433] [] _msm_drm_commit_work_cb+0x48/<wbr />0x1c4
[12681.037038] [2:crtc_commit: 117: 433] [] kthread_worker_fn+0x78/0x194
[12681.037108] [2:crtc_commit: 117: 433] [] kthread+0xd8/0xf0
[12681.037172] [2:crtc_commit: 117: 433] [] ret_from_fork+0x10/0x20
[12681.037239][2:crtc_commit: 117: 433]Kernelloadedat: 0x800a0000, offsetfromcompile-timeaddress 20000
[12681.037331][2:crtc_commit: 117: 433]SMP: stoppingsecondaryCPUs

mehr lesen

GraphicsFuzz glaubt, dass der Grund dafür, dass dieses Problem nur im Samsung-Internetbrowser auftritt, der GPU-Watchdog ist. Manchmal kann es vorkommen, dass eine GPU bei Shadern mit langer Laufzeit hängen bleibt. In diesem Fall verfügt der Browser oder das Betriebssystem normalerweise über einen GPU-Watchdog, der einen nicht reagierenden Grafiktreiber zum Neustart erzwingt. Der GraphicsFuzz Der Test-Shader verfügt über mehrere for-Schleifen, die das Rendern möglicherweise länger dauern lassen, er ist jedoch immer noch ein gültiger Shader. Mehrere andere Geräte, darunter das Exynos 9810 Samsung Galaxy S9 mit der Mali-G72-GPU, schaffen es, diesen Shader zu rendern. Somit ist das Team bei GraphicsFuzz kam zu dem Schluss, dass dieser Fehler auf einen fehlerhaften GPU-Treiber für die Adreno 630 zurückzuführen ist.

Das Google Pixel 2 XL mit der Adreno 540-GPU des Qualcomm Snapdragon 835, auf dem die gleiche Version des Samsung-Internetbrowsers läuft, wird extrem langsam Nun ja – das bedeutet, dass dieser Fehler ein Problem damit sein könnte, dass der Qualcomm-GPU-Treiber den Shader rendert und der Samsung-Browser-Watchdog ihn nicht beendet Service.

Hoffentlich kann Qualcomm das zugrunde liegende Problem in seinem GPU-Treiber diagnostizieren, das den Neustart verursacht, und Samsung bald einen behobenen Treiber zur Verfügung stellen. Natürlich kann es einige Zeit dauern, bis dieses Update an Endbenutzer weitergegeben wird. In der Zwischenzeit gehen wir davon aus, dass Samsung ein Update für den Samsung Internet-Webbrowser veröffentlichen wird, um Abhilfe zu schaffen Das Problem (zumindest verhindert es, dass es über eine Webseite ausgenutzt wird) stimmt mit dem Verhalten von Google überein Chrom. Obwohl dieses Problem bekanntermaßen das Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+ betrifft, könnte es auch weitere Geräte mit dem Snapdragon 845 betreffen.

Wenn Sie daran interessiert sind, die GPU-Zuverlässigkeit Ihres eigenen Mobil- oder Desktop-Geräts zu testen, wenden Sie sich an das Team von GraphicsFuzz hat eine Webapp-Demonstration zusammengestellt, mit der Sie einige ihrer gültigen Shader auf Ihrem Gerät ausführen können. Sie können auf diese Webseite zugreifen, indem Sie diesem Link folgen.

Offenlegungszeitplan

  • 28. März 2018: GraphicsFuzz kontaktiert XDA-Entwickler uns über das Problem informieren. XDA-Entwickler haben das Problem auf unserem eigenen Samsung Galaxy S9+ (SM-G965U) reproduziert.
  • 29. März 2018: GraphicsFuzz Wir meldeten uns mit weiteren Details und richteten spezielle Webseiten für Qualcomm- und Samsung-Mitarbeiter ein, um den Fehler zu reproduzieren
  • 30. März 2018: XDA-Entwickler Wir haben sowohl Samsung als auch Qualcomm mit allen Einzelheiten des Berichts kontaktiert. Unser Ansprechpartner bei Qualcomm hat sich bei uns gemeldet und bestätigt, dass unsere Nachricht eingegangen ist.
  • 2. April 2018: Unser Samsung-Kontakt hat sich bei uns gemeldet und bestätigt, dass unsere Nachricht eingegangen ist.
  • 4. April 2018: Unser Samsung-Kontakt empfahl uns, eine Meldung bei Samsung einzureichen Sicherheitsberichte Seite. XDA-Entwickler reichte einen Bericht ein und ein Samsung-Ingenieur wurde mit dem Bericht beauftragt.