Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp321734ybg; Mon, 1 Jun 2020 02:13:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxmfI8+N8detsQXIjeEvvckZksl7E/YFYNd9sjscI1+tajgSt4+vq2qneZBK8QG3B8oS7Zm X-Received: by 2002:a17:906:651:: with SMTP id t17mr19335454ejb.394.1591002795424; Mon, 01 Jun 2020 02:13:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591002795; cv=none; d=google.com; s=arc-20160816; b=oKRYbJWLpSD98bPf8fTjibtjNEfCboCH4IV686XS56JRdN17TC1usT2Kzo2mRIcrxs RRikM7loN/Otvq3kDYy6mxSE2wtEdtBx7w+iAKgWabUVkBOKLjcTqUgdtVYjaKB3IMdW gW15tAQX2O+BUnF6mDEHU98p55OAEACd02Gpdi2V6Zgoa3uV3mx3h9oJ8aELSVoHP3XM XQ35zJgBKmIzO91dGKPk4aGtw4HUQUfvOGsA6YyiUVeT5rxAc01zF1LbDJXgPeeODkKA 7JRPXGuglN8Q55EC5S1rArcJ2Q1hUFAR35Z6KIuAWdhoERr1lVXfeHHE1fKp8rrGxgpW v5rQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=Q+PFIcyGan9jLlRLp0ayHf3OlMs3XoN9bA13bwyhRuw=; b=N5gQs0CYrHfR+Ey62klL8U0xl8SO76nWVWpABEsQgFe0FxcB7K2OIkV2G1KrXoH8aM 2mRJV7TFFHag1oLycPCu+mBcjooblM1ZUPumO9AXJH2BxqgXExaB3Ncpc2uOLfTlBJti E9DGE+nw9QaVy7MAMOw4QjIenJgKo/HgYIVw/yVhmtf1b/MnZeHikM9vinR214SN+XzO Q86Emnvt+jpa9Z8jc18b+DQhL4lbqbaftQWOfD2vEO1njIX0Q6DhohkXYWiI58v1yXES WNXUZ9ioWKJF2DNAyOh7JU/YvFURV7KHXLOXeViKV50rmDVY+rQAbMVCZUkoZPEc4Ylm zhvw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id pg7si10007747ejb.411.2020.06.01.02.12.51; Mon, 01 Jun 2020 02:13:15 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726066AbgFAJLJ (ORCPT + 99 others); Mon, 1 Jun 2020 05:11:09 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:5318 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725778AbgFAJLI (ORCPT ); Mon, 1 Jun 2020 05:11:08 -0400 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 80EC4818D4072B2359A9; Mon, 1 Jun 2020 17:11:06 +0800 (CST) Received: from huawei.com (10.175.104.175) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.487.0; Mon, 1 Jun 2020 17:10:58 +0800 From: Zhihao Cheng To: , CC: , Subject: [PATCH 1/2] ubifs: xattr: Fix some potential memory leaks while iterating entries Date: Mon, 1 Jun 2020 17:10:36 +0800 Message-ID: <20200601091037.3794172-1-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.104.175] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix some potential memory leaks in error handling branches while iterating xattr entries. For example, function ubifs_tnc_remove_ino() forgets to free pxent if it exists. Similar problems also exist in ubifs_purge_xattrs(), ubifs_add_orphan() and ubifs_jnl_write_inode(). Signed-off-by: Zhihao Cheng Cc: Fixes: 1e51764a3c2ac05a2 ("UBIFS: add new flash file system") --- fs/ubifs/journal.c | 2 ++ fs/ubifs/orphan.c | 2 ++ fs/ubifs/tnc.c | 3 +++ fs/ubifs/xattr.c | 2 ++ 4 files changed, 9 insertions(+) diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c index e5ec1afe1c66..0b4b94b079a6 100644 --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c @@ -893,6 +893,7 @@ int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode) if (err == -ENOENT) break; + kfree(pxent); goto out_release; } @@ -905,6 +906,7 @@ int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode) ubifs_err(c, "dead directory entry '%s', error %d", xent->name, err); ubifs_ro_mode(c, err); + kfree(pxent); kfree(xent); goto out_release; } diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c index 283f9eb48410..b0117878b3a0 100644 --- a/fs/ubifs/orphan.c +++ b/fs/ubifs/orphan.c @@ -173,6 +173,7 @@ int ubifs_add_orphan(struct ubifs_info *c, ino_t inum) err = PTR_ERR(xent); if (err == -ENOENT) break; + kfree(pxent); return err; } @@ -182,6 +183,7 @@ int ubifs_add_orphan(struct ubifs_info *c, ino_t inum) xattr_orphan = orphan_add(c, xattr_inum, orphan); if (IS_ERR(xattr_orphan)) { + kfree(pxent); kfree(xent); return PTR_ERR(xattr_orphan); } diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c index e8e7b0e9532e..33742ee3945b 100644 --- a/fs/ubifs/tnc.c +++ b/fs/ubifs/tnc.c @@ -2885,6 +2885,7 @@ int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum) err = PTR_ERR(xent); if (err == -ENOENT) break; + kfree(pxent); return err; } @@ -2898,6 +2899,7 @@ int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum) fname_len(&nm) = le16_to_cpu(xent->nlen); err = ubifs_tnc_remove_nm(c, &key1, &nm); if (err) { + kfree(pxent); kfree(xent); return err; } @@ -2906,6 +2908,7 @@ int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum) highest_ino_key(c, &key2, xattr_inum); err = ubifs_tnc_remove_range(c, &key1, &key2); if (err) { + kfree(pxent); kfree(xent); return err; } diff --git a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c index 9aefbb60074f..a0b9b349efe6 100644 --- a/fs/ubifs/xattr.c +++ b/fs/ubifs/xattr.c @@ -522,6 +522,7 @@ int ubifs_purge_xattrs(struct inode *host) xent->name, err); ubifs_ro_mode(c, err); kfree(pxent); + kfree(xent); return err; } @@ -531,6 +532,7 @@ int ubifs_purge_xattrs(struct inode *host) err = remove_xattr(c, host, xino, &nm); if (err) { kfree(pxent); + kfree(xent); iput(xino); ubifs_err(c, "cannot remove xattr, error %d", err); return err; -- 2.25.4