aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@HansenPartnership.com>2025-01-19 09:59:41 -0500
committerArd Biesheuvel <ardb@kernel.org>2025-01-19 17:49:10 +0100
commit8a32d46b204396255462712afbef16e227423f68 (patch)
tree9cba28c2a429141bb3c521c6c1bbb7059a227c62
parentefivarfs: prevent setting of zero size on the inodes in the cache (diff)
downloadwireguard-linux-8a32d46b204396255462712afbef16e227423f68.tar.xz
wireguard-linux-8a32d46b204396255462712afbef16e227423f68.zip
selftests/efivarfs: add check for disallowing file truncation
Now that the ability of arbitrary writes to set the inode size is fixed, verify that a variable file accepts a truncation operation but does not change the stat size because of it. Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
-rwxr-xr-xtools/testing/selftests/efivarfs/efivarfs.sh23
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/testing/selftests/efivarfs/efivarfs.sh b/tools/testing/selftests/efivarfs/efivarfs.sh
index d374878cc0ba..96677282789b 100755
--- a/tools/testing/selftests/efivarfs/efivarfs.sh
+++ b/tools/testing/selftests/efivarfs/efivarfs.sh
@@ -202,6 +202,28 @@ test_invalid_filenames()
exit $ret
}
+test_no_set_size()
+{
+ local attrs='\x07\x00\x00\x00'
+ local file=$efivarfs_mount/$FUNCNAME-$test_guid
+ local ret=0
+
+ printf "$attrs\x00" > $file
+ [ -e $file -a -s $file ] || exit 1
+ chattr -i $file
+ : > $file
+ if [ $? != 0 ]; then
+ echo "variable file failed to accept truncation"
+ ret=1
+ elif [ -e $file -a ! -s $file ]; then
+ echo "file can be truncated to zero size"
+ ret=1
+ fi
+ rm $file || exit 1
+
+ exit $ret
+}
+
check_prereqs
rc=0
@@ -214,5 +236,6 @@ run_test test_zero_size_delete
run_test test_open_unlink
run_test test_valid_filenames
run_test test_invalid_filenames
+run_test test_no_set_size
exit $rc