Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1678353pxu; Sun, 6 Dec 2020 03:47:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJysNoA2A8wEkmifFImoRl/jKMOImMP/G5bNGski11vdjsaSRyqK/ya8RN2hXYM8QuEVKkPi X-Received: by 2002:a17:906:cd14:: with SMTP id oz20mr13967149ejb.99.1607255225832; Sun, 06 Dec 2020 03:47:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607255225; cv=none; d=google.com; s=arc-20160816; b=M/rvwgN8ns07La20K1A/oWM5ZnNCSlFW3hI+JNG+8NZf4o0sJSHSbkaF7UmfssZKeN PE0MhkwTHCqkgSVEfrS3paSUgchPwqvEDGiLqvlhdAVvTFdbB1MXXFlN+n9gUyro5ImN AUQJ2mKNnlXx0FMlVi2H2+PtuAzF6+kW+TKd5FFlQfkpP+A311D4kB/BCSmN/+RFefyo JOB7tjOh4bzCD89uuO2Fh3sdI7HNePiwozoikbmfByINOLT6bsB2WcAuBBVl13WH4aGM i/n+cD2dEOcAKSwM+w8pibOD/6WYG2ssWMWFTSk3PRrOy4FXG2N3vL9Kj/HElwhFjuYO V7EQ== 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; bh=Kka6OSeCqhR23Eqo5Ax8TkJhyA2QiV9ggKbue2rpGrU=; b=Uk+PfQE558OD/433YSCeUgPiGhdC5MUhnPJKV+cdpzLuvmR7gCVvXB2YxDld03r9v8 snWhaalP9f8KOopHUeMJZC41b/+l/4EAtzvVYQ4/FHrPVrbpqpFmNt00R8yMIXdRUMAT 8DT773rjVFm4Ms/q5XyRpdNUtaoRc3ZLrhcZJdmT6sdv7KFn6VSNLX3vyhDlaUoCwqWh kzNsjBPMwBapH5UzxxRfk9cGWRQBPyhgmYpW+9RgPiXvAO6p6nwylkGu3sBiJn9Yegyb DUfA/7BkAI72DR27xjrdNGuGVp9eA5KsxmDfMtpCMhdDTi/noVAqK+pseS/lXSh9XgnF SSWg== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (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 l5si4677772ejn.545.2020.12.06.03.46.43; Sun, 06 Dec 2020 03:47:05 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729305AbgLFLoM (ORCPT + 99 others); Sun, 6 Dec 2020 06:44:12 -0500 Received: from mail.kernel.org ([198.145.29.99]:43764 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728304AbgLFLoE (ORCPT ); Sun, 6 Dec 2020 06:44:04 -0500 From: Greg Kroah-Hartman Authentication-Results: mail.kernel.org; dkim=permerror (bad message/signature format) To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hulk Robot , Wang Hai , Jakub Kicinski Subject: [PATCH 5.9 03/46] ipv6: addrlabel: fix possible memory leak in ip6addrlbl_net_init Date: Sun, 6 Dec 2020 12:17:11 +0100 Message-Id: <20201206111556.600905754@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201206111556.455533723@linuxfoundation.org> References: <20201206111556.455533723@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: Wang Hai [ Upstream commit e255e11e66da8281e337e4e352956e8a4999fca4 ] kmemleak report a memory leak as follows: unreferenced object 0xffff8880059c6a00 (size 64): comm "ip", pid 23696, jiffies 4296590183 (age 1755.384s) hex dump (first 32 bytes): 20 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 ............... 1c 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 ................ backtrace: [<00000000aa4e7a87>] ip6addrlbl_add+0x90/0xbb0 [<0000000070b8d7f1>] ip6addrlbl_net_init+0x109/0x170 [<000000006a9ca9d4>] ops_init+0xa8/0x3c0 [<000000002da57bf2>] setup_net+0x2de/0x7e0 [<000000004e52d573>] copy_net_ns+0x27d/0x530 [<00000000b07ae2b4>] create_new_namespaces+0x382/0xa30 [<000000003b76d36f>] unshare_nsproxy_namespaces+0xa1/0x1d0 [<0000000030653721>] ksys_unshare+0x3a4/0x780 [<0000000007e82e40>] __x64_sys_unshare+0x2d/0x40 [<0000000031a10c08>] do_syscall_64+0x33/0x40 [<0000000099df30e7>] entry_SYSCALL_64_after_hwframe+0x44/0xa9 We should free all rules when we catch an error in ip6addrlbl_net_init(). otherwise a memory leak will occur. Fixes: 2a8cc6c89039 ("[IPV6] ADDRCONF: Support RFC3484 configurable address selection policy table.") Reported-by: Hulk Robot Signed-off-by: Wang Hai Link: https://lore.kernel.org/r/20201124071728.8385-1-wanghai38@huawei.com Signed-off-by: Jakub Kicinski Signed-off-by: Greg Kroah-Hartman --- net/ipv6/addrlabel.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) --- a/net/ipv6/addrlabel.c +++ b/net/ipv6/addrlabel.c @@ -306,7 +306,9 @@ static int ip6addrlbl_del(struct net *ne /* add default label */ static int __net_init ip6addrlbl_net_init(struct net *net) { - int err = 0; + struct ip6addrlbl_entry *p = NULL; + struct hlist_node *n; + int err; int i; ADDRLABEL(KERN_DEBUG "%s\n", __func__); @@ -315,14 +317,20 @@ static int __net_init ip6addrlbl_net_ini INIT_HLIST_HEAD(&net->ipv6.ip6addrlbl_table.head); for (i = 0; i < ARRAY_SIZE(ip6addrlbl_init_table); i++) { - int ret = ip6addrlbl_add(net, - ip6addrlbl_init_table[i].prefix, - ip6addrlbl_init_table[i].prefixlen, - 0, - ip6addrlbl_init_table[i].label, 0); - /* XXX: should we free all rules when we catch an error? */ - if (ret && (!err || err != -ENOMEM)) - err = ret; + err = ip6addrlbl_add(net, + ip6addrlbl_init_table[i].prefix, + ip6addrlbl_init_table[i].prefixlen, + 0, + ip6addrlbl_init_table[i].label, 0); + if (err) + goto err_ip6addrlbl_add; + } + return 0; + +err_ip6addrlbl_add: + hlist_for_each_entry_safe(p, n, &net->ipv6.ip6addrlbl_table.head, list) { + hlist_del_rcu(&p->list); + kfree_rcu(p, rcu); } return err; }