linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: jonas.jensen@gmail.com (Jonas Jensen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 2/4] net: moxa: replace build_skb() with netdev_alloc_skb_ip_align() / memcpy()
Date: Mon, 25 Aug 2014 16:22:22 +0200	[thread overview]
Message-ID: <1408976542-15624-1-git-send-email-jonas.jensen@gmail.com> (raw)
In-Reply-To: <1408544342-32058-1-git-send-email-jonas.jensen@gmail.com>

build_skb() is used to make skbs out of existing RX ring memory
which is bad because the RX ring is allocated only once, on probe.
Memory corruption occur because said memory is reclaimed, i.e.
__kfree_skb() (and eventually put_page()).

Replace build_skb() with netdev_alloc_skb_ip_align() and use memcpy().

Remove SKB_DATA_ALIGN() from RX buffer size while we're at it.

Addresses https://bugzilla.kernel.org/show_bug.cgi?id=69041

Signed-off-by: Jonas Jensen <jonas.jensen@gmail.com>
---

Notes:
    Changes since v5:
    
    1. broke out DMA synchronization to separate patch
    
    Applies to next-20140825

 drivers/net/ethernet/moxa/moxart_ether.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c
index eed70d9..d66058d 100644
--- a/drivers/net/ethernet/moxa/moxart_ether.c
+++ b/drivers/net/ethernet/moxa/moxart_ether.c
@@ -226,13 +226,15 @@ static int moxart_rx_poll(struct napi_struct *napi, int budget)
 		if (len > RX_BUF_SIZE)
 			len = RX_BUF_SIZE;
 
-		skb = build_skb(priv->rx_buf[rx_head], priv->rx_buf_size);
+		skb = netdev_alloc_skb_ip_align(ndev, len);
+
 		if (unlikely(!skb)) {
-			net_dbg_ratelimited("build_skb failed\n");
+			net_dbg_ratelimited("netdev_alloc_skb_ip_align failed\n");
 			priv->stats.rx_dropped++;
 			priv->stats.rx_errors++;
 		}
 
+		memcpy(skb->data, priv->rx_buf[rx_head], len);
 		skb_put(skb, len);
 		skb->protocol = eth_type_trans(skb, ndev);
 		napi_gro_receive(&priv->napi, skb);
@@ -464,8 +466,7 @@ static int moxart_mac_probe(struct platform_device *pdev)
 	spin_lock_init(&priv->txlock);
 
 	priv->tx_buf_size = TX_BUF_SIZE;
-	priv->rx_buf_size = RX_BUF_SIZE +
-			    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
+	priv->rx_buf_size = RX_BUF_SIZE;
 
 	priv->tx_desc_base = dma_alloc_coherent(NULL, TX_REG_DESC_SIZE *
 						TX_DESC_NUM, &priv->tx_base,
-- 
1.8.2.1

  reply	other threads:[~2014-08-25 14:22 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-19 14:49 [PATCH v4 1/2] net: moxa: clear TX descriptor length bits Jonas Jensen
2014-08-19 14:49 ` [PATCH v4 2/2] net: moxa: replace build_skb() with netdev_alloc_skb_ip_align() / memcpy() Jonas Jensen
2014-08-19 18:31   ` Eric Dumazet
2014-08-20 14:24     ` Jonas Jensen
2014-08-20 14:19   ` [PATCH v5 " Jonas Jensen
2014-08-25 14:22     ` Jonas Jensen [this message]
2014-08-26  0:26       ` [PATCH v6 2/4] " David Miller
2014-08-26  9:04       ` Arnd Bergmann
2014-08-26  9:10         ` David Laight
2014-08-26 10:55           ` Eric Dumazet
2014-08-21 21:43   ` [PATCH v4 2/2] " Michał Mirosław
2014-08-25 14:23     ` Jonas Jensen
2014-08-20 14:18 ` [PATCH v5 1/2] net: moxa: clear TX descriptor length bits Jonas Jensen
2014-08-20 17:10   ` Eric Dumazet
2014-08-25 14:23     ` Jonas Jensen
2014-08-22  4:39   ` David Miller
2014-08-25 14:22   ` [PATCH v6 1/4] net: moxa: clear DESC1 on ndo_start_xmit() Jonas Jensen
2014-08-26  0:25     ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1408976542-15624-1-git-send-email-jonas.jensen@gmail.com \
    --to=jonas.jensen@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).