• Daeho Jeong's avatar
    ext4: reinforce check of i_dtime when clearing high fields of uid and gid · 93e3b4e6
    Daeho Jeong authored
    Now, ext4_do_update_inode() clears high 16-bit fields of uid/gid
    of deleted and evicted inode to fix up interoperability with old
    kernels. However, it checks only i_dtime of an inode to determine
    whether the inode was deleted and evicted, and this is very risky,
    because i_dtime can be used for the pointer maintaining orphan inode
    list, too. We need to further check whether the i_dtime is being
    used for the orphan inode list even if the i_dtime is not NULL.
    
    We found that high 16-bit fields of uid/gid of inode are unintentionally
    and permanently cleared when the inode truncation is just triggered,
    but not finished, and the inode metadata, whose high uid/gid bits are
    cleared, is written on disk, and the sudden power-off follows that
    in order.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDaeho Jeong <daeho.jeong@samsung.com>
    Signed-off-by: default avatarHobin Woo <hobin.woo@samsung.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    93e3b4e6
inode.c 168 KB