Snapdragon Samsung Galaxy S9 має помилку стабільності графічного процесора, яку можна використати для запуску віддаленого перезавантаження

Samsung Galaxy S9 і Galaxy S9+ були представлені на кількох ринках, включаючи США, Гонконг і частини Латинської Америки, з системою-на-чіпі Qualcomm Snapdragon 845. Британська фірма GraphicsFuzz виявила помилку стабільності графічного процесора, яку можна використати для запуску віддаленого перезавантаження/збою телефону.

Новий Samsung Galaxy S9 містить найновішу систему на чіпі Qualcomm Snapdragon 845 для кількох ринків, включаючи Гонконг, Сполучені Штати, Канаду та частини Латинської Америки. На деяких ринках Samsung часто обирає останній флагманський процесор Qualcomm Snapdragon замість свого внутрішнього процесора Exynos. Зазвичай це так у Сполучених Штатах, за винятком Samsung Galaxy S6. Для звичайного споживача відмінності між варіантами Exynos 9810 і Snapdragon 845 невеликі. Однак під капотом різниця в чіпсетах може призвести до кардинально різного досвіду.

AnandtechОгляд Snapdragon Galaxy S9 і Exynos Galaxy S9 виявив різкі відмінності в продуктивності і час автономної роботи двох моделей, причому модель Snapdragon легко перевершує модель Exynos. За словами британської компанії під назвою «З цими двома абсолютно різними чіпсетами, різниця в продуктивності, здається, не єдина проблема цього разу».

GraphicsFuzz. GraphicsFuzz – нова компанія, яка спеціалізується на тестуванні надійності GPU на пристроях. Вони розробляють тести для пошуку помилок у графічних драйверах і пропонують допомогу в діагностиці основних причин будь-яких проблем, які вони виявляють. Наприклад, команда виявила проблему безпеки впливає на драйвер ARM для Samsung Galaxy S6, за що вони отримали винагороду за помилку від Google. Під час тестування Snapdragon Samsung Galaxy S9, GraphicsFuzz знайшли помилку в графічному драйвері Adreno 630, яка дозволяє їм ініціювати перезавантаження всього телефону через дійсну Інтернет-сторінку WebGL під час перегляду за допомогою стандартного Інтернет-браузера Samsung.

Зокрема, існує помилка у рендерингу Adreno 630 складного, але дійсного шейдера, який можна використати, щоб змусити пристрій зависнути та зрештою перезавантажити. Шейдер — це просто програма, яка дозволяє GPU рендерити зображення. GraphicsFuzz не розробили сторінку WebGL зі зловмисним наміром викликати цю помилку, а натомість кажуть, що її випадково виявили під час стандартного тестування стабільності GPU пристроїв. Коли вони виявили, що цей віддалений збій можна відтворити, компанія звернулася до нього XDA-розробники щоб полегшити процес розкриття як Qualcomm, так і Samsung.

Збійне відтворення WebGL на Snapdragon Samsung Galaxy S9

Перш ніж зв’язатися з представниками будь-якої компанії, ми перевірили GraphicsFuzzвисновки на нашому власному пристрої. GraphicsFuzz створили спеціальну веб-сторінку для тестування, і ми вибрали 5 найпопулярніших Інтернет-браузерів у Google Play Store, щоб побачити, що станеться. У наведеній нижче таблиці показано ефекти відтворення складного шейдера в 5 різних веб-переглядачах.

Перевірено пристрій: Qualcomm Snapdragon 845 Samsung Galaxy S9+ (SM-G965U)

Операційна система: Android 8.0.0 Oreo SM-G965U

Веб-браузер

Результат

Google Chrome v65.0.3325.109

Зависає лише на ~2 секунди

Samsung Internet v7.0.10.46

Зависає, а потім ініціює повне перезавантаження

Opera v45.1.2246.125351

Зависає телефон

Microsoft Edge v1.0.0.1726

Зависає лише на ~3 секунди

Firefox v59.0.2

Браузер дає збої

І Google Chrome, і Microsoft Edge призупинять роботу телефону на кілька секунд і створять помилку WebGL, але зрештою пристрій буде в порядку. GraphicsFuzz повідомили нам, що вони деякий час обговорювали з командою Google Chrome і дізналися що Chrome реалізує механізм, який завершує процес GPU після встановленого періоду часу, щоб запобігти повному завантаженню телефону аварія. Opera зависає телефон, але не викликає перезавантаження. Сам додаток Firefox виходить з ладу, але з телефоном все гаразд. Нарешті, доступ до сторінки через Інтернет Samsung спричиняє сповільнення телефону до повзання перед повним перезавантаженням телефону.

Ось відео демонстрації аварії:

Детальне пояснення помилки

GraphicsFuzz провів більш глибоке дослідження, яке вказує на те, що проблема, яка спричиняє перезавантаження телефону у драйвері GPU для Qualcomm Adreno 630, який є частиною Qualcomm Snapdragon 845 система на чіпі. GraphicsFuzz зібрав журнал про збій, який ми вставили нижче. Щоб дати короткий підсумок того, що відбувається, коли телефон відтворює складний шейдер, GPU встановлює те, що називається "паркан". Огорожа використовується для організації доступу до спільної пам’яті між ЦП і GPU. Мобільний графічний процесор, на відміну від настільного комп’ютера, має доступ до тієї самої оперативної пам’яті, що й центральний процесор, тому під час гри чи рендерингу щось інше він використовує огорожу для доступу до спільної пам’яті. На пристрої з дискретною графікою графічний процесор має власну пам’ять. Усі сучасні мобільні телефони спільно використовують відеопам’ять і оперативну пам’ять із флеш-пам’яттю RAM. Проблема тут полягає в тому, що паркан не може завершити роботу, що викликає паніку ядра та змушує телефон перезавантажуватися.

Повна паніка ядра перед перезавантаженням

[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

читати далі

GraphicsFuzz вважає, що ця проблема виникає лише в Інтернет-браузері Samsung через сторожовий таймер GPU. Іноді графічний процесор може зависати на тривалих шейдерах, і в цьому випадку браузер або ОС зазвичай мають сторожовий таймер GPU, який примусово перезапускає графічний драйвер, який не відповідає. The GraphicsFuzz Тестовий шейдер має кілька циклів for, які можуть призвести до довшого рендерингу, але він все ще дійсний. Декільком іншим пристроям, включаючи Exynos 9810 Samsung Galaxy S9 із графічним процесором Mali-G72, вдається відтворити цей шейдер. Таким чином, команда при GraphicsFuzz дійшов висновку, що ця помилка виникає через несправний драйвер GPU для Adreno 630.

Google Pixel 2 XL із графічним процесором Adreno 540 Qualcomm Snapdragon 835, який працює з тією ж версією веб-браузера Samsung, сповільнюється до повзання, ніж це означає, що ця помилка може бути проблемою, оскільки драйвер графічного процесора Qualcomm відтворює шейдер, а сторожовий таймер браузера Samsung не завершує обслуговування.

Сподіваємось, Qualcomm зможе діагностувати основну проблему в драйвері графічного процесора, яка спричиняє перезавантаження, і найближчим часом надасть виправлений драйвер Samsung. Звичайно, може пройти деякий час, перш ніж це оновлення пошириться серед кінцевих користувачів. Тим часом ми очікуємо, що Samsung оновить веб-браузер Samsung для пом’якшення наслідків проблема (принаймні запобігання її використанню через веб-сторінку), що відповідає поведінці Google Chrome. Хоча відомо, що ця проблема впливає на Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+, вона також може вплинути на інші пристрої з Snapdragon 845.

Якщо ви зацікавлені в перевірці надійності графічного процесора вашого власного мобільного або настільного пристрою, команда в GraphicsFuzz зібрав демонстрацію веб-програми, яка дозволяє запускати деякі з їхніх дійсних шейдерів на вашому пристрої. Ви можете отримати доступ до цієї веб-сторінки за допомогою за цим посиланням.

Графік розкриття інформації

  • 28 березня 2018 р: GraphicsFuzz потягнувся до XDA-розробники інформуючи нас про проблему. XDA-розробники відтворили проблему на нашому власному Samsung Galaxy S9+ (SM-G965U).
  • 29 березня 2018 р: GraphicsFuzz надали додаткові відомості та створили спеціальні веб-сторінки для співробітників Qualcomm і Samsung, щоб відтворити помилку
  • 30 березня 2018 р: XDA-розробники звернувся до Samsung і Qualcomm із повною інформацією про звіт. Наш контакт із Qualcomm зв’язався з нами, підтвердивши, що наше повідомлення отримано.
  • 2 квітня 2018 р: наш контакт із Samsung зв’язався з нами, підтвердивши, що наше повідомлення отримано.
  • 4 квітня 2018 р: Наш контакт із Samsung порекомендував нам подати звіт до Samsung Звітування безпеки сторінки. XDA-розробники подав звіт, і для звіту було призначено інженера Samsung.