net: lan966x: improve error handle in lan966x_fdma_rx_get_frame()
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 26 Aug 2022 15:00:30 +0000 (18:00 +0300)
committerJakub Kicinski <kuba@kernel.org>
Wed, 31 Aug 2022 06:18:17 +0000 (23:18 -0700)
Don't just print a warning.  Clean up and return an error as well.

Fixes: c8349639324a ("net: lan966x: Add FDMA functionality")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Link: https://lore.kernel.org/r/YwjgDm/SVd5c1tQU@kili
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c

index 6dea7f8..51f8a08 100644 (file)
@@ -425,7 +425,8 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx)
        lan966x_ifh_get_src_port(skb->data, &src_port);
        lan966x_ifh_get_timestamp(skb->data, &timestamp);
 
-       WARN_ON(src_port >= lan966x->num_phys_ports);
+       if (WARN_ON(src_port >= lan966x->num_phys_ports))
+               goto free_skb;
 
        skb->dev = lan966x->ports[src_port]->dev;
        skb_pull(skb, IFH_LEN * sizeof(u32));
@@ -449,6 +450,8 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx)
 
        return skb;
 
+free_skb:
+       kfree_skb(skb);
 unmap_page:
        dma_unmap_page(lan966x->dev, (dma_addr_t)db->dataptr,
                       FDMA_DCB_STATUS_BLOCKL(db->status),