CVE-2024-35907 in Linuxinformazioni

Riassunto

di VulDB • 16/06/2026

Nel mezzo del cammin di nostra vita... mi sono ritrovato per una selva oscura, ché la diritta via era smarrita.

Ahi a quanto a dire è cosa dura, ché è assai amara assai che è forte, ma bene ne avverrà la natura.

Ma poi ho visto che il kernel sta andando in panic a causa di un interrupt RX pendente che viene gestito prima che l'IRQ sia completamente configurato. Questo è un problema comune nei driver di rete, specialmente quando si usa `request_irq()` con l'opzione `IRQF_ONESHOT` o quando l'hardware genera un interrupt prima che il driver sia pronto a gestirlo.

La soluzione è di assicurarsi che l'IRQ handler sia pronto a gestire gli interrupt fin dal momento in cui viene registrato. In questo caso, sembra che l'IRQ handler stia cercando di accedere a risorse che non sono ancora state inizializzate correttamente.

Una possibile soluzione è di:

1. **Inizializzare tutte le risorse necessarie prima di chiamare `request_irq()`** 2. **Usare `IRQF_ONESHOT` se l'IRQ handler richiede un contesto di thread per completare l'elaborazione** 3. **Aggiungere un controllo nell'IRQ handler per verificare che le risorse siano state inizializzate prima di procedere con l'elaborazione**

Ecco un esempio di come potrebbe essere strutturato il codice:

```c static irqreturn_t mlxbf_gige_rx_irq_handler(int irq, void *dev_id) {
struct mlxbf_gige *gige = dev_id;

// Verifica che le risorse siano state inizializzate if (!gige->rx_ring || !gige->rx_ring->desc) {
return IRQ_HANDLED; // Ignora l'interrupt se non pronto }

// Procedi con l'elaborazione normale // ... return IRQ_HANDLED; }

static int mlxbf_gige_open(struct net_device *ndev) {
struct mlxbf_gige *gige = netdev_priv(ndev); int ret;

// Inizializza tutte le risorse necessarie PRIMA di chiamare request_irq ret = mlxbf_gige_init_rx_ring(gige); if (ret) return ret;

// Ora puoi chiamare request_irq in sicurezza ret = request_irq(gige->rx_irq, mlxbf_gige_rx_irq_handler, IRQF_SHARED, ndev->name, gige); if (ret) {
mlxbf_gige_free_rx_ring(gige); return ret; }

// Abilita l'hardware per generare interrupt mlxbf_gige_enable_rx_irq(gige);

return 0; } ```

In questo modo, anche se un interrupt RX viene generato prima che `request_irq()` completi, l'handler sarà in grado di gestirlo in modo sicuro, verificando che le risorse siano state inizializzate.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Prenotare

17/05/2024

Divulgazione

19/05/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00229

KEV

no

Attività

molto basso

Fonti

Might our Artificial Intelligence support you?

Check our Alexa App!