Samsung Galaxy S9 и Galaxy S9+ бяха пуснати на няколко пазара, включително САЩ, Хонконг и части от Латинска Америка със системата-върху-чипа Qualcomm Snapdragon 845. Фирмата от Обединеното кралство GraphicsFuzz откри грешка в стабилността на графичния процесор, която може да бъде използвана за задействане на дистанционно рестартиране/срив на телефона.
Новото Samsung Galaxy S9 включва най-новата система-върху-чип Qualcomm Snapdragon 845 за няколко пазара, включително Хонконг, Съединените щати, Канада и части от Латинска Америка. Samsung често избира най-новия водещ Qualcomm Snapdragon SoC пред техния собствен Exynos SoC на някои пазари. Обикновено това е случаят в Съединените щати, с изключение на 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. Мобилният графичен процесор, за разлика от настолния компютър, има достъп до същата RAM памет като процесора, така че когато се играе игра или се изобразява нещо друго, той използва ограда за достъп до споделената памет. На устройство, което има дискретна графика, самият 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 watchdog. Понякога GPU може да се задържи на дълго работещи шейдъри, в който случай браузърът или операционната система обикновено имат GPU watchdog, който принудително рестартира неотговарящ графичен драйвер. The GraphicsFuzz тестовият шейдър има няколко цикъла for, които може да накарат изобразяването му да отнеме повече време, но все още е валиден шейдър. Няколко други устройства, включително Exynos 9810 Samsung Galaxy S9 с Mali-G72 GPU, успяват да рендират този шейдър. Така екипът на GraphicsFuzz стигна до заключението, че тази грешка се случва поради дефектен драйвер на GPU за Adreno 630.
Google Pixel 2 XL с графичния процесор Adreno 540 на Qualcomm Snapdragon 835, работещ със същата версия на интернет браузъра Samsung, се забавя до пълзене като добре – това означава, че тази грешка може да е проблем с драйвера на графичния процесор на Qualcomm, който изобразява шейдъра, а наблюдателят на браузъра на Samsung не прекратява обслужване.
Да се надяваме, че Qualcomm може да диагностицира основния проблем в техния драйвер за GPU, който причинява рестартирането, и скоро да предостави фиксиран драйвер на Samsung. Разбира се, може да мине известно време, преди тази актуализация да се разпространи до крайните потребители. Междувременно очакваме, че Samsung ще наложи актуализация на интернет браузъра на Samsung за смекчаване проблемът (поне предотвратявайки използването му чрез уеб страница), съответстващ на поведението на Google Chrome. Въпреки че е известно, че този проблем засяга Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+, той може да засегне и повече устройства със Snapdragon 845.
Ако се интересувате от тестване на надеждността на GPU на вашето собствено мобилно или настолно устройство, екипът на GraphicsFuzz е събрал демонстрация на webapp, която ви позволява да стартирате някои от техните валидни шейдъри на вашето устройство. Можете да получите достъп до тази уеб страница от следвайки тази връзка.
График на разкриването
- 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 беше назначен за доклада.