public inbox for linux-ext4@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC] jbd2: detect old record when do journal scan
@ 2022-08-10  1:34 Ye Bin
  2022-08-19  8:00 ` yebin
  2022-08-19  9:54 ` Jan Kara
  0 siblings, 2 replies; 6+ messages in thread
From: Ye Bin @ 2022-08-10  1:34 UTC (permalink / raw)
  To: tytso, adilger.kernel, linux-ext4; +Cc: linux-kernel, jack, Ye Bin

As https://github.com/tytso/e2fsprogs/issues/120 describe tune2fs do not update
j_tail_sequence when do journal recovery. This maybe recover old journal record,
then will lead to file system corruption.
To avoid file system corruption in this case, if detect current transaction's
commit time earlier than previous transaction's commit time when do journal
scan, just return error.

Signed-off-by: Ye Bin <yebin10@huawei.com>
---
 fs/jbd2/recovery.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/fs/jbd2/recovery.c b/fs/jbd2/recovery.c
index f548479615c6..f3def21a96a5 100644
--- a/fs/jbd2/recovery.c
+++ b/fs/jbd2/recovery.c
@@ -812,8 +812,17 @@ static int do_one_pass(journal_t *journal,
 					break;
 				}
 			}
-			if (pass == PASS_SCAN)
+			if (pass == PASS_SCAN) {
+				if (commit_time < last_trans_commit_time) {
+					pr_err("JBD2: old journal record found "
+					       "in transaction %u\n",
+					       next_commit_ID);
+					err = -EFSBADCRC;
+					brelse(bh);
+					goto failed;
+				}
 				last_trans_commit_time = commit_time;
+			}
 			brelse(bh);
 			next_commit_ID++;
 			continue;
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-08-23 16:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-10  1:34 [PATCH RFC] jbd2: detect old record when do journal scan Ye Bin
2022-08-19  8:00 ` yebin
2022-08-19  8:34   ` fengnan chang
2022-08-19  9:54 ` Jan Kara
2022-08-23  9:17   ` yebin
2022-08-23 13:07     ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox