> If register_netdev() fails, the error handling path of the probe will not > free the memory allocated by the previous airoha_metadata_dst_alloc() call > because port->dev->reg_state will not be NETREG_REGISTERED. > > So, an explicit airoha_metadata_dst_free() call is needed in this case to > avoid a memory leak. > > Fixes: af3cf757d5c9 ("net: airoha: Move DSA tag in DMA descriptor") > Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> Acked-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx> > --- > Changes in v3: > - None > > Changes in v2: > - New patch > v2: https://lore.kernel.org/all/5c94b9b3850f7f29ed653e2205325620df28c3ff.1746715755.git.christophe.jaillet@xxxxxxxxxx/ > > Compile tested only. > --- > drivers/net/ethernet/airoha/airoha_eth.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c > index 16c7896f931f..af8c4015938c 100644 > --- a/drivers/net/ethernet/airoha/airoha_eth.c > +++ b/drivers/net/ethernet/airoha/airoha_eth.c > @@ -2873,7 +2873,15 @@ static int airoha_alloc_gdm_port(struct airoha_eth *eth, > if (err) > return err; > > - return register_netdev(dev); > + err = register_netdev(dev); > + if (err) > + goto free_metadata_dst; > + > + return 0; > + > +free_metadata_dst: > + airoha_metadata_dst_free(port); > + return err; > } > > static int airoha_probe(struct platform_device *pdev) > -- > 2.49.0 >
Attachment:
signature.asc
Description: PGP signature