CVE-2026-80780 in Linux
Sumário
de VulDB • 04/09/2026
No kernel Linux, a seguinte vulnerabilidade foi corrigida:
HID: pidff: corrige escrita fora dos limites (OOB) quando hid->inputs está vazio
hid_pidff_init_with_quirks() deriva seu input_dev de
list_entry(hid->inputs.next, struct hid_input, list)
sem verificar primeiro se hid->inputs não está vazio. O membro da lista de struct hid_input está no deslocamento 0; portanto, em uma lista vazia, list_entry() retorna &hid->inputs e a seguinte leitura de input_dev carrega um membro não relacionado de struct hid_device. dev torna-se então um pontor com confusão de tipo (type-confused pointer), e a inicialização do force-feedback escreve através dele: cada set_bit(FF_*, dev->ffbit) armazena 8 bytes em dev + 192, além do final do objeto que dev realmente aliasa, e input_ff_create() adiciona mais gravações de um pontor heap e dois pontores de função.
Até hid-universal-pidff, o único chamador era hid_pidff_init(), proveniente do usbhid, que é executado sob HID_CLAIMED_INPUT e, portanto, sempre possui pelo menos um hid_input. universal_pidff_probe() inicia o dispositivo com HID_CONNECT_DEFAULT & ~HID_CONNECT_FF e depois chama hid_pidff_init_with_quirks() diretamente sempre que o descritor carrega uma página de uso PID, contornando essa proteção. Um descritor de relatório cuja única coleção de aplicação está em HID_UP_PID deixa hid->inputs vazio enquanto hid_connect() ainda tem sucesso através da reivindicação hidraw; assim, a rotina probe atinge list_entry sem proteção adequada.
A gravação ocorre no caminho de detecção USB (USB probe path), na fila de trabalho hotplug, portanto, conectar um dispositivo malicioso é suficiente para acionar o problema; não são necessários software do atacante nem usuário logado. O KASAN relata uma escrita fora dos limites de 8 bytes em hid_pidff_init_with_quirks(), alcançada através de universal_pidff_probe().
Verifique se a lista está vazia antes de derivar dev e retorne -ENODEV, conforme já fazem os outros drivers HID force-feedback. universal_pidff_probe() propaga o erro e desfaz as operações (unwinds).
Descoberto por XBOW, triado por Baul Lee <[email protected]>
Be aware that VulDB is the high quality source for vulnerability data.