From patchwork Wed Oct 1 10:55:15 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timo Teras X-Patchwork-Id: 2226 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 CEE38DDF2D for ; Wed, 1 Oct 2008 20:55:32 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752532AbYJAKz1 (ORCPT ); Wed, 1 Oct 2008 06:55:27 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752323AbYJAKz1 (ORCPT ); Wed, 1 Oct 2008 06:55:27 -0400 Received: from ug-out-1314.google.com ([66.249.92.168]:41359 "EHLO ug-out-1314.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752117AbYJAKz0 (ORCPT ); Wed, 1 Oct 2008 06:55:26 -0400 Received: by ug-out-1314.google.com with SMTP id k3so763895ugf.37 for ; Wed, 01 Oct 2008 03:55:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:x-enigmail-version:content-type :content-transfer-encoding:sender; bh=yqMHVIbW3Dz6HPl7bXqWQFdusEQlkK4BV0qCa3POtmc=; b=uOSmVPnonLGUDizfEwkHQDxZZ6oO6QyHoBGRB1K0enBWaesoIu4caPfLwOggPZ/y80 f1mfph5rZTQEwmFr45EVbLYNIXen4p0Mz35Qqoj0rfYijPFruLhQRNVq51KA8y2vx6l9 Z/dSRwJERLu1GoYXKCD3YtC+bqxlljolTZAKI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :x-enigmail-version:content-type:content-transfer-encoding:sender; b=nm2Xala1FXdwkfQBEmPpe4AB4y7A/WWgKIib3fLMFqjZf+U7L7UwCW8QyQ48wdJpvf UoTjcEzsLVZabX2oQzLVIb4RjyYxdZs3UqfCjkh6inhzkN4fSnErvho8Akd/3sNhw474 FMRPSYSJ7UQI7NHScvqK8PtVZaoaa5ilrGhS0= Received: by 10.67.116.8 with SMTP id t8mr2569860ugm.57.1222858522913; Wed, 01 Oct 2008 03:55:22 -0700 (PDT) Received: from ?10.254.3.100? (xdsl-83-150-94-239.nebulazone.fi [83.150.94.239]) by mx.google.com with ESMTPS id d2sm2473833nfc.20.2008.10.01.03.55.20 (version=SSLv3 cipher=RC4-MD5); Wed, 01 Oct 2008 03:55:21 -0700 (PDT) Message-ID: <48E35713.6030200@iki.fi> Date: Wed, 01 Oct 2008 13:55:15 +0300 From: =?ISO-8859-1?Q?Timo_Ter=E4s?= User-Agent: Thunderbird 2.0.0.17 (X11/20080925) MIME-Version: 1.0 To: netdev@vger.kernel.org Subject: [PATCH net-2.6] key: Free dumping state on socket close X-Enigmail-Version: 0.95.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Fix a xfrm_{state,policy}_walk leak if pfkey socket is closed while dumping is on-going. Signed-off-by: Timo Teras --- Should go to -stable too. net/key/af_key.c | 30 +++++++++++++++++++----------- 1 files changed, 19 insertions(+), 11 deletions(-) diff --git a/net/key/af_key.c b/net/key/af_key.c index d628df9..b7f5a1c 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -73,22 +73,18 @@ static int pfkey_can_dump(struct sock *sk) return 0; } -static int pfkey_do_dump(struct pfkey_sock *pfk) +static void pfkey_terminate_dump(struct pfkey_sock *pfk) { - int rc; - - rc = pfk->dump.dump(pfk); - if (rc == -ENOBUFS) - return 0; - - pfk->dump.done(pfk); - pfk->dump.dump = NULL; - pfk->dump.done = NULL; - return rc; + if (pfk->dump.dump) { + pfk->dump.done(pfk); + pfk->dump.dump = NULL; + pfk->dump.done = NULL; + } } static void pfkey_sock_destruct(struct sock *sk) { + pfkey_terminate_dump(pfkey_sk(sk)); skb_queue_purge(&sk->sk_receive_queue); if (!sock_flag(sk, SOCK_DEAD)) { @@ -310,6 +306,18 @@ static int pfkey_broadcast(struct sk_buff *skb, gfp_t allocation, return err; } +static int pfkey_do_dump(struct pfkey_sock *pfk) +{ + int rc; + + rc = pfk->dump.dump(pfk); + if (rc == -ENOBUFS) + return 0; + + pfkey_terminate_dump(pfk); + return rc; +} + static inline void pfkey_hdr_dup(struct sadb_msg *new, struct sadb_msg *orig) { *new = *orig;