• Eric Biggers's avatar
    ext4: reject casefold inode flag without casefold feature · 8216776c
    Eric Biggers authored
    It is invalid for the casefold inode flag to be set without the casefold
    superblock feature flag also being set.  e2fsck already considers this
    case to be invalid and handles it by offering to clear the casefold flag
    on the inode.  __ext4_iget() also already considered this to be invalid,
    sort of, but it only got so far as logging an error message; it didn't
    actually reject the inode.  Make it reject the inode so that other code
    doesn't have to handle this case.  This matches what f2fs does.
    
    Note: we could check 's_encoding != NULL' instead of
    ext4_has_feature_casefold().  This would make the check robust against
    the casefold feature being enabled by userspace writing to the page
    cache of the mounted block device.  However, it's unsolvable in general
    for filesystems to be robust against concurrent writes to the page cache
    of the mounted block device.  Though this very particular scenario
    involving the casefold feature is solvable, we should not pretend that
    we can support this model, so let's just check the casefold feature.
    tune2fs already forbids enabling casefold on a mounted filesystem.
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Link: https://lore.kernel.org/r/20230814182903.37267-2-ebiggers@kernel.orgSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    8216776c
inode.c 178 KB