Skip to content
Snippets Groups Projects
  • Heming Zhao via Ocfs2-devel's avatar
    ocfs2: fix mounting crash if journal is not alloced · bb20b31d
    Heming Zhao via Ocfs2-devel authored
    Patch series "rewrite error handling during mounting stage".
    
    
    This patch (of 5):
    
    After commit da5e7c87 ("ocfs2: cleanup journal init and shutdown"),
    journal init later than before, it makes NULL pointer access in free
    routine.
    
    Crash flow:
    
    ocfs2_fill_super
     + ocfs2_mount_volume
     |  + ocfs2_dlm_init //fail & return, osb->journal is NULL.
     |  + ...
     |  + ocfs2_check_volume //no chance to init osb->journal
     |
     + ...
     + ocfs2_dismount_volume
        ocfs2_release_system_inodes
          ...
           evict
            ...
             ocfs2_clear_inode
              ocfs2_checkpoint_inode
               ocfs2_ci_fully_checkpointed
                time_after(journal->j_trans_id, ci->ci_last_trans)
                 + journal is empty, crash!
    
    For fixing, there are three solutions:
    
    1> Partly revert commit da5e7c87
    
       For avoiding kernel crash, this make sense for us.  We only
       concerned whether there has any non-system inode access before dlm
       init.  The answer is NO.  And all journal replay/recovery handling
       happen after dlm & journal init done.  So this method is not graceful
       but workable.
    
    2> Add osb->journal check in free inode routine (eg ocfs2_clear_inode)
    
       The fix code is special for mounting phase, but it will continue
       working after mounting stage.  In another word, this method adds
       useless code in normal inode free flow.
    
    3> Do directly free inode in mounting phase
    
       This method is brutal/complex and may introduce unsafe code,
       currently maintainer didn't like.
    
    At last, we chose method <1> and did partly reverted job.  We reverted
    journal init codes, and kept cleanup codes flow.
    
    Link: https://lkml.kernel.org/r/20220424130952.2436-1-heming.zhao@suse.com
    Link: https://lkml.kernel.org/r/20220424130952.2436-2-heming.zhao@suse.com
    
    
    Fixes: da5e7c87 ("ocfs2: cleanup journal init and shutdown")
    Signed-off-by: default avatarHeming Zhao <heming.zhao@suse.com>
    Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    bb20b31d