• Eryu Guan's avatar
    xfs: use xfs_vn_setattr_size to check on new size · 0c187dc5
    Eryu Guan authored
    Commit 65523218 ("xfs: remove i_iolock and use i_rwsem in the
    VFS inode instead") introduced a regression that truncate(2) doesn't
    check on new size, so it succeeds even if the new size exceeds the
    current resource limit. Because xfs_setattr_size() was used instead
    of xfs_vn_setattr_size(), and the latter calls xfs_vn_change_ok()
    first to do sanity check on permission and new size.
    
    This is found by truncate03 test from ltp, and the following is a
    simplified reproducer:
    
      #!/bin/bash
      dev=/dev/sda5
      mnt=/mnt/xfs
    
      mkfs -t xfs -f $dev
      mount $dev $mnt
    
      # set max file size to 16k
      ulimit -f 16
      truncate -s $((16 * 1024 + 1)) /mnt/xfs/testfile
      [ $? -eq 0 ] && echo "FAIL: truncate exceeded max file size"
      ulimit -f unlimited
      umount $mnt
    Signed-off-by: default avatarEryu Guan <eguan@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    
    0c187dc5
xfs_iops.c 31.1 KB