From 918d9a54fe732709519208245354597807682877 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Fri, 2 Mar 2018 16:59:23 -0800 Subject: [PATCH] tests: test e2fsck's handling of bad symlinks Add a test which verifies that e2fsck will detect a variety of bad symlinks, both fast and slow, and with several combinations of filesystem features including extents, encryption, and inline_data. There was already a similar test (f_badsymlinks), but it's an old test that doesn't use any of these newer filesystem features. Signed-off-by: Eric Biggers Signed-off-by: Theodore Ts'o --- tests/f_badsymlinks2/expect.1 | 114 ++++++++++++++++++++++++++++++++++++ tests/f_badsymlinks2/expect.2 | 7 +++ tests/f_badsymlinks2/image.gz | Bin 0 -> 14302 bytes tests/f_badsymlinks2/mkimage.sh | 127 ++++++++++++++++++++++++++++++++++++++++ tests/f_badsymlinks2/name | 1 + 5 files changed, 249 insertions(+) create mode 100644 tests/f_badsymlinks2/expect.1 create mode 100644 tests/f_badsymlinks2/expect.2 create mode 100644 tests/f_badsymlinks2/image.gz create mode 100755 tests/f_badsymlinks2/mkimage.sh create mode 100644 tests/f_badsymlinks2/name diff --git a/tests/f_badsymlinks2/expect.1 b/tests/f_badsymlinks2/expect.1 new file mode 100644 index 0000000..939edce --- /dev/null +++ b/tests/f_badsymlinks2/expect.1 @@ -0,0 +1,114 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Symlink /default/empty (inode #13) is invalid. +Clear? yes + +Symlink /default/fast_isize_too_small (inode #15) is invalid. +Clear? yes + +Symlink /default/fast_isize_too_large (inode #16) is invalid. +Clear? yes + +Symlink /default/slow_isize_too_small (inode #19) is invalid. +Clear? yes + +Symlink /default/slow_isize_too_large (inode #20) is invalid. +Clear? yes + +Symlink /default/one_too_long (inode #22) is invalid. +Clear? yes + +Symlink /default/too_long (inode #23) is invalid. +Clear? yes + +Symlink /encrypted/empty (inode #25) is invalid. +Clear? yes + +Symlink /encrypted/fast_isize_too_large (inode #28) is invalid. +Clear? yes + +Symlink /encrypted/fast_isize_too_small (inode #27) is invalid. +Clear? yes + +Symlink /encrypted/one_too_long (inode #34) is invalid. +Clear? yes + +Symlink /encrypted/slow_isize_too_large (inode #32) is invalid. +Clear? yes + +Symlink /encrypted/slow_isize_too_small (inode #31) is invalid. +Clear? yes + +Symlink /encrypted/too_long (inode #35) is invalid. +Clear? yes + +Symlink /extents/empty (inode #38) is invalid. +Clear? yes + +Symlink /extents/fast_isize_too_small (inode #40) is invalid. +Clear? yes + +Symlink /extents/fast_isize_too_large (inode #41) is invalid. +Clear? yes + +Symlink /extents/slow_isize_too_small (inode #44) is invalid. +Clear? yes + +Symlink /extents/slow_isize_too_large (inode #45) is invalid. +Clear? yes + +Symlink /extents/one_too_long (inode #47) is invalid. +Clear? yes + +Symlink /extents/too_long (inode #48) is invalid. +Clear? yes + +Symlink /extents_encrypted/empty (inode #50) is invalid. +Clear? yes + +Symlink /extents_encrypted/fast_isize_too_large (inode #53) is invalid. +Clear? yes + +Symlink /extents_encrypted/fast_isize_too_small (inode #52) is invalid. +Clear? yes + +Symlink /extents_encrypted/one_too_long (inode #59) is invalid. +Clear? yes + +Symlink /extents_encrypted/slow_isize_too_large (inode #57) is invalid. +Clear? yes + +Symlink /extents_encrypted/slow_isize_too_small (inode #56) is invalid. +Clear? yes + +Symlink /extents_encrypted/too_long (inode #60) is invalid. +Clear? yes + +Symlink /inline_data/empty (inode #63) is invalid. +Clear? yes + +Symlink /inline_data/fast_isize_too_small (inode #65) is invalid. +Clear? yes + +Symlink /inline_data/fast_isize_too_large (inode #66) is invalid. +Clear? yes + +Symlink /inline_data/slow_isize_too_small (inode #69) is invalid. +Clear? yes + +Symlink /inline_data/slow_isize_too_large (inode #70) is invalid. +Clear? yes + +Symlink /inline_data/one_too_long (inode #72) is invalid. +Clear? yes + +Symlink /inline_data/too_long (inode #73) is invalid. +Clear? yes + +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 36/80 files (0.0% non-contiguous), 31/150 blocks +Exit status is 1 diff --git a/tests/f_badsymlinks2/expect.2 b/tests/f_badsymlinks2/expect.2 new file mode 100644 index 0000000..3da98a8 --- /dev/null +++ b/tests/f_badsymlinks2/expect.2 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 36/80 files (0.0% non-contiguous), 31/150 blocks +Exit status is 0 diff --git a/tests/f_badsymlinks2/image.gz b/tests/f_badsymlinks2/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..d1f314ced5f639e635848b879b7dd248ec5ecade GIT binary patch literal 14302 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 literal 0 HcmV?d00001 diff --git a/tests/f_badsymlinks2/mkimage.sh b/tests/f_badsymlinks2/mkimage.sh new file mode 100755 index 0000000..6bbf020 --- /dev/null +++ b/tests/f_badsymlinks2/mkimage.sh @@ -0,0 +1,127 @@ +#!/bin/bash + +# This is the script that was used to create the image.gz in this directory. + +set -e -u + +BLOCKSIZE=4096 + +do_debugfs() { + umount mnt + debugfs -w "$@" image + mount image mnt +} + +do_tune2fs() { + umount mnt + tune2fs $@ image + mount image mnt +} + +symlink() { + local len=$1 + local src=$2 + local target=$(perl -e 'print "A" x '$len) + ln -s $target $src + stat -c %i $src +} + +# Overwrite the length in the header of the encrypted symlink target +set_encrypted_symlink_len() { + local ino=$1 + local len=$2 + + echo "zap_block -f <$ino> -p $((len%256)) -o 0 -l 1 0" + echo "zap_block -f <$ino> -p $((len/256)) -o 1 -l 1 0" +} + +create_symlinks() { + local dir=$1 + local encrypted=${2:-false} + local overhead=0 + local ino + + if $encrypted; then + overhead=2 + fi + + mkdir -p $dir + + { + ino=$(symlink 1 $dir/empty) + echo "set_inode_field <$ino> i_size 10" + echo "set_inode_field <$ino> block[0] 0" + + symlink 1 $dir/fast_min > /dev/null + + ino=$(symlink 10 $dir/fast_isize_too_small) + echo "set_inode_field <$ino> i_size 1" + + ino=$(symlink 10 $dir/fast_isize_too_large) + echo "set_inode_field <$ino> i_size 20" + + symlink $((59 - overhead)) $dir/fast_max > /dev/null + + symlink $((60 - overhead)) $dir/slow_min > /dev/null + + ino=$(symlink 100 $dir/slow_isize_too_small) + echo "set_inode_field <$ino> i_size 80" + + ino=$(symlink 100 $dir/slow_isize_too_large) + echo "set_inode_field <$ino> i_size 120" + + symlink $((BLOCKSIZE - 1 - overhead)) $dir/slow_max > /dev/null + + ino=$(symlink $((BLOCKSIZE - 1 - overhead)) $dir/one_too_long) + echo "set_inode_field <$ino> i_size $BLOCKSIZE" + echo "zap_block -f <$ino> -p 65 0" + if $encrypted; then + set_encrypted_symlink_len $ino $((BLOCKSIZE - overhead)) + fi + + ino=$(symlink $((BLOCKSIZE - 1 - overhead)) $dir/too_long) + echo "set_inode_field <$ino> i_size $((BLOCKSIZE + 1000))" + echo "zap_block -f <$ino> -p 65 0" + if $encrypted; then + set_encrypted_symlink_len $ino $((BLOCKSIZE + 1000 - overhead)) + fi + + } >> debugfs_commands + do_debugfs < debugfs_commands +} + +create_encrypted_symlinks() { + local dir=$1 link + + mkdir $dir + echo | e4crypt add_key $dir + create_symlinks $dir true + + # Move symlinks into an unencrypted directory (leaving their targets + # encrypted). This makes the fsck output consistent. + mv $dir ${dir}~encrypted + mkdir $dir + mv ${dir}~encrypted/* $dir +} + +mkdir -p mnt +umount mnt &> /dev/null || true +dd if=/dev/zero of=image bs=1024 count=600 + +mke2fs -O 'encrypt,^extents,^64bit' -b $BLOCKSIZE -I 256 image +mount image mnt + +create_symlinks mnt/default +create_encrypted_symlinks mnt/encrypted + +do_tune2fs -O extents +create_symlinks mnt/extents +create_encrypted_symlinks mnt/extents_encrypted + +do_debugfs -R 'feature inline_data' +create_symlinks mnt/inline_data + +rm -rf debugfs_commands mnt/*~encrypted +umount mnt +rmdir mnt +gzip -9 -f image diff --git a/tests/f_badsymlinks2/name b/tests/f_badsymlinks2/name new file mode 100644 index 0000000..81d3285 --- /dev/null +++ b/tests/f_badsymlinks2/name @@ -0,0 +1 @@ +more types of corrupted symlinks -- 1.8.3.1