O Snapdragon Samsung Galaxy S9 tem um bug de estabilidade de GPU que pode ser explorado para acionar reinicializações remotas

O Samsung Galaxy S9 e o Galaxy S9+ foram lançados em vários mercados, incluindo os EUA, Hong Kong e partes da América Latina com o sistema em chip Qualcomm Snapdragon 845. A empresa britânica GraphicsFuzz descobriu um bug de estabilidade da GPU que pode ser explorado para acionar reinicializações/travamentos remotos do telefone.

O novo Samsung Galaxy S9 inclui o mais recente sistema em chip Qualcomm Snapdragon 845 para vários mercados, incluindo Hong Kong, Estados Unidos, Canadá e partes da América Latina. A Samsung frequentemente escolhe o mais recente SoC Qualcomm Snapdragon em vez de seu Exynos SoC interno em alguns mercados. Este geralmente é o caso nos Estados Unidos, com exceção do Samsung Galaxy S6. Para o consumidor médio, há pouca diferença entre as variantes Exynos 9810 e Snapdragon 845. Nos bastidores, no entanto, a diferença nos chipsets pode levar a experiências totalmente diferentes.

Anandtecha análise do Snapdragon Galaxy S9 e do Exynos Galaxy S9 revelou grandes diferenças no desempenho e duração da bateria entre os dois modelos, com o modelo Snapdragon superando facilmente o modelo Exynos. Com esses dois chipsets muito diferentes, a diferença no desempenho não parece ser a única preocupação desta vez, de acordo com uma empresa sediada no Reino Unido chamada 

GráficosFuzz. GráficosFuzz é uma empresa iniciante especializada em testar a confiabilidade da GPU em dispositivos. Eles desenvolvem testes para procurar bugs em drivers gráficos e oferecem ajuda no diagnóstico das causas raízes de quaisquer problemas que descubram. Por exemplo, a equipe descobriu um problema de segurança afetando o driver ARM para o Samsung Galaxy S6, pelo qual eles receberam uma recompensa por bug do Google. Durante os testes do Snapdragon Samsung Galaxy S9, GráficosFuzz encontrou um erro no driver gráfico do Adreno 630 que permite acionar uma reinicialização de todo o telefone através de uma página WebGL válida da Internet ao navegar com o navegador de Internet padrão da Samsung.

Em particular, há um erro na renderização do Adreno 630 de um shader complexo, mas válido, que pode ser explorado para fazer o dispositivo congelar e, eventualmente, reiniciar. Um shader é simplesmente um programa que permite à GPU renderizar uma imagem. GráficosFuzz não projetou a página WebGL com intenção maliciosa de acionar esse bug e, em vez disso, disse que foi descoberto acidentalmente durante o teste padrão de estabilidade de GPU de dispositivos. Assim que descobriram que essa falha remota era reproduzível, a empresa entrou em contato com Desenvolvedores XDA para facilitar o processo de divulgação tanto com a Qualcomm quanto com a Samsung.

Reprodução de falhas do WebGL no Snapdragon Samsung Galaxy S9

Antes de entrarmos em contato com representantes de qualquer uma das empresas, validamos GráficosFuzzas descobertas em nosso próprio dispositivo. GráficosFuzz criamos uma página especial para testarmos e escolhemos os 5 navegadores de Internet mais populares na Google Play Store para ver o que aconteceria. A tabela abaixo mostra os efeitos da renderização do shader complexo em 5 navegadores diferentes.

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

Sistema operacional: Android 8.0.0 Oreo SM-G965U

Navegador da Web

Resultado

Google Chrome v65.0.3325.109

Congela por aproximadamente 2 segundos apenas

Internet Samsung v7.0.10.46

Congela e eventualmente aciona uma reinicialização completa

Ópera v45.1.2246.125351

Congela o telefone

Microsoft Edge v1.0.0.1726

Congela por cerca de 3 segundos apenas

Firefox v59.0.2

O navegador trava

Tanto o Google Chrome quanto o Microsoft Edge congelarão o telefone por alguns segundos e gerarão um erro WebGL, mas no final o dispositivo ficará bem. GráficosFuzz nos relataram que estão discutindo com a equipe do Google Chrome há algum tempo e aprenderam que o Chrome implemente um mecanismo que encerra o processo da GPU após um determinado período de tempo para evitar um telefone cheio colidir. O Opera congela o telefone, mas não inicia a reinicialização. O próprio aplicativo Firefox trava, mas o telefone está bem. Por último, acessar a página via Samsung Internet faz com que o telefone fique lento antes de acionar a reinicialização completa do telefone.

Aqui está um vídeo de demonstração do acidente:

Explicação detalhada do erro

GráficosFuzz realizou uma investigação mais aprofundada que indica que o problema que está causando a reinicialização do telefone é no driver GPU do Qualcomm Adreno 630 que faz parte do Qualcomm Snapdragon 845 sistema no chip. GráficosFuzz coletou um log sobre a falha, que incorporamos abaixo. Para dar um breve resumo do que está acontecendo, quando o telefone renderiza o shader complexo, a GPU define algo chamado de "cerca". Uma cerca é usada para orquestrar o acesso à memória compartilhada entre a CPU e GPU. Uma GPU móvel, ao contrário de um desktop, tem acesso à mesma RAM que a CPU, portanto, quando um jogo é jogado ou algo é renderizado, ela usa uma cerca para acessar a memória compartilhada. Em um dispositivo que possui gráficos discretos, a própria GPU possui memória própria. Todos os telefones celulares atuais compartilham memória de vídeo e memória de acesso aleatório com o armazenamento flash da RAM. O problema aqui é que a cerca não consegue ser concluída, o que desencadeia um kernel panic e faz com que o telefone seja reinicializado.

Conclua o Kernel Panic antes da reinicialização

[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

consulte Mais informação

GráficosFuzz acredita que o motivo pelo qual esse problema ocorre apenas no navegador de Internet da Samsung é o watchdog da GPU. Às vezes, uma GPU pode travar em shaders de longa duração; nesse caso, o navegador ou sistema operacional normalmente possui um watchdog de GPU que força a reinicialização de um driver gráfico que não responde. O GráficosFuzz O shader de teste tem vários loops for que podem demorar mais para renderizar, mas ainda é um shader válido. Vários outros dispositivos, incluindo o Exynos 9810 Samsung Galaxy S9 com GPU Mali-G72, conseguem renderizar este shader. Assim, a equipe do GráficosFuzz cheguei à conclusão de que esse erro está acontecendo devido a um driver de GPU com defeito para o Adreno 630.

O Google Pixel 2 XL com GPU Adreno 540 da Qualcomm Snapdragon 835 executando a mesma versão do navegador de Internet Samsung fica lento e lento bem, isso significa que esse erro pode ser um problema com o driver da GPU Qualcomm renderizando o sombreador e o watchdog do navegador Samsung não encerrando o serviço.

Esperançosamente, a Qualcomm pode diagnosticar o problema subjacente em seu driver de GPU que causa a reinicialização e fornecer um driver corrigido para a Samsung em breve. Claro, pode levar algum tempo até que esta atualização se propague aos usuários finais. Enquanto isso, esperamos que a Samsung empurre uma atualização para o navegador de Internet da Samsung para mitigar o problema (pelo menos evitando que ele seja explorado por meio de uma página da web), correspondendo ao comportamento do Google Cromada. Embora se saiba que esse problema afeta o Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+, ele também pode afetar mais dispositivos com o Snapdragon 845.

Se você estiver interessado em testar a confiabilidade da GPU do seu próprio dispositivo móvel ou desktop, a equipe da GráficosFuzz reuniu uma demonstração de webapp que permite executar alguns de seus shaders válidos em seu dispositivo. Você pode acessar essa página da web por seguindo este link.

Cronograma de divulgação

  • 28 de março de 2018: GráficosFuzz estendeu a mão para Desenvolvedores XDA informando-nos sobre o assunto. Desenvolvedores XDA reproduzimos o problema em nosso próprio Samsung Galaxy S9 + (SM-G965U).
  • 29 de março de 2018: GráficosFuzz entrou em contato com mais detalhes e criou páginas da web especiais para funcionários da Qualcomm e Samsung reproduzirem o bug
  • 30 de março de 2018: Desenvolvedores XDA entrou em contato com a Samsung e a Qualcomm com todos os detalhes do relatório. Nosso contato da Qualcomm entrou em contato conosco informando que nossa mensagem foi recebida.
  • 2 de abril de 2018: Nosso contato da Samsung entrou em contato conosco confirmando que nossa mensagem foi recebida.
  • 4 de abril de 2018: Nosso contato da Samsung recomendou que registremos uma denúncia na Samsung Relatórios de segurança página. Desenvolvedores XDA apresentou um relatório e um engenheiro da Samsung foi designado para o relatório.