PT-2024-31320 · Linux+5 · Linux Kernel+5
Publicado
2024-09-04
·
Atualizado
2025-06-09
·
CVE-2024-44952
CVSS v3.1
5.5
Média
| Vetor | AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Nome do software vulnerável e versões afetadas
Versões do kernel Linux anteriores à 6.6.50
Descrição
O problema está relacionado a um possível impasse no núcleo de drivers do kernel Linux, especificamente na função
uevent show(). Essa função tenta desreferenciar dev->driver->name, mas não há uma maneira segura de fazer isso, a menos que o atributo seja definido via (struct device driver).dev groups. O anti-padrão de chamar device lock() no manipulador de atributos apresenta risco de deadlocks com caminhos de código que removem atributos do dispositivo enquanto mantêm o bloqueio. Esse impasse normalmente é invisível para o lockdep, já que o device lock() está marcado como lockdep set novalidate class(), mas alguns subsistemas alocam uma chave lockdep local para @dev->mutex, revelando relatórios do tipo: AVISO: possível dependência de bloqueio circular detectada. A observação é que objetos de driver normalmente têm vida útil muito mais longa do que objetos de dispositivo, tornando razoável realizar a desreferência sem bloqueio de um ponteiro @driver, mesmo que haja uma corrida de desanexamento de um dispositivo. Dada a raridade do cancelamento de registro de drivers, synchronize rcu() é usado em module remove driver() para eliminar quaisquer corridas potenciais.Recomendações
Para resolver este problema, atualize o kernel do Linux para a versão 6.6.50 ou posterior. Se a atualização não for possível, considere aplicar o patch que corrige a condição de corrida entre
uevent show() e a desconexão do driver. Como solução temporária, considere desativar a função uevent show() até que um patch esteja disponívelCorreção
Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾
Identificadores relacionados
Produtos afetados
Alt Linux
Linuxmint
Linux Kernel
Red Hat
Suse
Ubuntu