Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Apr 2014 16:21:43 +0900
From:      takehara.mikihito@jp.panasonic.com
To:        freebsd-current@freebsd.org
Subject:   uninitialized journal data written in SU+J ?
Message-ID:  <C1CF5DFB8355ACtakehara.mikihito@jp.panasonic.com>

next in thread | raw e-mail | index | archive | help
Hello,


I'm testing UFS with SU+J. But it seems sometimes broken journal data has written.

In softdep_process_journal (ffs_softdep.c), there is a while code to build jsegrec and each entry.
But by my test, sometimes there is no entry then break this while code without building jsegrec.
If this happens, bp->b_data is not initialized but this bp is written, I think.

I checked this behavior by following patch.
============================================================================================
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 585af50..2d4939c 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -3421,6 +3421,15 @@ softdep_process_journal(mp, needwk, flags)
                        data = bp->b_data + off;
                        cnt--;
                }
+
+#if 1
+               if (off == 0) {
+                       struct jsegrec *tmp = (struct jsegrec*)bp->b_data;
+                       if (tmp->jsr_seq != jseg->js_seq) {
+                               panic("test test");
+                       }
+               }
+#endif
                /*
                 * Write this one buffer and continue.
                 */
============================================================================================

If uninitialized data is "valid" by fsck suj, this may result filesystem corruption, I think.
I think it's better to clear b_data before using it.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C1CF5DFB8355ACtakehara.mikihito>