Le Snapdragon Samsung Galaxy S9 présente un bug de stabilité GPU qui peut être exploité pour déclencher des redémarrages à distance

click fraud protection

Les Samsung Galaxy S9 et Galaxy S9+ ont été lancés sur plusieurs marchés, notamment aux États-Unis, à Hong Kong et dans certaines parties de l'Amérique latine avec le système sur puce Qualcomm Snapdragon 845. La société britannique GraphicsFuzz a découvert un bug de stabilité du GPU qui peut être exploité pour déclencher des redémarrages/plantages de téléphones à distance.

Le nouveau SamsungGalaxy S9 comprend le dernier système sur puce Qualcomm Snapdragon 845 pour plusieurs marchés, dont Hong Kong, les États-Unis, le Canada et certaines parties de l'Amérique latine. Samsung a souvent choisi le dernier SoC phare Qualcomm Snapdragon plutôt que son SoC Exynos interne sur certains marchés. C'est généralement le cas aux États-Unis, à l'exception du Samsung Galaxy S6. Pour le consommateur moyen, il y a peu de différence entre les variantes Exynos 9810 et Snapdragon 845. Cependant, sous le capot, la différence entre les chipsets peut conduire à des expériences très différentes.

AnandtechL'examen du Snapdragon Galaxy S9 et de l'Exynos Galaxy S9 a révélé de fortes différences de performances et la durée de vie de la batterie entre les deux modèles, le modèle Snapdragon surpassant facilement le modèle Exynos. Avec ces deux chipsets très différents, la différence de performances ne semble pas être la seule préoccupation cette fois-ci, selon une société basée au Royaume-Uni appelée 

GraphiquesFuzz. GraphiquesFuzz est une start-up spécialisée dans les tests de fiabilité des GPU sur les appareils. Ils développent des tests pour rechercher des bogues dans les pilotes graphiques et offrent une aide pour diagnostiquer les causes profondes de tous les problèmes qu'ils découvrent. Par exemple, l'équipe a découvert un problème de sécurité affectant le pilote ARM pour le Samsung Galaxy S6, pour lequel ils ont reçu une prime aux bugs de Google. Lors de leurs tests du Snapdragon Samsung Galaxy S9, GraphiquesFuzz trouvé une erreur dans le pilote graphique de l'Adreno 630 qui leur permet de déclencher un redémarrage de tout le téléphone via une page Internet WebGL valide lors de la navigation avec le navigateur Internet Samsung d'origine.

En particulier, il y a une erreur dans le rendu par l'Adreno 630 d'un shader complexe mais valide qui peut être exploité pour geler l'appareil puis éventuellement le redémarrer. Un shader est simplement un programme qui permet au GPU de restituer une image. GraphiquesFuzz n'a pas conçu la page WebGL dans l'intention malveillante de déclencher ce bug, mais a plutôt déclaré qu'il avait été découvert accidentellement lors de ses tests standard de stabilité GPU des appareils. Une fois qu'ils ont découvert que cet accident à distance était reproductible, l'entreprise a contacté Développeurs XDA pour faciliter le processus de divulgation avec Qualcomm et Samsung.

Reproduction de crash WebGL sur le Snapdragon Samsung Galaxy S9

Avant de contacter les représentants de l'une ou l'autre société, nous avons validé GraphiquesFuzzLes résultats de sur notre propre appareil. GraphiquesFuzz avons créé une page Web spéciale sur laquelle nous pouvons tester, et nous avons choisi les 5 navigateurs Internet les plus populaires sur le Google Play Store pour voir ce qui se passerait. Le tableau ci-dessous montre les effets du rendu du shader complexe sur 5 navigateurs Web différents.

Appareil testé: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)

Système opérateur: Android 8.0.0 Oréo SM-G965U

Navigateur Web

Résultat

Google Chrome v65.0.3325.109

Se fige pendant environ 2 secondes seulement

Samsung Internet v7.0.10.46

Se fige puis déclenche finalement un redémarrage complet

Opéra v45.1.2246.125351

Gèle le téléphone

MicrosoftEdge v1.0.0.1726

Se fige pendant environ 3 secondes seulement

Firefox v59.0.2

Le navigateur plante

Google Chrome et Microsoft Edge gèleront le téléphone pendant quelques secondes et généreront une erreur WebGL, mais l'appareil finira par bien fonctionner. GraphiquesFuzz nous ont signalé qu'ils étaient en discussion avec l'équipe de Google Chrome depuis un certain temps et qu'ils avaient appris que Chrome implémente un mécanisme qui met fin au processus GPU après une période de temps définie pour empêcher un téléphone plein accident. Opera gèle le téléphone, mais ne déclenche pas de redémarrage. L'application Firefox elle-même plante mais le téléphone va bien. Enfin, l'accès à la page via Samsung Internet entraîne un ralentissement fulgurant du téléphone avant de déclencher le redémarrage complet du téléphone.

Voici une démonstration vidéo du crash :

Explication détaillée de l'erreur

GraphiquesFuzz a effectué une enquête plus approfondie qui indique que le problème provoquant le redémarrage du téléphone est dans le pilote GPU du Qualcomm Adreno 630 qui fait partie du Qualcomm Snapdragon 845 système sur puce. GraphiquesFuzz a collecté un journal sur le crash, que nous avons intégré ci-dessous. Pour donner un bref résumé de ce qui se passe, lorsque le téléphone restitue le shader complexe, le GPU définit quelque chose qu'on appelle une « clôture ». Une clôture est utilisée pour orchestrer l'accès à la mémoire partagée entre le CPU et GPU. Un GPU mobile, contrairement à un ordinateur de bureau, a accès à la même RAM que le CPU, donc lorsqu'un jeu est joué ou que quelque chose d'autre est rendu, il utilise une clôture pour accéder à cette mémoire partagée. Sur un appareil doté de graphiques discrets, le GPU lui-même possède sa propre mémoire. Tous les téléphones mobiles actuels partagent la mémoire vidéo et la mémoire vive avec le stockage flash de la RAM. Le problème ici est que la clôture ne parvient pas à se terminer, ce qui déclenche une panique du noyau et provoque le redémarrage du téléphone.

Panique complète du noyau avant le redémarrage

[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

En savoir plus

GraphiquesFuzz estime que la raison pour laquelle ce problème ne se produit que sur le navigateur Internet Samsung est due au chien de garde du GPU. Parfois, un GPU peut se bloquer sur des shaders de longue durée, auquel cas le navigateur ou le système d'exploitation dispose généralement d'un chien de garde GPU qui force le redémarrage d'un pilote graphique qui ne répond pas. Le GraphiquesFuzz Le shader de test a plusieurs boucles for qui peuvent rendre le rendu plus long, mais il s'agit toujours d'un shader valide. Plusieurs autres appareils, dont le Samsung Galaxy S9 Exynos 9810 avec le GPU Mali-G72, parviennent à restituer ce shader. Ainsi, l'équipe de GraphiquesFuzz est arrivé à la conclusion que cette erreur se produit en raison d'un pilote GPU défectueux pour l'Adreno 630.

Le Google Pixel 2 XL équipé du GPU Adreno 540 du Qualcomm Snapdragon 835 exécutant la même version du navigateur Internet Samsung ralentit à un rythme effréné. eh bien, cela signifie que cette erreur pourrait être un problème avec le pilote GPU Qualcomm rendant le shader et le chien de garde du navigateur Samsung ne mettant pas fin au service.

Espérons que Qualcomm puisse diagnostiquer le problème sous-jacent de son pilote GPU qui provoque le redémarrage et fournir bientôt un pilote corrigé à Samsung. Bien entendu, cela pourrait prendre un certain temps avant que cette mise à jour ne se propage aux utilisateurs finaux. En attendant, nous nous attendons à ce que Samsung mette à jour son navigateur Web Internet pour atténuer les problèmes. le problème (au moins l'empêcher d'être exploité via une page Web), correspondant au comportement de Google Chrome. Bien que ce problème soit connu pour affecter le Samsung Galaxy S9/S9+ Qualcomm Snapdragon 845, il pourrait également affecter davantage d'appareils équipés du Snapdragon 845.

Si vous souhaitez tester la fiabilité du GPU de votre propre appareil mobile ou de bureau, l'équipe de GraphiquesFuzz a mis en place une démonstration d'application Web qui vous permet d'exécuter certains de leurs shaders valides sur votre appareil. Vous pouvez accéder à cette page Web en en suivant ce lien.

Chronologie de la divulgation

  • 28 mars 2018: GraphiquesFuzz tendu la main à Développeurs XDA nous informant du problème. Développeurs XDA reproduit le problème sur notre propre Samsung Galaxy S9+ (SM-G965U).
  • 29 mars 2018: GraphiquesFuzz a contacté plus de détails et créé des pages Web spéciales pour les employés de Qualcomm et Samsung afin de reproduire le bug
  • 30 mars 2018: Développeurs XDA a contacté Samsung et Qualcomm avec tous les détails du rapport. Notre contact Qualcomm nous a répondu pour accuser réception de notre message.
  • 2 avril 2018: Notre contact Samsung nous a répondu pour accuser réception de notre message.
  • 4 avril 2018: Notre contact Samsung nous a recommandé de déposer un rapport chez Samsung Rapports de sécurité page. Développeurs XDA a déposé un rapport et un ingénieur Samsung a été affecté au rapport.