: reiserfs: A-panic-in-reiserfs_read_super.patch
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
@@ -779,16 +779,23 @@ struct super_block * reiserfs_read_superif (!(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" ) ;