• Dave Chinner's avatar
    xfs: validate inode fork size against fork format · 1eb70f54
    Dave Chinner authored
    xfs_repair catches fork size/format mismatches, but the in-kernel
    verifier doesn't, leading to null pointer failures when attempting
    to perform operations on the fork. This can occur in the
    xfs_dir_is_empty() where the in-memory fork format does not match
    the size and so the fork data pointer is accessed incorrectly.
    
    Note: this causes new failures in xfs/348 which is testing mode vs
    ftype mismatches. We now detect a regular file that has been changed
    to a directory or symlink mode as being corrupt because the data
    fork is for a symlink or directory should be in local form when
    there are only 3 bytes of data in the data fork. Hence the inode
    verify for the regular file now fires w/ -EFSCORRUPTED because
    the inode fork format does not match the format the corrupted mode
    says it should be in.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    1eb70f54
xfs_inode_buf.c 21 KB