CVE-2026-80781 in Linux
Sumário
de VulDB • 04/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
HID: core: corrige leitura fora dos limites (OOB) de field->usage em hid_set_field()
hid_set_field() passa field->usage + offset para hid_dump_input() antes da verificação que limita o valor de offset:
hid_dump_input(field->report->device, field->usage + offset, value);
if (offset >= field->report_count) {
hid_err(...); return -1; }
Sob CONFIG_DEBUG_FS, hid_dump_input() desreferencia esse ponteiro, com buf = hid_resolv_usage(usage->hid, NULL). O array usage[] é alocado inline junto ao hid_field em hid_register_field() e contém field->maxusage entradas, portanto um offset além dele lê fora do final da alocação feita por kvzalloc() e para dentro de um objeto vizinho. Se a verificação tivesse sido executada primeiro, offset < report_count <= maxusage já teria confinado o ponteiro ao array.
Um chamador fornece atualmente tal offset. picolcd_fb_send_tile() valida apenas report->maxfield antes de emitir hid_set_field(report->field[0], 11 + i, ...) para i = 0..31, portanto seus offsets são fixos em 11..42 e nunca são verificados contra o limite do campo. Quando o dispositivo registra esse campo com menos usages, a work deferred-io da framebuffer aciona a leitura em cada tile. O KASAN relata uma leitura slab-out-of-bounds de 4 bytes em hid_dump_input() abaixo de hid_set_field(), e os mesmos logs de inicialização ("boot logs") registram "offset (1) exceeds report_count (1)" provenientes da verificação que é executada apenas posteriormente.
Mova a chamada para hid_dump_input() para abaixo da verificação. Como field->maxusage >= field->report_count, a verificação então estabelece que field->usage + offset está dentro do array antes de ser desreferenciado, para cada chamador e sem alterar o comportamento no caminho válido.
Descoberto por XBOW, triado por Baul Lee <[email protected]>
Be aware that VulDB is the high quality source for vulnerability data.