Messages in this thread | | | Date | Fri, 16 Feb 2024 21:39:57 +0300 | From | Serge Semin <> | Subject | Re: [PATCH net v2] net: stmmac: Fix incorrect dereference in interrupt handlers |
| |
On Wed, Feb 14, 2024 at 12:27:17PM +0300, Pavel Sakharov wrote: > If 'dev' or 'data' is NULL, the 'priv' variable has an incorrect address > when dereferencing calling netdev_err(). > > Since we get as 'dev_id' or 'data' what was passed as the 'dev' argument > to request_irq() during interrupt initialization (that is, the net_device > and rx/tx queue pointers initialized at the time of the call) and since > there are usually no checks for the 'dev_id' argument in such handlers > in other drivers, remove these checks from the handlers in stmmac driver. > > Found by Linux Verification Center (linuxtesting.org) with SVACE.
LGTM. Thanks!
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
-Serge(y)
> > Fixes: 8532f613bc78 ("net: stmmac: introduce MSI Interrupt routines for mac, safety, RX & TX") > Signed-off-by: Pavel Sakharov <p.sakharov@ispras.ru> > --- > v2: Drop the second argument checks in the handlers as suggested by Serge Semin <fancer.lancer@gmail.com>. > > .../net/ethernet/stmicro/stmmac/stmmac_main.c | 20 ------------------- > 1 file changed, 20 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 75d029704503..e80d77bd9f1f 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -6059,11 +6059,6 @@ static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id) > struct net_device *dev = (struct net_device *)dev_id; > struct stmmac_priv *priv = netdev_priv(dev); > > - if (unlikely(!dev)) { > - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); > - return IRQ_NONE; > - } > - > /* Check if adapter is up */ > if (test_bit(STMMAC_DOWN, &priv->state)) > return IRQ_HANDLED; > @@ -6079,11 +6074,6 @@ static irqreturn_t stmmac_safety_interrupt(int irq, void *dev_id) > struct net_device *dev = (struct net_device *)dev_id; > struct stmmac_priv *priv = netdev_priv(dev); > > - if (unlikely(!dev)) { > - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); > - return IRQ_NONE; > - } > - > /* Check if adapter is up */ > if (test_bit(STMMAC_DOWN, &priv->state)) > return IRQ_HANDLED; > @@ -6105,11 +6095,6 @@ static irqreturn_t stmmac_msi_intr_tx(int irq, void *data) > dma_conf = container_of(tx_q, struct stmmac_dma_conf, tx_queue[chan]); > priv = container_of(dma_conf, struct stmmac_priv, dma_conf); > > - if (unlikely(!data)) { > - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); > - return IRQ_NONE; > - } > - > /* Check if adapter is up */ > if (test_bit(STMMAC_DOWN, &priv->state)) > return IRQ_HANDLED; > @@ -6136,11 +6121,6 @@ static irqreturn_t stmmac_msi_intr_rx(int irq, void *data) > dma_conf = container_of(rx_q, struct stmmac_dma_conf, rx_queue[chan]); > priv = container_of(dma_conf, struct stmmac_priv, dma_conf); > > - if (unlikely(!data)) { > - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); > - return IRQ_NONE; > - } > - > /* Check if adapter is up */ > if (test_bit(STMMAC_DOWN, &priv->state)) > return IRQ_HANDLED; > -- > 2.43.0 >
| |