Snapdragon Samsung Galaxy S9 har en GPU-stabilitetsfeil som kan utnyttes til å utløse eksterne omstarter

Samsung Galaxy S9 og Galaxy S9+ ble lansert i flere markeder, inkludert USA, Hong Kong og deler av Latin-Amerika med Qualcomm Snapdragon 845 system-on-chip. Det britiske firmaet GraphicsFuzz oppdaget en GPU-stabilitetsfeil som kan utnyttes til å utløse ekstern omstart/krasj på telefonen.

Den nye Samsung Galaxy S9 inkluderer den nyeste Qualcomm Snapdragon 845 system-on-chip for flere markeder, inkludert Hong Kong, USA, Canada og deler av Latin-Amerika. Samsung har ofte valgt det nyeste flaggskipet Qualcomm Snapdragon SoC fremfor deres interne Exynos SoC i enkelte markeder. Dette er vanligvis tilfellet i USA, med unntak av Samsung Galaxy S6. For den gjennomsnittlige forbrukeren er det liten forskjell mellom Exynos 9810 og Snapdragon 845-variantene. Under panseret kan imidlertid forskjellen i brikkesett føre til helt forskjellige opplevelser.

Anandtechsin anmeldelse av Snapdragon Galaxy S9 og Exynos Galaxy S9 avslørte sterke forskjeller i ytelse og batterilevetid mellom de to modellene, med Snapdragon-modellen som lett overgår Exynos-modellen. Med disse to vidt forskjellige brikkesettene, ser ikke en forskjell i ytelse ut til å være den eneste bekymringen denne gangen, ifølge et britisk basert selskap kalt 

GraphicsFuzz. GraphicsFuzz er et nystartet firma som spesialiserer seg på å teste GPU-pålitelighet på enheter. De utvikler tester for å se etter feil i grafikkdrivere og tilbyr hjelp til å diagnostisere de grunnleggende årsakene til eventuelle problemer de oppdager. For eksempel oppdaget teamet et sikkerhetsproblem påvirker ARM-driveren for Samsung Galaxy S6, som de ble tildelt en feilpremie for av Google. Under deres testing av Snapdragon Samsung Galaxy S9, GraphicsFuzz fant en feil i Adreno 630s grafikkdriver som lar dem gjøre det utløse en omstart av hele telefonen via en gyldig WebGL-nettside når du surfer med den vanlige nettleseren fra Samsung.

Spesielt er det en feil i Adreno 630s gjengivelse av en kompleks, men gyldig skyggelegging som kan utnyttes til å få enheten til å fryse og til slutt starte på nytt. En shader er ganske enkelt et program som lar GPUen gjengi et bilde. GraphicsFuzz utformet ikke WebGL-siden med ondsinnet hensikt for å utløse denne feilen, og sa i stedet at den tilfeldigvis ble oppdaget under deres standardtesting av GPU-stabilitet til enheter. Når de oppdaget at denne eksterne krasjen var reproduserbar, kontaktet selskapet XDA-utviklere for å lette avsløringsprosessen med både Qualcomm og Samsung.

WebGL Crash Reproduction på Snapdragon Samsung Galaxy S9

Før vi tok kontakt med representanter fra begge selskapene, validerte vi GraphicsFuzzsine funn på vår egen enhet. GraphicsFuzz opprettet en spesiell nettside som vi kan teste mot, og vi valgte de 5 mest populære nettleserne i Google Play Store for å se hva som ville skje. Tabellen nedenfor viser effekten av å gjengi den komplekse skyggen på 5 forskjellige nettlesere.

Enhet testet: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)

Operativsystem: Android 8.0.0 Oreo SM-G965U

Nettleser

Resultat

Google Chrome v65.0.3325.109

Fryser kun i ~2 sekunder

Samsung Internett v7.0.10.46

Fryser og utløser til slutt en fullstendig omstart

Opera v45.1.2246.125351

Fryser telefonen

Microsoft Edge v1.0.0.1726

Fryser kun i ~3 sekunder

Firefox v59.0.2

Nettleseren krasjer

Både Google Chrome og Microsoft Edge vil fryse telefonen i noen sekunder og generere en WebGL-feil, men enheten vil til slutt være i orden. GraphicsFuzz rapporterte til oss at de har vært i diskusjon med Google Chrome-teamet en stund og har lært at Chrome implementerer en mekanisme som avslutter GPU-prosessen etter en viss tidsperiode for å forhindre en full telefon brak. Opera fryser telefonen, men den utløser ikke en omstart. Selve Firefox-appen krasjer, men telefonen er i orden. Til slutt, tilgang til siden via Samsung Internett fører til at telefonen bremser ned til en gjennomgang før den utløser fullstendig omstart av telefonen.

Her er en videodemonstrasjon av ulykken:

Detaljert forklaring av feilen

GraphicsFuzz utført en mer dyptgående undersøkelse som indikerer at problemet som fikk telefonen til å starte på nytt er i GPU-driveren for Qualcomm Adreno 630 som er en del av Qualcomm Snapdragon 845 system-på-brikke. GraphicsFuzz samlet en logg over krasjen, som vi har innebygd nedenfor. For å gi en kort oppsummering av hva som skjer, når telefonen gjengir den komplekse skyggen, setter GPU noe som kalles et "gjerde". Et gjerde brukes til å orkestrere tilgangen til det delte minnet mellom CPU og GPU. En mobil GPU, i motsetning til en stasjonær, har tilgang til samme RAM som CPU, så når et spill spilles eller noe annet gjengis, bruker den et gjerde for å få tilgang til det delte minnet. På en enhet som har diskret grafikk, har selve GPUen sitt eget minne. Alle gjeldende mobiltelefoner deler videominne og tilfeldig tilgangsminne med RAMs flash-lagring. Problemet her er at gjerdet ikke er i stand til å fullføre, noe som utløser en kjernepanikk og får telefonen til å starte på nytt.

Fullfør kjernepanikk før omstart

[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

Les mer

GraphicsFuzz mener at grunnen til at dette problemet bare skjer på nettleseren Samsung er GPU-vakthunden. Noen ganger kan en GPU henge på langvarige shaders, i så fall har nettleseren eller operativsystemet vanligvis en GPU-vakthund som tvinger omstart av en grafikkdriver som ikke svarer. De GraphicsFuzz test shader har flere for loops som kan gjøre at det tar lengre tid å gjengi, men det er fortsatt en gyldig shader. Flere andre enheter, inkludert Exynos 9810 Samsung Galaxy S9 med Mali-G72 GPU, klarer å gjengi denne skyggen. Dermed er laget kl GraphicsFuzz kom til den konklusjonen at denne feilen skjer på grunn av en defekt GPU-driver for Adreno 630.

Google Pixel 2 XL med Qualcomm Snapdragon 835s Adreno 540 GPU som kjører den samme versjonen av Samsungs nettleser, senkes til en gjennomgang som vel – dette betyr at denne feilen kan være et problem med Qualcomm GPU-driveren som gjengir skyggeleggingen og Samsungs nettleservakthund ikke avslutter service.

Forhåpentligvis kan Qualcomm diagnostisere det underliggende problemet i GPU-driveren som forårsaker omstart og gi Samsung en fast driver snart. Selvfølgelig kan det ta litt tid før denne oppdateringen spres til sluttbrukere. I mellomtiden forventer vi at Samsung vil sende en oppdatering til Samsungs nettleser for å redusere problemet (i det minste forhindrer at det blir utnyttet via en nettside), som samsvarer med Googles oppførsel Chrome. Selv om dette problemet er kjent for å påvirke Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+, kan det også påvirke flere enheter med Snapdragon 845.

Hvis du er interessert i å teste GPU-påliteligheten til din egen mobile eller stasjonære enhet, kan teamet på GraphicsFuzz har satt sammen en webapp-demonstrasjon som lar deg kjøre noen av deres gyldige shadere på enheten din. Du kan få tilgang til den nettsiden ved å følger denne lenken.

Tidslinje for avsløring

  • 28. mars 2018: GraphicsFuzz nådde ut til XDA-utviklere informere oss om problemet. XDA-utviklere reproduserte problemet på vår egen Samsung Galaxy S9+ (SM-G965U).
  • 29. mars 2018: GraphicsFuzz nådde ut med flere detaljer og satte opp spesielle nettsider for Qualcomm- og Samsung-ansatte for å reprodusere feilen
  • 30. mars 2018: XDA-utviklere kontaktet både Samsung og Qualcomm med alle detaljer om rapporten. Vår Qualcomm-kontakt kontaktet oss og bekreftet at meldingen vår ble mottatt.
  • 2. april 2018: Vår Samsung-kontakt kontaktet oss og bekreftet at meldingen vår ble mottatt.
  • 4. april 2018: Vår Samsung-kontakt anbefalte at vi sender inn en rapport hos Samsung Sikkerhetsrapportering side. XDA-utviklere leverte en rapport, og en Samsung-ingeniør ble tildelt rapporten.