From: Anders Berg <anders.b...@avagotech.com>

On very rare occations the femac_rx_packet() will overrun the sk_buff causuing
skb_put() to panic. To current date, we have only had one reported case which
makes it hard to diagnose. This patch is not a proper solution, it is a step on
the way to get some more information on the real issue. To avoid painc from
skb_put(), we make sure there is tailroom in the skb before adding more data to
it, and emit an error log if the buffer was full.

Signed-off-by: Anders Berg <anders.b...@avagotech.com>
---
 drivers/net/ethernet/lsi/lsi_acp_net.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/ethernet/lsi/lsi_acp_net.c 
b/drivers/net/ethernet/lsi/lsi_acp_net.c
index 78b7e79..a46e850 100644
--- a/drivers/net/ethernet/lsi/lsi_acp_net.c
+++ b/drivers/net/ethernet/lsi/lsi_acp_net.c
@@ -701,6 +701,7 @@ static void lsinet_rx_packet(struct net_device *dev)
        while (0 < queue_initialized(queue, pdata->rx_tail_copy,
                                     pdata->rx_num_desc)) {
 
+               if (skb_tailroom(sk_buff) >= descriptor.pdu_length)
                {
                        unsigned char *buffer;
                        buffer = skb_put(sk_buff, descriptor.pdu_length);
@@ -708,6 +709,12 @@ static void lsinet_rx_packet(struct net_device *dev)
                               (void *)(descriptor.host_data_memory_pointer +
                                 pdata->dma_alloc_offset_rx),
                               descriptor.pdu_length);
+               } else {
+                       pr_err("%s: PDU overrun (len %u/%u, err %d)\n",
+                              LSI_DRV_NAME,
+                              descriptor.pdu_length,
+                              bytes_copied,
+                              descriptor.error);
                }
                bytes_copied += descriptor.pdu_length;
                descriptor.data_transfer_length = pdata->rx_buf_per_desc;
-- 
1.8.1.4

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to