• Ryusuke Konishi's avatar
    nilfs2: prevent WARNING in nilfs_sufile_set_segment_usage() · 675abf8d
    Ryusuke Konishi authored
    If nilfs2 reads a disk image with corrupted segment usage metadata, and
    its segment usage information is marked as an error for the segment at the
    write location, nilfs_sufile_set_segment_usage() can trigger WARN_ONs
    during log writing.
    
    Segments newly allocated for writing with nilfs_sufile_alloc() will not
    have this error flag set, but this unexpected situation will occur if the
    segment indexed by either nilfs->ns_segnum or nilfs->ns_nextnum (active
    segment) was marked in error.
    
    Fix this issue by inserting a sanity check to treat it as a file system
    corruption.
    
    Since error returns are not allowed during the execution phase where
    nilfs_sufile_set_segment_usage() is used, this inserts the sanity check
    into nilfs_sufile_mark_dirty() which pre-reads the buffer containing the
    segment usage record to be updated and sets it up in a dirty state for
    writing.
    
    In addition, nilfs_sufile_set_segment_usage() is also called when
    canceling log writing and undoing segment usage update, so in order to
    avoid issuing the same kernel warning in that case, in case of
    cancellation, avoid checking the error flag in
    nilfs_sufile_set_segment_usage().
    
    Link: https://lkml.kernel.org/r/20231205085947.4431-1-konishi.ryusuke@gmail.comSigned-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+14e9f834f6ddecece094@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=14e9f834f6ddecece094Tested-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    675abf8d
sufile.c 32.8 KB