Um hack feio dentro do kernel Linux que está na linha principal há mais de três anos foi anunciado. Devido a um buggy X.Org Server/xf86-video-modesetting DDX, o kernel Linux tem imposto um comportamento diferente sobre se um processo inicia com”X”e, por sua vez, desabilita o suporte de configuração de modo atômico.
O pesquisador de segurança do Linux, Jason Donenfeld (que também é conhecido por criar o WireGuard), se deparou com esse feio hack de código dentro do kernel.
Donenfeld comentou neste fim de semana na a lista de discussão do kernel
a>:
Isto reverte 26b1d3b527e7 (“drm/atomic: Tire os brinquedos atômicos de X”), um kludge tipo rootkit que não deve estar dentro de um kernel de uso geral. É o tipo de hack de depuração que usarei momentaneamente, mas nunca cometerei, ou uma espécie de truque de malware babbies-first-process-hider.
A história de fundo é que algum código de espaço de usuário–xorg-server–tem um DDX de configuração de modo que não está realmente codificado corretamente. Com ninguém querendo mais manter o X11, em vez de corrigir o código com bugs, o kernel foi ajustado para evitar ter que tocar no X11. Uma chatice, mas é justo: se o kernel não quiser mais suportar alguma API de espaço do usuário, a coisa certa a fazer é providenciar um fallback gracioso onde o espaço do usuário pensa que não está disponível de maneira gerenciável.
Entretanto, a *maneira* de fazer isso é apenas verificar `current->comm[0]==’X’`, e desativá-lo apenas para esse caso. Então isso significa que *não* é simplesmente uma questão de o kernel não querer mais suportar uma API de espaço de usuário específica, mas sim o kernel não querer suportar xorg-server, em teoria, mas na verdade, acontece que são todos os processos que comece com’X’.
Jogar jogos com comunicação atual como este é obviamente errado, e é muito chocante que isso tenha sido cometido.
O commit para este kernel com a verificação do primeiro caractere”X”foi feita em setembro de 2019. O argumento nesse commit do kernel Linux na época era:
O-modesetting ddx tem uma idéia totalmente quebrada de como o atomic funciona:
-não desabilita conectores antigos, assumindo que eles são desabilitados automaticamente como com o setcrtc legado
-assume que ASYNC_FLIP está conectado para o ioctl atômico
-nem uma única chamada para TEST_ONLY[Em outras palavras] a implementação é uma tradução 1:1 de ioctls legados para atômico, que é a) quebrado b) inútil.
Já temos bugs tanto no i915 quanto no amdgpu-DC, onde isso nos impede de habilitar recursos interessantes.
Se alguém se importa com o atômico em X, podemos facilmente adicionar um novo nível atômico (req->value==2) para que X recupere os brinquedos brilhantes.
Desde que essas versões quebradas de-modesetting foram lançadas, não há outra maneira de sair desse vínculo.
A”boa”notícia é que desde então no lado do espaço do usuário em 2019, o código xf86-video-modesetting foi em frente e desativou o suporte atômico por padrão. Então, tecnicamente, se estiver executando uma pilha X.Org atualizada nos últimos três anos, esse hack do kernel não é mais necessário, pois o espaço do usuário está evitando a API atômica.
Vamos ver se Linus Torvalds concorda com a remoção desse hack, já que, afinal, ele vai contra o princípio de”não quebrar o espaço do usuário”ao regredir o sistema se ficar com uma pilha desatualizada do X.Org Server e querendo rodar com uma versão futura do kernel. Veremos, mas surpreendentemente, levou três anos para que esse código sujo fosse criticado.