CVE-2023-53778 in Linux
Riassunto
di VulDB • 26/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
accel/qaic: Pulizia del controllo degli overflow interi in map_user_pages()
La funzione encode_dma() effettua alcune validazioni su in_trans->size, ma sarebbe più chiaro spostare tali controlli in find_and_map_user_pages().
encode_dma() disponeva di due controlli:
if (in_trans->addr + in_trans->size < in_trans->addr || !in_trans->size) return -EINVAL;
La variabile in_trans->addr è l'indirizzo iniziale. La variabile in_trans->size è la dimensione totale del trasferimento. Il trasferimento può avvenire in parti e resources->xferred_dma_size tiene traccia di quanti byte sono già stati trasferiti.
Questa patch introduce una nuova variabile "remaining" che rappresenta la quantità da trasferire (in_trans->size) meno l'importo già trasferito (resources->xferred_dma_size).
Ho modificato il controllo per verificare se in_trans->size è zero, sostituendolo con un controllo su whether in_trans->size sia inferiore a resources->xferred_dma_size. Se sono stati già trasferiti più byte di quanto indicato da in_trans->size, i byte rimanenti sarebbero negativi, il che non ha senso. Se ci sono zero byte rimanenti da copiare, si restituisce semplicemente successo.
Il controllo in encode_dma() verificava che "addr + size" potesse andare in overflow e, salvo un bug del driver, dovrebbe funzionare; tuttavia è più semplice verificare questo scenario se lo si fa per parti. Innanzitutto si verifica che "in_trans->addr + resources->xferred_dma_size" sia sicuro. Successivamente si verifica che "xfer_start_addr + remaining" sia sicuro.
L'ultima preoccupazione era relativa al fatto che stiamo gestendo valori u64, ma sui sistemi a 32 bit la funzione kmalloc() troncherà le dimensioni a 32 bit. Ho quindi calcolato "total = in_trans->size + offset_in_page(xfer_start_addr);" e restituito -EINVAL se il risultato fosse >= SIZE_MAX. Ciò non influirà sui sistemi a 64 bit.
If you want to get best quality of vulnerability data, you may have to visit VulDB.