All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarek Poplawski <jarkao2@gmail.com>
To: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>
Cc: Eric Dumazet <eric.dumazet@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	netdev@vger.kernel.org, bugzilla-daemon@bugzilla.kernel.org,
	bugme-daemon@bugzilla.kernel.org
Subject: Re: [Bugme-new] [Bug 16626] New: Machine hangs with EIP at skb_copy_and_csum_dev
Date: Tue, 24 Aug 2010 06:18:22 +0000	[thread overview]
Message-ID: <20100824061822.GA7639@ff.dom.local> (raw)
In-Reply-To: <4C735669.6050708@fs.uni-ruse.bg>

[-- Attachment #1: Type: text/plain, Size: 725 bytes --]

On Tue, Aug 24, 2010 at 08:19:37AM +0300, Plamen Petrov wrote:
...
> And here is what I've got:
>
> [picture 7]
> http://picpaste.com/31d6a54fec9e87de0d1550ee02d9c336.jpg
>
> [picture 8]
> http://picpaste.com/02db6ad8abec6281065328fb52d328cf.jpg
>
> [picture 9]
> http://picpaste.com/9fbaaa14c679f57c82e96884d3274090.jpg
>
> Sorry for the really bad quality, even for a phone, but the problem
> is that I don't know when its going to happen, so... you see
> the results.
>
>  because contrary to what you suggest,
>> Jarek, there are no messages in the system logs.

I'm extremely sorry: I missed 1 place. Anyway, it's very helpful too.

>>
>> Plamen
>
> Ideas?

Try Eric's patch, and later maybe this one.

Thanks,
Jarek P.

[-- Attachment #2: dev.c.csum.2.diff --]
[-- Type: text/x-diff, Size: 2158 bytes --]

diff --git a/net/core/dev.c b/net/core/dev.c
index 3721fbb..01241fc 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1935,6 +1935,23 @@ static inline int skb_needs_linearize(struct sk_buff *skb,
 					      illegal_highdma(dev, skb))));
 }
 
+static int skb_csum_start_bug(struct sk_buff *skb, int pos)
+{
+
+	if (skb->ip_summed == CHECKSUM_PARTIAL) {
+		long csstart;
+
+		csstart = skb->csum_start - skb_headroom(skb);
+		if (WARN_ON(csstart > skb_headlen(skb))) {
+			pr_warning("%d: csum_start %d, headroom %d, headlen %d\n",
+				   pos, skb->csum_start, skb_headroom(skb),
+				   skb_headlen(skb));
+			return 1;
+		}
+	}
+	return 0;
+}
+
 int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
 			struct netdev_queue *txq)
 {
@@ -1959,11 +1976,15 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
 				goto out_kfree_skb;
 			if (skb->next)
 				goto gso;
+			if (skb_csum_start_bug(skb, 10))
+				goto out_kfree_skb;
 		} else {
 			if (skb_needs_linearize(skb, dev) &&
 			    __skb_linearize(skb))
 				goto out_kfree_skb;
 
+			if (skb_csum_start_bug(skb, 20))
+				goto out_kfree_skb;
 			/* If packet is not checksummed and device does not
 			 * support checksumming for this protocol, complete
 			 * checksumming here.
@@ -1974,10 +1995,16 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
 				if (!dev_can_checksum(dev, skb) &&
 				     skb_checksum_help(skb))
 					goto out_kfree_skb;
+				if (skb_csum_start_bug(skb, 30))
+					goto out_kfree_skb;
 			}
 		}
 
-		rc = ops->ndo_start_xmit(skb, dev);
+		if (skb_csum_start_bug(skb, 40)) {
+			kfree_skb(skb);
+			rc = NETDEV_TX_OK;
+		} else
+			rc = ops->ndo_start_xmit(skb, dev);
 		if (rc == NETDEV_TX_OK)
 			txq_trans_update(txq);
 		return rc;
@@ -1997,7 +2024,12 @@ gso:
 		if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
 			skb_dst_drop(nskb);
 
-		rc = ops->ndo_start_xmit(nskb, dev);
+		if (skb_csum_start_bug(skb, 50)) {
+			kfree_skb(skb);
+			rc = NETDEV_TX_OK;
+		} else
+			rc = ops->ndo_start_xmit(nskb, dev);
+
 		if (unlikely(rc != NETDEV_TX_OK)) {
 			if (rc & ~NETDEV_TX_MASK)
 				goto out_kfree_gso_skb;

      reply	other threads:[~2010-08-24  6:18 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-16626-10286@https.bugzilla.kernel.org/>
2010-08-19 22:21 ` [Bugme-new] [Bug 16626] New: Machine hangs with EIP at skb_copy_and_csum_dev Andrew Morton
2010-08-20  5:03   ` Plamen Petrov
2010-08-20  5:11     ` Andrew Morton
2010-08-20  6:12       ` Plamen Petrov
2010-08-20  6:20         ` Andrew Morton
2010-08-20  6:26           ` Plamen Petrov
2010-08-20  6:34             ` Eric Dumazet
2010-08-20  6:57               ` Plamen Petrov
2010-08-20  7:38               ` Plamen Petrov
2010-08-20  8:31               ` Plamen Petrov
2010-08-20  9:19                 ` Plamen Petrov
2010-08-20 10:26                   ` Eric Dumazet
2010-08-20 10:53                     ` Plamen Petrov
2010-08-20 19:38                       ` Jarek Poplawski
2010-08-21  7:47                         ` Jarek Poplawski
2010-08-21  7:50                           ` Eric Dumazet
2010-08-21  8:07                             ` Jarek Poplawski
2010-08-23 11:47                               ` Plamen Petrov
2010-08-23 12:35                                 ` Eric Dumazet
2010-08-23 12:47                                 ` Jarek Poplawski
2010-08-23 13:00                                   ` Eric Dumazet
2010-08-23 13:10                                     ` Jarek Poplawski
2010-08-23 13:43                                       ` Plamen Petrov
2010-08-23 14:05                                         ` Plamen Petrov
2010-08-23 14:14                                           ` Jarek Poplawski
2010-08-24  4:51                                             ` Plamen Petrov
2010-08-24  5:01                                               ` Eric Dumazet
2010-08-24  8:43                                                 ` Plamen Petrov
2010-08-24 13:27                                                   ` Plamen Petrov
2010-08-24 15:08                                                     ` Eric Dumazet
2010-08-24 17:25                                                       ` Plamen Petrov
2010-08-24 18:22                                                         ` Jarek Poplawski
2010-08-24 19:19                                                         ` Eric Dumazet
2010-08-25  7:05                                                           ` Plamen Petrov
2010-08-29  7:48                                                             ` [PATCH] net: reset ip_summed in skb_tunnel_rx() Eric Dumazet
2010-08-29 15:35                                                               ` Jesse Gross
2010-08-27  8:44                                                       ` [Bugme-new] [Bug 16626] New: Machine hangs with EIP at skb_copy_and_csum_dev Plamen Petrov
2010-08-24  5:19                                               ` Plamen Petrov
2010-08-24  6:18                                                 ` Jarek Poplawski [this message]

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=20100824061822.GA7639@ff.dom.local \
    --to=jarkao2@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bugme-daemon@bugzilla.kernel.org \
    --cc=bugzilla-daemon@bugzilla.kernel.org \
    --cc=eric.dumazet@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=pvp-lsts@fs.uni-ruse.bg \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.