From patchwork Sat Sep 22 08:26:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Engelhardt X-Patchwork-Id: 186112 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id A5B3C2C0095 for ; Sat, 22 Sep 2012 18:27:34 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754480Ab2IVI1S (ORCPT ); Sat, 22 Sep 2012 04:27:18 -0400 Received: from ares07.inai.de ([5.9.24.206]:33245 "EHLO seven.medozas.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754458Ab2IVI06 (ORCPT ); Sat, 22 Sep 2012 04:26:58 -0400 Received: by seven.medozas.de (Postfix, from userid 25121) id 7422396A0307; Sat, 22 Sep 2012 10:26:52 +0200 (CEST) From: Jan Engelhardt To: netfilter-devel@vger.kernel.org Cc: kaber@trash.net, jrobinson@infoblox.com Subject: [PATCH] netfilter: have r->cost != 0 case work Date: Sat, 22 Sep 2012 10:26:52 +0200 Message-Id: <1348302412-2811-1-git-send-email-jengelh@inai.de> X-Mailer: git-send-email 1.7.7 In-Reply-To: References: Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org Commit v2.6.19-rc1~1272^2~41 tells us that r->cost != 0 can happen when a running state is saved to userspace and then reinstated from there. Make sure that priv is initialized with some values when that happens. Signed-off-by: Jan Engelhardt --- net/netfilter/xt_limit.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/netfilter/xt_limit.c b/net/netfilter/xt_limit.c index 5c22ce8..a4c1e45 100644 --- a/net/netfilter/xt_limit.c +++ b/net/netfilter/xt_limit.c @@ -117,11 +117,11 @@ static int limit_mt_check(const struct xt_mtchk_param *par) /* For SMP, we only want to use one set of state. */ r->master = priv; + /* User avg in seconds * XT_LIMIT_SCALE: convert to jiffies * + 128. */ + priv->prev = jiffies; + priv->credit = user2credits(r->avg * r->burst); /* Credits full. */ if (r->cost == 0) { - /* User avg in seconds * XT_LIMIT_SCALE: convert to jiffies * - 128. */ - priv->prev = jiffies; - priv->credit = user2credits(r->avg * r->burst); /* Credits full. */ r->credit_cap = priv->credit; /* Credits full. */ r->cost = user2credits(r->avg); }