Lo Snapdragon Samsung Galaxy S9 ha un bug di stabilità della GPU che può essere sfruttato per attivare riavvii remoti

Il Samsung Galaxy S9 e Galaxy S9+ sono stati lanciati in diversi mercati tra cui Stati Uniti, Hong Kong e parti dell'America Latina con il system-on-chip Qualcomm Snapdragon 845. L'azienda britannica GraphicsFuzz ha scoperto un bug di stabilità della GPU che può essere sfruttato per attivare riavvii/arresti remoti del telefono.

Il nuovo Samsung Galaxy S9 include l'ultimo system-on-chip Qualcomm Snapdragon 845 per diversi mercati, tra cui Hong Kong, Stati Uniti, Canada e parti dell'America Latina. Samsung ha spesso scelto l'ultimo SoC Qualcomm Snapdragon di punta rispetto al SoC interno Exynos in alcuni mercati. Questo è solitamente il caso negli Stati Uniti, ad eccezione del Samsung Galaxy S6. Per il consumatore medio, c'è poca differenza tra le varianti Exynos 9810 e Snapdragon 845. Dietro le quinte, tuttavia, la differenza nei chipset può portare a esperienze molto diverse.

AnandtechLa recensione di Snapdragon Galaxy S9 e Exynos Galaxy S9 ha rivelato notevoli differenze in termini di prestazioni e la durata della batteria tra i due modelli, con il modello Snapdragon che supera facilmente il modello Exynos. Con questi due chipset molto diversi, questa volta la differenza di prestazioni non sembra essere l'unica preoccupazione, secondo una società con sede nel Regno Unito chiamata 

GraficaFuzz. GraficaFuzz è una start-up specializzata nel testare l'affidabilità della GPU sui dispositivi. Sviluppano test per cercare bug nei driver grafici e offrono aiuto nella diagnosi delle cause principali di eventuali problemi rilevati. Ad esempio, il team ha scoperto un problema di sicurezza influenzando il driver ARM per il Samsung Galaxy S6, per il quale hanno ricevuto un bug bounty da Google. Durante i test dello Snapdragon Samsung Galaxy S9, GraficaFuzz trovato un errore nel driver grafico dell'Adreno 630 che gli consente di farlo attivare un riavvio dell'intero telefono tramite una pagina Internet WebGL valida durante la navigazione con il browser Internet Samsung di serie.

In particolare, c'è un errore nel rendering dell'Adreno 630 di uno shader complesso ma valido che può essere sfruttato per far bloccare il dispositivo ed eventualmente riavviarlo. Uno shader è semplicemente un programma che consente alla GPU di eseguire il rendering di un'immagine. GraficaFuzz non ha progettato la pagina WebGL con l'intento dannoso di attivare questo bug e ha invece affermato che è stato scoperto casualmente durante i test standard sulla stabilità della GPU dei dispositivi. Una volta scoperto che questo incidente remoto era riproducibile, l'azienda si è rivolta a Sviluppatori XDA per facilitare il processo di divulgazione sia con Qualcomm che con Samsung.

Riproduzione del crash WebGL sullo Snapdragon Samsung Galaxy S9

Prima di contattare i rappresentanti di entrambe le società, abbiamo convalidato GraficaFuzzdei risultati sul nostro dispositivo. GraficaFuzz abbiamo creato una pagina web speciale da testare e abbiamo scelto i 5 browser Internet più popolari sul Google Play Store per vedere cosa sarebbe successo. La tabella seguente mostra gli effetti del rendering dello shader complesso su 5 diversi browser Web.

Dispositivo testato: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)

Sistema operativo: Android 8.0.0 Oreo SM-G965U

Programma di navigazione in rete

Risultato

Google Chrome v65.0.3325.109

Si blocca solo per circa 2 secondi

Samsung Internet v7.0.10.46

Si blocca e alla fine attiva un riavvio completo

Opera v45.1.2246.125351

Blocca il telefono

Microsoft Edge v1.0.0.1726

Si blocca solo per ~ 3 secondi

Firefox v59.0.2

Il browser si blocca

Sia Google Chrome che Microsoft Edge bloccheranno il telefono per alcuni secondi e genereranno un errore WebGL, ma alla fine il dispositivo funzionerà correttamente. GraficaFuzz ci hanno riferito che stanno discutendo da tempo con il team di Google Chrome e hanno imparato che Chrome implementa un meccanismo che termina il processo GPU dopo un determinato periodo di tempo per impedire un telefono pieno incidente. Opera blocca il telefono, ma non avvia il riavvio. L'app Firefox si blocca ma il telefono funziona bene. Infine, l'accesso alla pagina tramite Samsung Internet provoca il rallentamento del telefono prima di attivare il riavvio completo del telefono.

Ecco un video dimostrativo dell'incidente:

Spiegazione dettagliata dell'errore

GraficaFuzz ha eseguito un'indagine più approfondita che indica che il problema che causa il riavvio del telefono è nel driver GPU del Qualcomm Adreno 630 che fa parte del Qualcomm Snapdragon 845 sistema su chip. GraficaFuzz abbiamo raccolto un registro dell'incidente, che abbiamo incorporato di seguito. Per dare un breve riassunto di ciò che sta accadendo, quando il telefono esegue il rendering dello shader complesso, la GPU si imposta qualcosa chiamato "recinto". Una recinzione viene utilizzata per orchestrare l'accesso alla memoria condivisa tra la CPU e GPU. Una GPU mobile, a differenza di un desktop, ha accesso alla stessa RAM della CPU, quindi quando si gioca o si esegue il rendering di qualcos'altro, utilizza un recinto per accedere alla memoria condivisa. Su un dispositivo dotato di grafica discreta, la GPU stessa ha la propria memoria. Tutti gli attuali telefoni cellulari condividono la memoria video e la memoria ad accesso casuale con la memoria flash della RAM. Il problema qui è che il recinto non è in grado di completarsi, il che innesca un panico nel kernel e provoca il riavvio del telefono.

Completa Kernel Panic prima del riavvio

[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

Per saperne di più

GraficaFuzz ritiene che il motivo per cui questo problema si verifica solo sul browser Internet Samsung sia quello del watchdog della GPU. A volte una GPU può bloccarsi su shader di lunga durata, nel qual caso il browser o il sistema operativo in genere dispone di un watchdog GPU che forza il riavvio di un driver grafico che non risponde. IL GraficaFuzz lo shader di prova ha diversi cicli for che potrebbero richiedere più tempo per il rendering, ma è comunque uno shader valido. Diversi altri dispositivi, incluso il Samsung Galaxy S9 Exynos 9810 con GPU Mali-G72, riescono a eseguire il rendering di questo shader. Pertanto, la squadra di GraficaFuzz è giunto alla conclusione che questo errore si verifica a causa di un driver GPU difettoso per l'Adreno 630.

Il Google Pixel 2 XL con la GPU Adreno 540 del Qualcomm Snapdragon 835 che esegue la stessa versione del browser Internet Samsung rallenta a passo d'uomo bene, questo significa che questo errore potrebbe essere un problema con il driver della GPU Qualcomm che esegue il rendering dello shader e il watchdog del browser Samsung che non termina il servizio.

Si spera che Qualcomm possa diagnosticare il problema di fondo nel driver GPU che causa il riavvio e fornire presto un driver riparato a Samsung. Naturalmente, potrebbe passare del tempo prima che questo aggiornamento si propaghi agli utenti finali. Nel frattempo, ci aspettiamo che Samsung rilasci un aggiornamento al browser Web Samsung per mitigare i problemi il problema (almeno impedendo che venga sfruttato tramite una pagina web), corrispondendo al comportamento di Google Cromo. Sebbene sia noto che questo problema interessa il Samsung Galaxy S9/S9+ Qualcomm Snapdragon 845, potrebbe interessare anche più dispositivi con Snapdragon 845.

Se sei interessato a testare l'affidabilità della GPU del tuo dispositivo mobile o desktop, il team di GraficaFuzz ha messo insieme una dimostrazione di webapp che ti consente di eseguire alcuni dei loro shader validi sul tuo dispositivo. Puoi accedere a quella pagina web tramite seguendo questo collegamento.

Cronologia della divulgazione

  • 28 marzo 2018: GraficaFuzz raggiunto Sviluppatori XDA informandoci del problema. Sviluppatori XDA abbiamo riprodotto il problema sul nostro Samsung Galaxy S9+ (SM-G965U).
  • 29 marzo 2018: GraficaFuzz ha contattato per maggiori dettagli e ha creato pagine web speciali per i dipendenti Qualcomm e Samsung per riprodurre il bug
  • 30 marzo 2018: Sviluppatori XDA ha contattato sia Samsung che Qualcomm con tutti i dettagli del rapporto. Il nostro contatto Qualcomm ci ha risposto confermando che il nostro messaggio era stato ricevuto.
  • 2 aprile 2018: Il nostro contatto Samsung ci ha ricontattato confermando che il nostro messaggio è stato ricevuto.
  • 4 aprile 2018: Il nostro contatto Samsung ci ha consigliato di presentare una segnalazione a Samsung Segnalazione sulla sicurezza pagina. Sviluppatori XDA ha presentato una segnalazione e un ingegnere Samsung è stato assegnato alla segnalazione.