Skip to contentSkip to conversation

: reiserfs: A-panic-in-reiserfs_read_super.patch

PATCH New Nikita Danilov 1 participant 1 message Aug 2, 2001

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 : reiserfs: A-panic-in-reiserfs_read_super.patch

Hello, Linus,

some bug-fixes for reiserfs missed 2.4.8-pre kernels. I am resending them.

this patch allows reiserfs to cope with an attempt to mount file-system with corrupted super-block: reiserfs stores both version-dependent magic and version itself in a super-block. This patch just returns error rather than panics if they don't match. Please apply.

[lkml: please CC me, I am not subscribed.]

Nikita.

fs/reiserfs/super.c +11 -4
diff -rup linux-2.4.8-pre3/fs/reiserfs/super.c linux-2.4.8-pre3.patched/fs/reiserfs/super.c
@@ -779,16 +779,23 @@ struct super_block * reiserfs_read_super
 
     if (!(s->s_flags & MS_RDONLY)) {
 	struct reiserfs_super_block * rs = SB_DISK_SUPER_BLOCK (s);
+	int old_magic;
+
+	old_magic = strncmp (rs->s_magic,  REISER2FS_SUPER_MAGIC_STRING, 
+			     strlen ( REISER2FS_SUPER_MAGIC_STRING));
+	if( old_magic && le16_to_cpu(rs->s_version) != 0 ) {
+	  dput(s->s_root) ;
+	  s->s_root = NULL ;
+	  reiserfs_warning("reiserfs: wrong version/magic combination in the super-block\n") ;
+	  goto error ;
+	}
 
 	journal_begin(&th, s, 1) ;
 	reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1) ;
 
 	rs->s_state = cpu_to_le16 (REISERFS_ERROR_FS);
 
-        if (strncmp (rs->s_magic,  REISER2FS_SUPER_MAGIC_STRING, 
-		     strlen ( REISER2FS_SUPER_MAGIC_STRING))) {
-	    if (le16_to_cpu(rs->s_version) != 0)
-		BUG ();
+        if ( old_magic ) {
 	    // filesystem created under 3.5.x found
 	    if (!old_format_only (s)) {
 		reiserfs_warning("reiserfs: converting 3.5.x filesystem to the new format\n") ;