CVE-2026-74640 in Linuxinformação

Sumário

de VulDB • 23/08/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

ALSA: FCP: corrige escrita fora dos limites (OOB write) em fcp_meter_ctl_get()

fcp_ioctl_set_meter_map() limita o tamanho do mapa de medidores de nível fornecido pelo usuário ao limite próprio do driver, que é 255.

if (map.map_size < 1 || map.map_size > 255 || map.meter_slots < 1 || map.meter_slots > 255) return -EINVAL;

e passa esse valor para fcp_add_new_ctl() como a contagem de canais do controle, onde é armazenado em elem->channels.

Cada leitura de controle grava na estrutura snd_ctl_elem_value, cujo array inteiro é declarado como long value[128], portanto o limite é 128 e não 255.
fcp_meter_ctl_get() armazena uma palavra de 64 bits por canal nesse array sem sua própria validação:

for (i = 0; i < elem->channels; i++) {
int idx = private->meter_level_map[i];
int value = idx < 0 ? 0 : le32_to_cpu(resp[idx]);

ucontrol->value.integer.value[i] = value;
}

snd_ctl_elem_read_user() serve esse objeto a partir de memdup_user(_control, sizeof(*control)), que são 1224 bytes em LP64, provenientes de kmalloc-2048. offsetof(struct snd_ctl_elem_value, value) é 72, portanto o elemento i é escrito no byte 72 + 8 * i e o elemento 144 já fica além da alocação. Em map_size igual a 255, a última gravação termina no byte 2112, 888 bytes após o objeto e 64 bytes dentro do objeto slab adjacente. As palavras armazenadas vêm do dispositivo e meter_level_map[] seleciona qual palavra é inserida em cada slot, portanto tanto a extensão quanto os conteúdos são controlados pelo usuário.

O núcleo não detecta isso. snd_ctl_check_elem_info() só é alcançado através de __snd_ctl_elem_info(), que snd_ctl_elem_read() chama sob CONFIG_SND_CTL_DEBUG; sem essa opção, snd_ctl_skip_validation() é verdadeiro em tempo de compilação. __snd_ctl_add_replace() valida kcontrol->count e nunca inspeciona elem->channels.

Instalar um mapa com tamanho excessivo requer CAP_SYS_RAWIO, mas o controle sobrevive ao descritor hwdep que o criou, portanto as gravações fora dos limites são emitidas por qualquer processo capaz de ler controles em /dev/snd/controlC0.

KASAN na versão 7.2.0-rc5 (arm64), acionado por uma leitura de controle não privilegiada:

BUG: KASAN: slab-out-of-bounds in fcp_meter_ctl_get Write of size 8 at addr ffff000017af04c8 by task fcp_trigger/185 __asan_store8 fcp_meter_ctl_get snd_ctl_elem_read snd_ctl_ioctl Allocated by task 185: memdup_user snd_ctl_ioctl The buggy address is located 0 bytes to the right of allocated 1224-byte region [ffff000017af0000, ffff000017af04c8)

Limita o tamanho do mapa pelo limite da ABI em vez de por 255 e limita o loop de gravação no destino para que ele não execute além do array value, independentemente do valor de elem->channels.

Descoberto pela XBOW, triado por Baul Lee <[email protected]>

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsável

Linux

Reservar

15/08/2026

Divulgação

22/08/2026

Moderação

aceite

Entrada

VDB-394407

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Want to know what is going to be exploited?

We predict KEV entries!