Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3128301pxf; Mon, 5 Apr 2021 04:08:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxLIMrUtGqROzpmlNUVmVLGVxD7XCbt/WvXFxTWWLVh1dNDHft1bR3euFSr3Yl/7OC85Q7M X-Received: by 2002:a05:6638:3399:: with SMTP id h25mr23440126jav.15.1617620892025; Mon, 05 Apr 2021 04:08:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617620892; cv=none; d=google.com; s=arc-20160816; b=Cw3l8fzdGkoyI9BJXLYijIcqP+0IgygPN9nWqnzG6n9lLilVTO3X7VHXMZVzt/ztJs 5x27YmzZasQ2NsUGHYv8N3em5Zhx8zLzqtpxYSud9NpV5DqlBeVvQGCM7YypaVqQR1ER 6ZK7BmotuaEVSgy0S5kSKkSNzdiCZ5MD5khOlkOWwneUNH9wTg38/ZagH4FKnPeDRC0S ErSzelD3wx1HM5hAnP7oO1xBod0p+WnDS72iwYeHWHrpZavLs6Ms8Wt1EiFPtKNFac10 DQkrMNzbLAHnUfS/XJpG7yDmgNqKAsMTbqrQ3d2Bh1AP3agjJCpbBHJnVHdqhSZ9EZH6 O2HA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=IRQ8ZE2e0GszBDFoEbCk5LHw7rdxRXSx816IuvIw1xo=; b=BuPIAGuamoGHBbK1CuaWzR7H7AoOgKQDDBDa2uxvhkgbLACq5veknN/Nc7IBbaJrGD LXxZbsckZ9yw8HtFVJGDuod4TFH8GqJHxYaueSeHqbOEhZKCmyXocpZG2omJ0xkXuX0M 7Vl3SoXR5NiRcihFrjzm0HwWk6suJw0B6IKiuJ1ZEqynK+muQocllnpWVW4N3UarlO/i EeGb/nebmUh1uOYaQkkGshF/eEcUYbVsAMvCurJm49jouXJSKLK7bFvrFRa1L2iC/Z5/ jzld/TWnMhy5GHFKczRxrdRajGw5QwYq8CDrzbV1lZtb7x513XewyumiO9d3aG/snaQK 4hUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=PGh0vKIe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i13si17105466ilm.161.2021.04.05.04.08.00; Mon, 05 Apr 2021 04:08:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=PGh0vKIe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233785AbhDEI63 (ORCPT + 99 others); Mon, 5 Apr 2021 04:58:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:37622 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233373AbhDEI5y (ORCPT ); Mon, 5 Apr 2021 04:57:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C928E61393; Mon, 5 Apr 2021 08:57:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617613068; bh=EHu03ADcVSThp0tnW4DpPUjxbQbEo0qZve+4tBck6wE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PGh0vKIerXmADj6JydH4a2WPxgUm1weuOIHbqJ+ONp1dEw5IlYiONrt6K9jhPkJ9x kgOx21mTAqxMPeCfDLCcvFlCuR2KbCtOInjA5vAgH56QmWuuLL9f9baut77yF0FIjz 1NYkQhBOU/eT/bFqC/bJL5JRUw8vVLIXEl/cokAk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, teroincn@gmail.com, Richard Guy Briggs , Paul Moore , Wen Yang Subject: [PATCH 4.9 35/35] audit: fix a net reference leak in audit_list_rules_send() Date: Mon, 5 Apr 2021 10:54:10 +0200 Message-Id: <20210405085019.983552878@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210405085018.871387942@linuxfoundation.org> References: <20210405085018.871387942@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Paul Moore commit 3054d06719079388a543de6adb812638675ad8f5 upstream. If audit_list_rules_send() fails when trying to create a new thread to send the rules it also fails to cleanup properly, leaking a reference to a net structure. This patch fixes the error patch and renames audit_send_list() to audit_send_list_thread() to better match its cousin, audit_send_reply_thread(). Reported-by: teroincn@gmail.com Reviewed-by: Richard Guy Briggs Signed-off-by: Paul Moore Cc: # 4.9.x Signed-off-by: Wen Yang Signed-off-by: Greg Kroah-Hartman --- kernel/audit.c | 2 +- kernel/audit.h | 2 +- kernel/auditfilter.c | 13 ++++++------- 3 files changed, 8 insertions(+), 9 deletions(-) --- a/kernel/audit.c +++ b/kernel/audit.c @@ -535,7 +535,7 @@ static int kauditd_thread(void *dummy) return 0; } -int audit_send_list(void *_dest) +int audit_send_list_thread(void *_dest) { struct audit_netlink_list *dest = _dest; struct sk_buff *skb; --- a/kernel/audit.h +++ b/kernel/audit.h @@ -245,7 +245,7 @@ struct audit_netlink_list { struct sk_buff_head q; }; -int audit_send_list(void *); +int audit_send_list_thread(void *); struct audit_net { struct sock *nlsk; --- a/kernel/auditfilter.c +++ b/kernel/auditfilter.c @@ -1139,10 +1139,8 @@ int audit_rule_change(int type, __u32 po int audit_list_rules_send(struct sk_buff *request_skb, int seq) { u32 portid = NETLINK_CB(request_skb).portid; - struct net *net = sock_net(NETLINK_CB(request_skb).sk); struct task_struct *tsk; struct audit_netlink_list *dest; - int err = 0; /* We can't just spew out the rules here because we might fill * the available socket buffer space and deadlock waiting for @@ -1150,10 +1148,10 @@ int audit_list_rules_send(struct sk_buff * happen if we're actually running in the context of auditctl * trying to _send_ the stuff */ - dest = kmalloc(sizeof(struct audit_netlink_list), GFP_KERNEL); + dest = kmalloc(sizeof(*dest), GFP_KERNEL); if (!dest) return -ENOMEM; - dest->net = get_net(net); + dest->net = get_net(sock_net(NETLINK_CB(request_skb).sk)); dest->portid = portid; skb_queue_head_init(&dest->q); @@ -1161,14 +1159,15 @@ int audit_list_rules_send(struct sk_buff audit_list_rules(portid, seq, &dest->q); mutex_unlock(&audit_filter_mutex); - tsk = kthread_run(audit_send_list, dest, "audit_send_list"); + tsk = kthread_run(audit_send_list_thread, dest, "audit_send_list"); if (IS_ERR(tsk)) { skb_queue_purge(&dest->q); + put_net(dest->net); kfree(dest); - err = PTR_ERR(tsk); + return PTR_ERR(tsk); } - return err; + return 0; } int audit_comparator(u32 left, u32 op, u32 right)