Re: [PATCH net] bnge: Fix NULL pointer dereference in aux device release
Bhargava Chenna Marreddy <[email protected]> Mon, 3 Aug 2026 22:16:46 +0530
| Newsgroups | org.kernel.vger.netdev |
|---|---|
| Message-ID | <CANXQDtZqg-7Qb_PwV2uJmbB1mJpg-27zfyiD3gEb+9HMfXVJHg@mail.gmail.com> |
On Sat, Aug 1, 2026 at 12:53 AM Alok Tiwari <[email protected]> wrote: > > If allocation of auxr_dev fails during auxiliary device setup, the error > path calls auxiliary_device_uninit(), which eventually invokes > bnge_aux_dev_release(). > > The release callback unconditionally dereferences aux_priv->auxr_dev->pdev > to retrieve the parent bnge_dev. Since auxr_dev has not yet been allocated > on this failure path, the dereference results in a NULL pointer exception > > Retrieve the parent bnge_dev from the auxiliary device's parent instead of > auxr_dev, and free auxr_dev only when it was successfully allocated. This > allows the release callback to correctly clean up partially initialized > auxiliary devices. > > Fixes: 8ac050ec3b1c ("bng_en: Add RoCE aux device support") > Signed-off-by: Alok Tiwari <[email protected]> Reviewed-by: Bhargava Marreddy <[email protected]> > --- > drivers/net/ethernet/broadcom/bnge/bnge_auxr.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c > index 67e93e17d4d9..0955b488b6fe 100644 > --- a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c > +++ b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c > @@ -141,12 +141,15 @@ static void bnge_aux_dev_release(struct device *dev) > { > struct bnge_auxr_priv *aux_priv = > container_of(dev, struct bnge_auxr_priv, aux_dev.dev); > - struct bnge_dev *bd = pci_get_drvdata(aux_priv->auxr_dev->pdev); > + struct bnge_auxr_dev *auxr_dev = aux_priv->auxr_dev; > + struct bnge_dev *bd = pci_get_drvdata(to_pci_dev(dev->parent)); > > ida_free(&bnge_aux_dev_ids, aux_priv->id); > - kfree(aux_priv->auxr_dev->auxr_info); > + if (auxr_dev) { > + kfree(auxr_dev->auxr_info); > + kfree(auxr_dev); > + } > bd->auxr_dev = NULL; > - kfree(aux_priv->auxr_dev); > kfree(aux_priv); > bd->aux_priv = NULL; > } > -- > 2.52.0 > >
smime.p7s
(application/pkcs7-signature, 5.4 KB) - not displayed