Received: with ECARTIS (v1.0.0; list netdev); Wed, 29 Dec 2004 19:40:18 -0800 (PST) Received: from kaber.coreworks.de ([62.206.217.67]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id iBU3dlpb031118 for ; Wed, 29 Dec 2004 19:40:07 -0800 Received: from eru.coreworks.de ([172.16.0.2] helo=trash.net) by kaber.coreworks.de with esmtp (Exim 4.34) id 1CjrBx-0002J1-8V; Thu, 30 Dec 2004 04:41:37 +0100 Message-ID: <41D378B1.40202@trash.net> Date: Thu, 30 Dec 2004 04:40:33 +0100 From: Patrick McHardy User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Debian/1.6-5 X-Accept-Language: en MIME-Version: 1.0 To: jamal CC: Maillist netdev Subject: [PATCH PKT_SCHED 12/17]: Fix missing unlock in ipt action error path Content-Type: multipart/mixed; boundary="------------090101090800040307030702" X-Virus-Scanned: ClamAV 0.80/638/Tue Dec 21 14:41:34 2004 clamav-milter version 0.80j on 127.0.0.1 X-Virus-Status: Clean X-archive-position: 13190 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: kaber@trash.net Precedence: bulk X-list: netdev This is a multi-part message in MIME format. --------------090101090800040307030702 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Fix missing unlock in ipt action error path. --------------090101090800040307030702 Content-Type: text/x-patch; name="12.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="12.diff" # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/12/30 03:02:56+01:00 kaber@coreworks.de # [PKT_SCHED]: Fix missing unlock in ipt action error path # # Signed-off-by: Patrick McHardy # # net/sched/ipt.c # 2004/12/30 02:57:03+01:00 kaber@coreworks.de +6 -4 # [PKT_SCHED]: Fix missing unlock in ipt action error path # # Signed-off-by: Patrick McHardy # diff -Nru a/net/sched/ipt.c b/net/sched/ipt.c --- a/net/sched/ipt.c 2004-12-30 04:01:46 +01:00 +++ b/net/sched/ipt.c 2004-12-30 04:01:46 +01:00 @@ -248,9 +248,11 @@ p->bstats.bytes += skb->len; p->bstats.packets++; - if (skb_cloned(skb) ) { - if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) - return -1; + if (skb_cloned(skb)) { + if (unlikely(pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) { + result = -1; + goto out_unlock; + } } /* yes, we have to worry about both in and out dev worry later - danger - this API seems to have changed @@ -275,9 +277,9 @@ result = TC_POLICE_OK; break; } +out_unlock: spin_unlock(&p->lock); return result; - } static int --------------090101090800040307030702--