CVE-2024-40979 in Linuxinformazioni

Riassunto

di VulDB • 16/06/2026

Nel 2024, il kernel Linux ha introdotto una correzione per un bug critico nel driver `ath12k` che causava un crash durante il resume da suspend. Il problema era legato alla gestione della memoria firmware QMI (Qualcomm Modem Interface).

### Problema Durante il resume da suspend, il firmware richiedeva due segmenti di memoria di grandi dimensioni. Il driver tentava di allocare questa memoria, ma l'allocazione falliva. La funzione di cleanup `ath12k_qmi_free_target_mem_chunk()` veniva chiamata per liberare la memoria già allocata. Tuttavia:

1. Il primo segmento non veniva liberato perché il suo indirizzo (`v.addr`) era stato azzerato a causa del fallimento dell'allocazione, causando una **memory leak**. 2. Il secondo segmento veniva liberato con una dimensione errata (8.454.144 byte invece dei 524.288 byte effettivamente allocati), poiché il driver utilizzava la dimensione richiesta dal firmware invece di quella effettivamente allocata. Questo causava un **crash del kernel** perché si tentava di liberare memoria che risultava ancora in uso o non allocata correttamente.

### Soluzione La correzione, introdotta nel kernel 6.10, modifica la logica di gestione della memoria QMI per:

1. **Tracciare correttamente le dimensioni allocate**: Il driver ora tiene traccia della dimensione effettivamente allocata per ogni segmento, non solo di quella richiesta dal firmware. 2. **Liberare correttamente la memoria**: Durante il cleanup, viene utilizzata la dimensione effettivamente allocata per chiamare `dma_free_coherent()`, evitando il crash. 3. **Prevenire le memory leak**: Anche i segmenti con indirizzo azzerato vengono gestiti correttamente per evitare perdite di memoria.

### Patch Principale La patch è stata integrata nel kernel Linux 6.10. Ecco un estratto delle modifiche chiave:

```c // In ath12k_qmi_msg_mem_request_cb() // Prima: ab->qmi.target_mem[i].size = size;

// Dopo: ab->qmi.target_mem[i].size = size;
ab->qmi.target_mem[i].actual_size = size; // Traccia la dimensione allocata
```

```c // In ath12k_qmi_free_target_mem_chunk() // Prima: dma_free_coherent(dev, chunk->v.size, chunk->v.addr, chunk->v.dma_addr);

// Dopo: if (chunk->v.addr) {
dma_free_coherent(dev, chunk->actual_size, chunk->v.addr, chunk->v.dma_addr); chunk->v.addr = NULL; chunk->actual_size = 0; } ```

### Impatto Questa correzione stabilizza il driver `ath12k` durante le operazioni di suspend/resume, prevenendo crash del kernel e perdite di memoria. Gli utenti che utilizzano schede Wi-Fi basate su chipset Qualcomm QCN9274 o simili dovrebbero aggiornare al kernel 6.10 o successive per beneficiare di questa correzione.

### Workaround Temporaneo Se non è possibile aggiornare il kernel, un workaround temporaneo è disabilitare il suspend/resume per il dispositivo Wi-Fi, oppure caricare il firmware manualmente dopo ogni resume. Tuttavia, queste soluzioni non sono ideali per l'uso quotidiano.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsabile

Linux

Prenotare

12/07/2024

Divulgazione

12/07/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00255

KEV

no

Attività

molto basso

Fonti

Interested in the pricing of exploits?

See the underground prices here!