De Snapdragon Samsung Galaxy S9 heeft een GPU-stabiliteitsbug die kan worden uitgebuit om opnieuw opstarten op afstand te activeren

De Samsung Galaxy S9 en Galaxy S9+ werden gelanceerd in verschillende markten, waaronder de VS, Hong Kong en delen van Latijns-Amerika met het Qualcomm Snapdragon 845 systeem-op-chip. Het Britse bedrijf GraphicsFuzz heeft een GPU-stabiliteitsbug ontdekt die kan worden misbruikt om het opnieuw opstarten/crashes van telefoons op afstand te veroorzaken.

De nieuwe Samsung Galaxy S9 omvat het nieuwste Qualcomm Snapdragon 845 system-on-chip voor verschillende markten, waaronder Hong Kong, de Verenigde Staten, Canada en delen van Latijns-Amerika. Samsung heeft in sommige markten vaak het nieuwste vlaggenschip Qualcomm Snapdragon SoC verkozen boven hun interne Exynos SoC. In de Verenigde Staten is dit meestal het geval, met uitzondering van de Samsung Galaxy S6. Voor de gemiddelde consument is er weinig verschil tussen de Exynos 9810- en Snapdragon 845-varianten. Onder de motorkap kan het verschil in chipsets echter tot totaal verschillende ervaringen leiden.

Anandtech's recensie van de Snapdragon Galaxy S9 en de Exynos Galaxy S9 onthulde grote verschillen in prestaties en batterijduur tussen de twee modellen, waarbij het Snapdragon-model gemakkelijk beter presteert dan het Exynos-model. Met deze twee enorm verschillende chipsets lijkt een verschil in prestatie deze keer niet de enige zorg te zijn, volgens een in het Verenigd Koninkrijk gevestigd bedrijf genaamd 

GrafischFuzz. GrafischFuzz is een startend bedrijf dat gespecialiseerd is in het testen van GPU-betrouwbaarheid op apparaten. Ze ontwikkelen tests om fouten in grafische stuurprogramma's op te sporen en bieden hulp bij het diagnosticeren van de hoofdoorzaken van eventuele problemen die ze ontdekken. Het team ontdekte bijvoorbeeld een beveiligingsprobleem die van invloed zijn op de ARM-driver voor de Samsung Galaxy S6, waarvoor ze een bugbounty van Google kregen. Tijdens hun testen van de Snapdragon Samsung Galaxy S9, GrafischFuzz een fout gevonden in het grafische stuurprogramma van de Adreno 630 waardoor dit mogelijk is activeer een herstart van de hele telefoon via een geldige WebGL-internetpagina tijdens het browsen met de standaard internetbrowser van Samsung.

Er zit met name een fout in de weergave van een complexe maar geldige shader door de Adreno 630 die kan worden misbruikt om het apparaat te laten vastlopen en uiteindelijk opnieuw op te starten. Een shader is eenvoudigweg een programma waarmee de GPU een afbeelding kan weergeven. GrafischFuzz heeft de WebGL-pagina niet ontworpen met kwaadaardige bedoelingen om deze bug te activeren, maar zegt in plaats daarvan dat deze per ongeluk werd ontdekt tijdens hun standaardtesten van GPU-stabiliteit van apparaten. Toen ze ontdekten dat deze crash op afstand reproduceerbaar was, nam het bedrijf contact op XDA-ontwikkelaars om het openbaarmakingsproces met zowel Qualcomm als Samsung te vergemakkelijken.

WebGL-crashreproductie op de Snapdragon Samsung Galaxy S9

Voordat we contact opnamen met vertegenwoordigers van beide bedrijven, hebben we het gevalideerd GrafischFuzz's bevindingen op ons eigen apparaat. GrafischFuzz hebben een speciale webpagina opgezet waarmee we kunnen testen, en we hebben de vijf populairste internetbrowsers in de Google Play Store gekozen om te zien wat er zou gebeuren. De onderstaande tabel toont de effecten van het weergeven van de complexe shader in 5 verschillende webbrowsers.

Apparaat getest: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)

Besturingssysteem: Android 8.0.0 Oreo SM-G965U

Webbrowser

Resultaat

Google Chrome v65.0.3325.109

Bevriest slechts ongeveer 2 seconden

Samsung Internet v7.0.10.46

Bevriest en veroorzaakt uiteindelijk een volledige herstart

Opera v45.1.2246.125351

Bevriest telefoon

Microsoft Edge v1.0.0.1726

Bevriest slechts ongeveer 3 seconden

Firefox v59.0.2

Browser crasht

Zowel Google Chrome als Microsoft Edge zullen de telefoon een paar seconden bevriezen en een WebGL-fout genereren, maar uiteindelijk komt het apparaat goed. GrafischFuzz meldde ons dat ze al een tijdje in gesprek zijn met het Google Chrome-team en daarvan hebben geleerd dat Chrome een mechanisme implementeert dat het GPU-proces na een bepaalde periode beëindigt om een ​​volle telefoon te voorkomen Botsing. Opera bevriest de telefoon, maar veroorzaakt geen herstart. De Firefox-app zelf crasht, maar de telefoon is prima. Ten slotte zorgt het openen van de pagina via Samsung Internet ervoor dat de telefoon langzamer gaat lopen voordat de telefoon volledig opnieuw wordt opgestart.

Hier is een videodemonstratie van de crash:

Gedetailleerde uitleg van de fout

GrafischFuzz heeft een diepgaander onderzoek uitgevoerd waaruit blijkt dat het probleem waardoor de telefoon opnieuw opstart, is in de GPU-driver voor de Qualcomm Adreno 630 die deel uitmaakt van de Qualcomm Snapdragon 845 systeem-op-chip. GrafischFuzz heeft een logbestand over de crash verzameld, dat we hieronder hebben ingesloten. Om een ​​korte samenvatting te geven van wat er gebeurt: wanneer de telefoon de complexe shader weergeeft, wordt de GPU ingesteld iets dat een 'hek' wordt genoemd. Er wordt een hek gebruikt om de toegang tot het gedeelde geheugen tussen de CPU's te orkestreren en GPU. Een mobiele GPU heeft, in tegenstelling tot een desktop, toegang tot hetzelfde RAM-geheugen als de CPU, dus wanneer een game wordt gespeeld of iets anders wordt weergegeven, gebruikt hij een hek om toegang te krijgen tot dat gedeelde geheugen. Op een apparaat met afzonderlijke grafische afbeeldingen heeft de GPU zelf zijn eigen geheugen. Alle huidige mobiele telefoons delen videogeheugen en willekeurig toegankelijk geheugen met de flashopslag van het RAM-geheugen. Het probleem hier is dat de omheining niet kan worden voltooid, wat een kernelpaniek veroorzaakt en ervoor zorgt dat de telefoon opnieuw opstart.

Voltooi Kernel Panic voordat u opnieuw opstart

[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

Lees verder

GrafischFuzz is van mening dat de reden dat dit probleem zich alleen in de Samsung-internetbrowser voordoet, de GPU-waakhond is. Soms kan een GPU vastlopen op langlopende shaders, in welk geval de browser of het besturingssysteem doorgaans een GPU-waakhond heeft die een niet-reagerende grafische driver geforceerd opnieuw opstart. De GrafischFuzz test shader heeft verschillende for-lussen waardoor het langer kan duren om te renderen, maar het is nog steeds een geldige shader. Verschillende andere toestellen, waaronder de Exynos 9810 Samsung Galaxy S9 met de Mali-G72 GPU, slagen er wel in om deze shader weer te geven. Zo is het team van GrafischFuzz kwam tot de conclusie dat deze fout wordt veroorzaakt door een defect GPU-stuurprogramma voor de Adreno 630.

De Google Pixel 2 XL met de Adreno 540 GPU van de Qualcomm Snapdragon 835 met dezelfde versie van de Samsung-internetbrowser vertraagt ​​tot een crawl als Nou, dit betekent dat deze fout een probleem kan zijn doordat het Qualcomm GPU-stuurprogramma de shader weergeeft en de Samsung Browser-watchdog de problemen niet beëindigt dienst.

Hopelijk kan Qualcomm het onderliggende probleem in hun GPU-stuurprogramma diagnosticeren dat het opnieuw opstarten veroorzaakt en binnenkort een vast stuurprogramma aan Samsung leveren. Het kan uiteraard enige tijd duren voordat deze update zich verspreidt naar eindgebruikers. In de tussentijd verwachten we dat Samsung een update naar de Samsung internetwebbrowser zal pushen om dit te verzachten het probleem op te lossen (in ieder geval te voorkomen dat het via een webpagina wordt uitgebuit), passend bij het gedrag van Google Chroom. Hoewel bekend is dat dit probleem van invloed is op de Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+, kan het ook gevolgen hebben voor meer apparaten met de Snapdragon 845.

Als u geïnteresseerd bent in het testen van de GPU-betrouwbaarheid van uw eigen mobiele of desktopapparaat, kunt u terecht bij het team van GrafischFuzz heeft een webapp-demonstratie samengesteld waarmee u enkele van hun geldige shaders op uw apparaat kunt uitvoeren. U kunt die webpagina openen via door deze link te volgen.

Tijdlijn voor openbaarmaking

  • 28 maart 2018: GrafischFuzz reikte naar XDA-ontwikkelaars ons op de hoogte stellen van het probleem. XDA-ontwikkelaars reproduceerde het probleem op onze eigen Samsung Galaxy S9+ (SM-G965U).
  • 29 maart 2018: GrafischFuzz nam contact op met meer details en zette speciale webpagina's op voor medewerkers van Qualcomm en Samsung om de bug te reproduceren
  • 30 maart 2018: XDA-ontwikkelaars nam contact op met zowel Samsung als Qualcomm met de volledige details van het rapport. Onze Qualcomm-contactpersoon nam contact met ons op en bevestigde dat ons bericht was ontvangen.
  • 2 april 2018: Onze Samsung-contactpersoon nam contact met ons op om te bevestigen dat ons bericht was ontvangen.
  • 4 april 2018: Onze Samsung-contactpersoon adviseerde ons een melding in te dienen bij Samsung Beveiligingsrapportage bladzijde. XDA-ontwikkelaars heeft een rapport ingediend en er is een Samsung-ingenieur aan het rapport toegewezen.