From patchwork Sun Nov 22 00:29:52 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick McHardy X-Patchwork-Id: 38990 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 6DA5AB7B69 for ; Sun, 22 Nov 2009 11:30:00 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751792AbZKVA3t (ORCPT ); Sat, 21 Nov 2009 19:29:49 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750936AbZKVA3t (ORCPT ); Sat, 21 Nov 2009 19:29:49 -0500 Received: from stinky.trash.net ([213.144.137.162]:36731 "EHLO stinky.trash.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750838AbZKVA3s (ORCPT ); Sat, 21 Nov 2009 19:29:48 -0500 Received: from [192.168.0.100] (unknown [78.42.107.241]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by stinky.trash.net (Postfix) with ESMTPSA id 3DFE3B2C46; Sun, 22 Nov 2009 01:29:54 +0100 (MET) Message-ID: <4B088600.8090209@trash.net> Date: Sun, 22 Nov 2009 01:29:52 +0100 From: Patrick McHardy User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090701) MIME-Version: 1.0 To: ben@bigfootnetworks.com CC: David Miller , netdev@vger.kernel.org Subject: Re: Bridge + Conntrack + SKB Recycle: Fragment Reassembly Errors References: <767BAF49E93AFB4B815B11325788A8ED45F0BA@L01SLCXDB03.calltower.com> <4AF999DE.9060206@trash.net> <20091121.110832.213888237.davem@davemloft.net> <4B0883FD.2090806@trash.net> In-Reply-To: <4B0883FD.2090806@trash.net> X-Enigmail-Version: 0.95.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Patrick McHardy wrote: > So it seems we need to adjust skb->truesize in ip_fragment() since > skb_recycle_check() assumes the skb is linear (and therefore > skb->truesize reflects the linear size). Ben's suggestions of adding > an upper limit based on the requested size to skb_recycle_check() > makes sense to me as well to avoid this problem when recycling large > linear skbs. Ben, please give this patch a try. diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 322b408..031989d 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -501,8 +501,8 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) if (skb->sk) { frag->sk = skb->sk; frag->destructor = sock_wfree; - truesizes += frag->truesize; } + truesizes += frag->truesize; } /* Everything is OK. Generate! */