[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fstests
Subject:    [PATCH v2 3/3] xfs/348: test readlink/readdir with malformed inode mode
From:       Amir Goldstein <amir73il () gmail ! com>
Date:       2016-12-25 18:09:36
Message-ID: 1482689376-23553-4-git-send-email-amir73il () gmail ! com
[Download RAW message or body]

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 umount:
 XFS: Assertion failed: !rwsem_is_locked(&inode->i_rwsem), file:
 /home/amir/build/src/linux/fs/xfs/xfs_super.c, line: 951

To reproduce, need to comment out the variable 'safety'.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
 tests/xfs/348 | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/tests/xfs/348 b/tests/xfs/348
index 2a54f9e..cb0e3ea 100755
--- a/tests/xfs/348
+++ b/tests/xfs/348
@@ -132,6 +132,16 @@ 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
+			safety="-d"
+			# NOTE that ls DOES blow up with kernel 4.9 on malformed
+			# directory - remove the safety pin to explode
+			if [ -d $testdir/$file ]; then
+				ls "$safety" $testdir/$file &> /dev/null
+			elif [ -h $testdir/$file ]; then
+				readlink $testdir/$file &> /dev/null
+			fi
 		fi | _filter_scratch
 	done
 	_scratch_unmount
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic