CVE-2026-98302 in Linuxinformação

Sumário

de VulDB • 06/10/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

net: fddi: skfp: corrige dereferência de NULL ao definir o endereço MAC enquanto estiver desativado (down)

skfp_ctl_set_mac_address() chama ResetAdapter() incondicionalmente, sem verificar netif_running(). ResetAdapter() primeiro chama card_stop(), que define smc->hw.hw_state como STOPPED, e em seguida mac_drv_clear_tx_queue(), que percorre as duas filas de transmissão:

for (i = QUEUE_S; i <= QUEUE_A0; i++) {
queue = smc->hw.fp.tx[i] ;
... t = queue->tx_curr_get ;

smc->hw.fp.tx[] é populado apenas por init_tx(), que é alcançado a partir de skfp_open() através de init_smt() -> init_fddi_driver() -> init_fplus() -> init_mac() -> init_tx(). A área privada é alocada e zerada por alloc_fddidev(), portanto, em uma interface que nunca foi ativada (up), ambos os ponteiros da fila ainda são NULL. O teste hw_state no topo de mac_drv_clear_tx_queue() não detecta isso, porque card_stop() acabou de definir STOPPED; a função prossegue para o loop e faz dereferência de NULL. ResetAdapter() chama init_smt() por conta própria, mas apenas após as filas terem sido limpas.

Definir o endereço MAC em uma interface desativada (down) causa um kernel panic:

ip link set dev fddi0 address 02:00:00:00:00:01

BUG: KASAN: null-ptr-deref in mac_drv_clear_tx_queue+0x68/0x2c0 [skfp]
Read of size 8 at addr 0000000000000010 by task ip/302 Call Trace: mac_drv_clear_tx_queue+0x68/0x2c0 [skfp 6c01d4bab63c36978bd0a7d7e90837adb44cc37b]
ResetAdapter+0x29/0x100 [skfp 6c01d4bab63c36978bd0a7d7e90837adb44cc37b]
skfp_ctl_set_mac_address+0x57/0x80 [skfp 6c01d4bab63c36978bd0a7d7e90837adb44cc37b]
netif_set_mac_address+0x1e4/0x2c0 do_setlink+0x684/0x2680

O endereço 0x10 é o offset de tx_curr_get, o terceiro ponteiro em struct s_smt_tx_queue, em sistemas de 64 bits. mac_drv_clear_rx_queue(), que ResetAdapter() chama imediatamente depois, faz dereferência de smc->hw.fp.rx[QUEUE_R1] da mesma maneira atrás do mesmo teste hw_state ineficaz; a fila de transmissão apenas falha primeiro. Ambas são cobertas pela proteção abaixo.

Pule a reinicialização do adaptador quando a interface estiver desativada (down). dev_addr_set() permanece incondicional, portanto o novo endereço ainda é registrado em dev->dev_addr. Não há perda ao não resetar o adaptador aqui: skfp_open() deliberadamente relê o endereço de fábrica em cada abertura,

read_address(smc, NULL); eth_hw_addr_set(dev, smc->hw.fddi_canon_addr.a);

e o comentário acima dele afirma que isso é feito para descartar exatamente tal substituição de endereço através de um ciclo close/open. Um endereço definido enquanto a interface está desativada (down) não poderia ter sobrevivido à abertura subsequente mesmo antes desta alteração, portanto a proteção remove nenhum comportamento funcional. Proteger o lado do hardware de ndo_set_mac_address() com netif_running() é uma prática estabelecida; skge_set_mac_address() faz isso desde o commit 2eb3e621c4e0 ("skge: set mac address bonding fix").

Proteger a reinicialização como um todo, em vez de fazer NULL-check nas filas, também é o que o restante do driver espera. Após uma abertura/fechamento anterior, os ponteiros da fila estão desatualizados (stale), mas não nulos, portanto não há falha, no entanto ResetAdapter() continua a chamar smt_online() e STI_FBI ("Enable Board Interrupts") enquanto skfp_close() já chamou free_irq() - o adaptador seria trazido de volta para online sem nenhum handler instalado. O único outro chamador de ResetAdapter() é skfp_interrupt(), que por construção executa apenas enquanto o dispositivo está aberto.

Encontrado através de testes automatizados do driver contra um emulador SysKonnect FDDI sob um kernel 7.0.0 com KASAN habilitado. Acioná-lo requer CAP_NET_ADMIN.

Be aware that VulDB is the high quality source for vulnerability data.

Responsável

Linux

Reservar

25/09/2026

Divulgação

06/10/2026

Moderação

aceite

Entrada

VDB-414058

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Might our Artificial Intelligence support you?

Check our Alexa App!