Samsung Galaxy S9 och Galaxy S9+ lanserades på flera marknader inklusive USA, Hongkong och delar av Latinamerika med Qualcomm Snapdragon 845 system-on-chip. Det brittiska företaget GraphicsFuzz upptäckte en GPU-stabilitetsbugg som kan utnyttjas för att utlösa fjärrstarter/kraschar av telefonen.
Den nya Samsung Galaxy S9 inkluderar det senaste Qualcomm Snapdragon 845 system-on-chip för flera marknader, inklusive Hong Kong, USA, Kanada och delar av Latinamerika. Samsung har ofta valt det senaste flaggskeppet Qualcomm Snapdragon SoC framför deras interna Exynos SoC på vissa marknader. Detta är vanligtvis fallet i USA, med undantag för Samsung Galaxy S6. För den genomsnittliga konsumenten är det liten skillnad mellan Exynos 9810 och Snapdragon 845-varianterna. Under huven kan dock skillnaden i chipset leda till väldigt olika upplevelser.
Anandtechs recension av Snapdragon Galaxy S9 och Exynos Galaxy S9 avslöjade stora skillnader i prestanda och batteritid mellan de två modellerna, med Snapdragon-modellen som lätt överträffar Exynos-modellen. Med dessa två vitt skilda styrkretsar verkar en skillnad i prestanda inte vara det enda problemet den här gången, enligt ett brittiskt företag som heter
GraphicsFuzz. GraphicsFuzz är ett nystartat företag som är specialiserat på att testa GPU-tillförlitlighet på enheter. De utvecklar tester för att leta efter buggar i grafikdrivrutiner och erbjuder hjälp med att diagnostisera grundorsakerna till eventuella problem som de upptäcker. Till exempel upptäckte teamet ett säkerhetsproblem påverkar ARM-drivrutinen för Samsung Galaxy S6, för vilken de tilldelades en buggpremie av Google. Under deras testning av Snapdragon Samsung Galaxy S9, GraphicsFuzz hittade ett fel i Adreno 630:s grafikdrivrutin som tillåter dem att utlösa en omstart av hela telefonen via en giltig WebGL-internetsida när du surfar med Samsungs vanliga webbläsare.I synnerhet finns det ett fel i Adreno 630:s rendering av en komplex men ändå giltig skuggning som kan utnyttjas för att få enheten att frysa och så småningom starta om. En shader är helt enkelt ett program som låter GPU: n rendera en bild. GraphicsFuzz designade inte WebGL-sidan med skadlig avsikt att utlösa denna bugg, utan säger istället att det av misstag upptäcktes under deras standardtestning av GPU-stabilitet för enheter. När de upptäckte att denna fjärrkrasch var reproducerbar kontaktade företaget XDA-utvecklare för att underlätta avslöjandeprocessen med både Qualcomm och Samsung.
WebGL Crash Reproduction på Snapdragon Samsung Galaxy S9
Innan vi nådde ut till representanter från något av företagen validerade vi GraphicsFuzzs fynd på vår egen enhet. GraphicsFuzz skapade en speciell webbsida för oss att testa mot, och vi valde de 5 mest populära webbläsarna i Google Play Butik för att se vad som skulle hända. Tabellen nedan visar effekterna av att rendera den komplexa skuggningen på 5 olika webbläsare.
Testad enhet: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)
Operativ system: Android 8.0.0 Oreo SM-G965U
Webbläsare |
Resultat |
---|---|
Google Chrome v65.0.3325.109 |
Fryser endast i ~2 sekunder |
Samsung Internet v7.0.10.46 |
Fryser och utlöser så småningom en fullständig omstart |
Opera v45.1.2246.125351 |
Fryser telefonen |
Microsoft Edge v1.0.0.1726 |
Fryser endast i ~3 sekunder |
Firefox v59.0.2 |
Webbläsaren kraschar |
Både Google Chrome och Microsoft Edge kommer att frysa telefonen i några sekunder och generera ett WebGL-fel, men enheten kommer i slutändan att bli bra. GraphicsFuzz rapporterade till oss att de har diskuterat med Google Chrome-teamet under en tid och har lärt sig att Chrome implementerar en mekanism som avslutar GPU-processen efter en viss tidsperiod för att förhindra en komplett telefon krascha. Opera fryser telefonen, men det utlöser ingen omstart. Själva Firefox-appen kraschar men telefonen är bra. Till sist, åtkomst till sidan via Samsung Internet gör att telefonen saktar ner till en genomsökning innan den utlöser en fullständig omstart av telefonen.
Här är en videodemonstration av kraschen:
Detaljerad förklaring av felet
GraphicsFuzz utförde en mer djupgående undersökning som indikerar att problemet som fick telefonen att starta om är i GPU-drivrutinen för Qualcomm Adreno 630 som är en del av Qualcomm Snapdragon 845 system-på-chip. GraphicsFuzz samlade en logg på kraschen, som vi har bäddat in nedan. För att ge en kort sammanfattning av vad som händer, när telefonen återger den komplexa shadern, ställer GPU: n något som kallas "staket". Ett staket används för att orkestrera åtkomsten till det delade minnet mellan CPU: n och GPU. En mobil GPU, till skillnad från en stationär dator, har tillgång till samma RAM som processorn, så när ett spel spelas eller något annat renderas använder den ett staket för att komma åt det delade minnet. På en enhet som har diskret grafik har själva GPU: n sitt eget minne. Alla nuvarande mobiltelefoner delar videominne och random access-minne med RAM: s flashminne. Problemet här är att stängslet inte kan slutföra vilket utlöser en kärnpanik och får telefonen att starta om.
Slutför kärnpanik före 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
Läs mer
GraphicsFuzz tror att anledningen till att detta problem bara händer i Samsungs webbläsare är GPU-vakthunden. Ibland kan en GPU hänga på långvariga shaders, i vilket fall webbläsaren eller operativsystemet vanligtvis har en GPU-vakthund som tvingar omstart av en grafikdrivrutin som inte svarar. De GraphicsFuzz test shader har flera för loopar som kan göra att det tar längre tid att rendera, men det är fortfarande en giltig shader. Flera andra enheter, inklusive Exynos 9810 Samsung Galaxy S9 med Mali-G72 GPU, lyckas rendera denna shader. Alltså laget kl GraphicsFuzz kom till slutsatsen att detta fel uppstår på grund av en felaktig GPU-drivrutin för Adreno 630.
Google Pixel 2 XL med Qualcomm Snapdragon 835:s Adreno 540 GPU som kör samma version av Samsungs webbläsare saktar ner till en genomsökning som Tja—detta betyder att det här felet kan vara ett problem med Qualcomm GPU-drivrutinen som återger shadern och Samsung Browser Watchdog inte slutar service.
Förhoppningsvis kan Qualcomm diagnostisera det underliggande problemet i deras GPU-drivrutin som orsakar omstarten och tillhandahålla en fixad drivrutin till Samsung snart. Naturligtvis kan det ta ett tag innan den här uppdateringen sprids till slutanvändare. Under tiden förväntar vi oss att Samsung kommer att skicka en uppdatering till Samsungs webbläsare för att mildra problemet (åtminstone förhindrar att det utnyttjas via en webbsida), som matchar Googles beteende Krom. Även om det här problemet är känt för att påverka Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+, kan det också påverka fler enheter med Snapdragon 845.
Om du är intresserad av att testa GPU-tillförlitligheten hos din egen mobila eller stationära enhet kan teamet på GraphicsFuzz har satt ihop en webapp-demonstration som låter dig köra några av deras giltiga shaders på din enhet. Du kan komma åt den webbsidan genom att efter denna länk.
Tidslinje för avslöjande
- 28 mars 2018: GraphicsFuzz nått ut till XDA-utvecklare informera oss om problemet. XDA-utvecklare återskapade problemet på vår egen Samsung Galaxy S9+ (SM-G965U).
- 29 mars 2018: GraphicsFuzz nådde ut med mer information och skapade speciella webbsidor för Qualcomm- och Samsung-anställda för att reproducera buggen
- 30 mars 2018: XDA-utvecklare kontaktade både Samsung och Qualcomm med fullständig information om rapporten. Vår Qualcomm-kontakt kontaktade oss och bekräftade att vårt meddelande mottogs.
- 2 april 2018: Vår Samsung-kontakt kontaktade oss och bekräftade att vårt meddelande togs emot.
- 4 april 2018: Vår Samsung-kontakt rekommenderade att vi gör en anmälan hos Samsung Säkerhetsrapportering sida. XDA-utvecklare lämnade in en rapport och en Samsung-ingenjör tilldelades rapporten.