xfs: test readlink/readdir with malformed inode mode
authorAmir Goldstein <amir73il@gmail.com>
Wed, 11 Jan 2017 06:41:12 +0000 (08:41 +0200)
committerEryu Guan <eguan@redhat.com>
Fri, 20 Jan 2017 12:05:39 +0000 (20:05 +0800)
In addition to testing xfs_repair on inodes with malformed mode,
and fstat of those inodes on a mounted fs, try to also list content
of mock directory and readlink of mock symlink.

Readdir of mock directory triggers XFS assertion on kernel 4.9 with
XFS_DEBUG=y

XFS: Assertion failed:
     rval == 0 || args->dp->i_d.di_size == args->geo->blksize,
file: /home/amir/build/src/linux/fs/xfs/libxfs/xfs_dir2.c, line: 634

A fix patch, as suggested by Darrick, changes this ASSERT() to
return -EFSCORRUPTED ("xfs: sanity check directory inode di_size").

Merging this test should be deferred to after fix patch is merged.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
tests/xfs/348

index b195fffbc1220f5822cce8a796540268b87e868f..9d3bcb222b8f60048e087d88074a848c98ad9b19 100755 (executable)
@@ -133,6 +133,15 @@ for dt in $dtypes; do
                        cat $tmp.stat.err
                else
                        echo "stat: '$testdir/$file' is a $ftype"
+                       # Verify that readlink of a file posing as a symlink
+                       # and ls of a file posing as a directory does not blow up.
+                       # NOTE that ls DOES ASSERT with kernel 4.9 and XFS_DEBUG=y
+                       # on malformed directory
+                       if [ -d $testdir/$file ]; then
+                               ls $testdir/$file &> /dev/null
+                       elif [ -h $testdir/$file ]; then
+                               readlink $testdir/$file &> /dev/null
+                       fi
                fi | _filter_scratch
        done
        _scratch_unmount