From patchwork Thu Apr 8 12:29:33 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 49727 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 6F836B7D1B for ; Thu, 8 Apr 2010 22:29:50 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758569Ab0DHM3h (ORCPT ); Thu, 8 Apr 2010 08:29:37 -0400 Received: from opensource.wolfsonmicro.com ([80.75.67.52]:38899 "EHLO opensource2.wolfsonmicro.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753940Ab0DHM3g (ORCPT ); Thu, 8 Apr 2010 08:29:36 -0400 Received: from rakim.wolfsonmicro.main (lumison.wolfsonmicro.com [87.246.78.27]) by opensource2.wolfsonmicro.com (Postfix) with ESMTPSA id 83FBD11042A; Thu, 8 Apr 2010 13:29:35 +0100 (BST) Received: from broonie by rakim.wolfsonmicro.main with local (Exim 4.71) (envelope-from ) id 1NzqrX-0000Ss-0o; Thu, 08 Apr 2010 13:29:35 +0100 From: Mark Brown To: "David S. Miller" Cc: =?UTF-8?q?Timo=20Ter=C3=A4s?= , netdev@vger.kernel.org, Mark Brown Subject: [PATCH] xfrm: Fix double dst_release() in xfrm_lookup() -EREMOTE case Date: Thu, 8 Apr 2010 13:29:33 +0100 Message-Id: <1270729773-1758-1-git-send-email-broonie@opensource.wolfsonmicro.com> X-Mailer: git-send-email 1.7.0.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit 80c802 ("xfrm: cache bundles instead of policies for outgoing flows") changed __xfrm_policy() to call dst_release() when returning -EREMOTE. In the case where this is called from xfrm_lookup() a double call to dst_release() would result due to the existing dst_release() there. Remove the dst_release() in xfrm_lookup(). Signed-off-by: Mark Brown --- I'm not sure if this is correct or not - there may a reference been taken earlier in __xfrm_lookup() that's being dropped but I didn't spot it. net/xfrm/xfrm_policy.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 7430ac2..f133036 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -1881,7 +1881,6 @@ int xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl, int err = __xfrm_lookup(net, dst_p, fl, sk, flags); if (err == -EREMOTE) { - dst_release(*dst_p); *dst_p = NULL; err = -EAGAIN; }