• Jeff Layton's avatar
    ceph: don't allow type or device number to change on non-I_NEW inodes · ed94f87c
    Jeff Layton authored
    Al pointed out that a malicious or broken MDS could change the type or
    device number of a given inode number. It may also be possible for the
    MDS to reuse an old inode number.
    
    Ensure that we never allow fill_inode to change the type part of the
    i_mode or the i_rdev unless I_NEW is set. Throw warnings if the MDS ever
    changes these on us mid-stream, and return an error.
    
    Don't set i_rdev directly, and rely on init_special_inode to do it.
    Also, fix up error handling in the callers of ceph_get_inode.
    
    In handle_cap_grant, check for and warn if the inode type changes, and
    only overwrite the mode if it didn't.
    Reported-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    ed94f87c
inode.c 66.3 KB