From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Bob Peterson <rpeterso@redhat.com>,
Yang Lan <lanyang0908@gmail.com>,
Andreas Gruenbacher <agruenba@redhat.com>,
Sasha Levin <sashal@kernel.org>,
cluster-devel@redhat.com
Subject: [PATCH AUTOSEL 6.3 11/18] gfs2: Don't deref jdesc in evict
Date: Sat, 20 May 2023 14:17:43 -0400 [thread overview]
Message-ID: <20230520181750.823365-11-sashal@kernel.org> (raw)
In-Reply-To: <20230520181750.823365-1-sashal@kernel.org>
From: Bob Peterson <rpeterso@redhat.com>
[ Upstream commit 504a10d9e46bc37b23d0a1ae2f28973c8516e636 ]
On corrupt gfs2 file systems the evict code can try to reference the
journal descriptor structure, jdesc, after it has been freed and set to
NULL. The sequence of events is:
init_journal()
...
fail_jindex:
gfs2_jindex_free(sdp); <------frees journals, sets jdesc = NULL
if (gfs2_holder_initialized(&ji_gh))
gfs2_glock_dq_uninit(&ji_gh);
fail:
iput(sdp->sd_jindex); <--references jdesc in evict_linked_inode
evict()
gfs2_evict_inode()
evict_linked_inode()
ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks);
<------references the now freed/zeroed sd_jdesc pointer.
The call to gfs2_trans_begin is done because the truncate_inode_pages
call can cause gfs2 events that require a transaction, such as removing
journaled data (jdata) blocks from the journal.
This patch fixes the problem by adding a check for sdp->sd_jdesc to
function gfs2_evict_inode. In theory, this should only happen to corrupt
gfs2 file systems, when gfs2 detects the problem, reports it, then tries
to evict all the system inodes it has read in up to that point.
Reported-by: Yang Lan <lanyang0908@gmail.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/gfs2/super.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index a83fa62106f0e..7891f331082aa 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -1410,6 +1410,14 @@ static void gfs2_evict_inode(struct inode *inode)
if (inode->i_nlink || sb_rdonly(sb) || !ip->i_no_addr)
goto out;
+ /*
+ * In case of an incomplete mount, gfs2_evict_inode() may be called for
+ * system files without having an active journal to write to. In that
+ * case, skip the filesystem evict.
+ */
+ if (!sdp->sd_jdesc)
+ goto out;
+
gfs2_holder_mark_uninitialized(&gh);
ret = evict_should_delete(inode, &gh);
if (ret == SHOULD_DEFER_EVICTION)
--
2.39.2
next prev parent reply other threads:[~2023-05-20 18:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-20 18:17 [PATCH AUTOSEL 6.3 01/18] drm/ast: Fix ARM compatibility Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 02/18] btrfs: abort transaction when sibling keys check fails for leaves Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 03/18] ARM: 9295/1: unwind:fix unwind abort for uleb128 case Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 04/18] perf/x86/intel/ds: Flush PEBS DS when changing PEBS_DATA_CFG Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 05/18] hwmon: (k10temp) Add PCI ID for family 19, model 78h Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 06/18] media: rcar-vin: Gen3 can not scale NV12 Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 07/18] media: rcar-vin: Fix NV12 size alignment Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 08/18] media: rcar-vin: Select correct interrupt mode for V4L2_FIELD_ALTERNATE Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 09/18] platform/x86: intel_scu_pcidrv: Add back PCI ID for Medfield Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 10/18] platform/mellanox: fix potential race in mlxbf-tmfifo driver Sasha Levin
2023-05-20 18:17 ` Sasha Levin [this message]
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 12/18] drm/amdgpu/nv: update VCN 3 max HEVC encoding resolution Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 13/18] drm/amdgpu: set gfx9 onwards APU atomics support to be true Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 14/18] fbdev: imsttfb: Fix use after free bug in imsttfb_probe Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 15/18] fbdev: modedb: Add 1920x1080 at 60 Hz video mode Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 16/18] fbdev: stifb: Fix info entry in sti_struct on error path Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 17/18] nbd: Fix debugfs_create_dir error checking Sasha Levin
2023-05-20 18:17 ` [PATCH AUTOSEL 6.3 18/18] block/rnbd: replace REQ_OP_FLUSH with REQ_OP_WRITE Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230520181750.823365-11-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=agruenba@redhat.com \
--cc=cluster-devel@redhat.com \
--cc=lanyang0908@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rpeterso@redhat.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).