net: airoha: Fix an error handling path in airoha_alloc_gdm_port()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 24 May 2025 07:29:11 +0000 (09:29 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 28 May 2025 00:20:10 +0000 (17:20 -0700)
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@wanadoo.fr>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/1b94b91345017429ed653e2f05d25620dc2823f9.1746715755.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_eth.c

index 1e9ab65218ff144d99b47f5d4ad5ff4f9c227418..c169b8b411b4f53d22fd9b6c48596c50e29c9edc 100644 (file)
@@ -2541,7 +2541,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)