From patchwork Sat Oct 6 05:10:15 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: ramesh.nagappa@gmail.com X-Patchwork-Id: 189663 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 7C9D82C0328 for ; Sat, 6 Oct 2012 15:10:39 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751438Ab2JFFKh (ORCPT ); Sat, 6 Oct 2012 01:10:37 -0400 Received: from mail-pb0-f46.google.com ([209.85.160.46]:63595 "EHLO mail-pb0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750835Ab2JFFKf (ORCPT ); Sat, 6 Oct 2012 01:10:35 -0400 Received: by mail-pb0-f46.google.com with SMTP id rr4so2552101pbb.19 for ; Fri, 05 Oct 2012 22:10:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=sHus63hR23DzjlQ8QVyjWdlF/WSvSI2tg3HocctMQEI=; b=eXs4nPD45sKFRbYxh/7WRUl1pIALDVZnugEEHdTRxfpKwJ0ZHNvNxPZ6OeFp1eGBwg Ht4w7kaaMIincIevILNTRH+n8e/MHdm4r4Jn195vedyfteUm08wkcoIbE12b2VYA1Y4e fo2eeFZ7P4V6ciXwOmvRzzOcDrBpPvzQcOk9IIaLSg286YVSbh91sG44/PuaexbQAP2G T0VQ0BM1mGw6mCQVIoDfIIGid+FvjtK46rtFFCZq7e1o/6XkUEFbMWpuAi/7S8sN7cjO a/Vv2EkJSza7fi1Xzj9i0vGdbPN+Kl2T2SsVLbWJStAIDv+mQBR3cxIZbsnStW3aeEWz lqJw== Received: by 10.66.77.70 with SMTP id q6mr27146242paw.24.1349500234499; Fri, 05 Oct 2012 22:10:34 -0700 (PDT) Received: from localhost (c-67-169-151-199.hsd1.ca.comcast.net. [67.169.151.199]) by mx.google.com with ESMTPS id ru4sm7126648pbc.25.2012.10.05.22.10.32 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 05 Oct 2012 22:10:33 -0700 (PDT) From: ramesh.nagappa@gmail.com To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, ebiederm@xmission.com, xemul@parallels.com, linux-kernel@vger.kernel.org, Ramesh Nagappa Subject: [PATCH V2] net: Fix skb_under_panic oops in neigh_resolve_output Date: Fri, 5 Oct 2012 22:10:15 -0700 Message-Id: <1349500215-22765-1-git-send-email-ramesh.nagappa@gmail.com> X-Mailer: git-send-email 1.7.11.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The retry loop in neigh_resolve_output() and neigh_connected_output() call dev_hard_header() with out reseting the skb to network_header. This causes the retry to fail with skb_under_panic. The fix is to reset the network_header within the retry loop. Signed-off-by: Ramesh Nagappa Reviewed-by: Shawn Lu Reviewed-by: Robert Coulson Reviewed-by: Billie Alsup --- net/core/neighbour.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 117afaf..058bb1e 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -1301,8 +1301,6 @@ int neigh_resolve_output(struct neighbour *neigh, struct sk_buff *skb) if (!dst) goto discard; - __skb_pull(skb, skb_network_offset(skb)); - if (!neigh_event_send(neigh, skb)) { int err; struct net_device *dev = neigh->dev; @@ -1312,6 +1310,7 @@ int neigh_resolve_output(struct neighbour *neigh, struct sk_buff *skb) neigh_hh_init(neigh, dst); do { + __skb_pull(skb, skb_network_offset(skb)); seq = read_seqbegin(&neigh->ha_lock); err = dev_hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len); @@ -1342,9 +1341,8 @@ int neigh_connected_output(struct neighbour *neigh, struct sk_buff *skb) unsigned int seq; int err; - __skb_pull(skb, skb_network_offset(skb)); - do { + __skb_pull(skb, skb_network_offset(skb)); seq = read_seqbegin(&neigh->ha_lock); err = dev_hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len);