CVE-2026-93287 in Linuxinformazioni

Riassunto

di VulDB • 24/09/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

i2c: smbus: rifiutare trasferimenti di blocco di dimensioni eccessive nel percorso comune

La lunghezza dei dati del trasferimento di blocco SMBus data->block[0] viene convalidata in i2c_smbus_xfer_emulated(), ma tale controllo avviene troppo tardi per i tracepoint e viene completamente saltato quando l'adattatore fornisce un'implementazione nativa di smbus_xfer. Ciò consente a lunghezze di blocco eccessive controllate dall'utente di raggiungere le chiamate memcpy dei tracepoint e i callback del driver senza alcuna verifica.

Aggiungere una convalida anticipata in __i2c_smbus_xfer() che rifiuti i trasferimenti di blocco la cui lunghezza fornita dal chiamante è zero o supera I2C_SMBUS_BLOCK_MAX prima che venga attivato qualsiasi tracepoint o eseguito il callback del driver. data->block[0] viene compilato dal dispositivo durante le letture SMBus a blocco, quindi il controllo è limitato alle operazioni in cui la lunghezza è effettivamente fornita dal chiamante. Questo approccio è coerente con la convenzione -EINVAL esistente nel percorso emulato e protegge tutti i consumatori downstream contemporaneamente: il tracepoint smbus_write, tutte le implementazioni native di smbus_xfer dei driver e il percorso emulato.

Due bug distinti sono risolti da questa modifica:

Bug 1: OOB (Out-of-Bounds) nel tracepoint smbus_write (include/trace/events/smbus.h) trace_smbus_write() viene attivato prima di qualsiasi convalida e copia data->block[0]+1 byte in un buffer di evento da 34 byte. Con block[0]=0xfe, il tracepoint copia 255 byte, causando un overflow di 221 byte.

BUG: KASAN: stack-out-of-bounds in trace_event_raw_event_smbus_write+0x27c/0x530 Lettura di dimensione 255 all'indirizzo ffff88800d98fcf8 da parte del task poc_smbus/91 Call Trace: <TASK> __asan_memcpy+0x23/0x80 trace_event_raw_event_smbus_write+0x27c/0x530 __i2c_smbus_xfer+0x43a/0xa40 i2c_smbus_xfer+0x19e/0x340 i2cdev_ioctl_smbus+0x38f/0x7f0 i2cdev_ioctl+0x35e/0x680 __x64_sys_ioctl+0x147/0x1e0 do_syscall_64+0xcf/0x15a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK>

Bug 2: OOB (Out-of-Bounds) in i2c-stub I2C_SMBUS_I2C_BLOCK_DATA (drivers/i2c/i2c-stub.c) stub_xfer() implementa .smbus_xfer direttamente e limita solo block[0] contro il comando da 256, non rispetto a I2C_SMBUS_BLOCK_MAX. Con block[0]=0xff e command=0, il ciclo accede a block[1+i] per i fino a 254, ben oltre l'unione da 34 byte.

UBSAN: array-index-out-of-bounds in drivers/i2c/i2c-stub.c:223:44 indice 34 è fuori intervallo per il tipo '__u8 [34]'
Call Trace: <TASK> __ubsan_handle_out_of_bounds+0xd7/0x120 stub_xfer+0x1971/0x198f [i2c_stub]
__i2c_smbus_xfer+0x306/0xa40 i2c_smbus_xfer+0x19e/0x340 i2cdev_ioctl_smbus+0x38f/0x7f0 i2cdev_ioctl+0x35e/0x680 __x64_sys_ioctl+0x147/0x1e0 do_syscall_64+0xcf/0x15a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK>

Entrambi i trace sono stati riprodotti su v7.0-rc6+i2c/for-current con KASAN e UBSAN abilitati.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsabile

Linux

Prenotare

17/09/2026

Divulgazione

24/09/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Might our Artificial Intelligence support you?

Check our Alexa App!