162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ciefivarfs_mount=/sys/firmware/efi/efivars 562306a36Sopenharmony_citest_guid=210be57c-9849-4fc7-a635-e6382d1aec27 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 862306a36Sopenharmony_ciksft_skip=4 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cifile_cleanup() 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci chattr -i $1 1362306a36Sopenharmony_ci rm -f $1 1462306a36Sopenharmony_ci} 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cicheck_prereqs() 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci local msg="skip all tests:" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci if [ $UID != 0 ]; then 2162306a36Sopenharmony_ci echo $msg must be run as root >&2 2262306a36Sopenharmony_ci exit $ksft_skip 2362306a36Sopenharmony_ci fi 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then 2662306a36Sopenharmony_ci echo $msg efivarfs is not mounted on $efivarfs_mount >&2 2762306a36Sopenharmony_ci exit $ksft_skip 2862306a36Sopenharmony_ci fi 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cirun_test() 3262306a36Sopenharmony_ci{ 3362306a36Sopenharmony_ci local test="$1" 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci echo "--------------------" 3662306a36Sopenharmony_ci echo "running $test" 3762306a36Sopenharmony_ci echo "--------------------" 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci if [ "$(type -t $test)" = 'function' ]; then 4062306a36Sopenharmony_ci ( $test ) 4162306a36Sopenharmony_ci else 4262306a36Sopenharmony_ci ( ./$test ) 4362306a36Sopenharmony_ci fi 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci if [ $? -ne 0 ]; then 4662306a36Sopenharmony_ci echo " [FAIL]" 4762306a36Sopenharmony_ci rc=1 4862306a36Sopenharmony_ci else 4962306a36Sopenharmony_ci echo " [PASS]" 5062306a36Sopenharmony_ci fi 5162306a36Sopenharmony_ci} 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_citest_create() 5462306a36Sopenharmony_ci{ 5562306a36Sopenharmony_ci local attrs='\x07\x00\x00\x00' 5662306a36Sopenharmony_ci local file=$efivarfs_mount/$FUNCNAME-$test_guid 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci printf "$attrs\x00" > $file 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci if [ ! -e $file ]; then 6162306a36Sopenharmony_ci echo "$file couldn't be created" >&2 6262306a36Sopenharmony_ci exit 1 6362306a36Sopenharmony_ci fi 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci if [ $(stat -c %s $file) -ne 5 ]; then 6662306a36Sopenharmony_ci echo "$file has invalid size" >&2 6762306a36Sopenharmony_ci file_cleanup $file 6862306a36Sopenharmony_ci exit 1 6962306a36Sopenharmony_ci fi 7062306a36Sopenharmony_ci file_cleanup $file 7162306a36Sopenharmony_ci} 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_citest_create_empty() 7462306a36Sopenharmony_ci{ 7562306a36Sopenharmony_ci local file=$efivarfs_mount/$FUNCNAME-$test_guid 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci : > $file 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci if [ ! -e $file ]; then 8062306a36Sopenharmony_ci echo "$file can not be created without writing" >&2 8162306a36Sopenharmony_ci exit 1 8262306a36Sopenharmony_ci fi 8362306a36Sopenharmony_ci file_cleanup $file 8462306a36Sopenharmony_ci} 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_citest_create_read() 8762306a36Sopenharmony_ci{ 8862306a36Sopenharmony_ci local file=$efivarfs_mount/$FUNCNAME-$test_guid 8962306a36Sopenharmony_ci ./create-read $file 9062306a36Sopenharmony_ci if [ $? -ne 0 ]; then 9162306a36Sopenharmony_ci echo "create and read $file failed" 9262306a36Sopenharmony_ci file_cleanup $file 9362306a36Sopenharmony_ci exit 1 9462306a36Sopenharmony_ci fi 9562306a36Sopenharmony_ci file_cleanup $file 9662306a36Sopenharmony_ci} 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_citest_delete() 9962306a36Sopenharmony_ci{ 10062306a36Sopenharmony_ci local attrs='\x07\x00\x00\x00' 10162306a36Sopenharmony_ci local file=$efivarfs_mount/$FUNCNAME-$test_guid 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci printf "$attrs\x00" > $file 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci if [ ! -e $file ]; then 10662306a36Sopenharmony_ci echo "$file couldn't be created" >&2 10762306a36Sopenharmony_ci exit 1 10862306a36Sopenharmony_ci fi 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci file_cleanup $file 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci if [ -e $file ]; then 11362306a36Sopenharmony_ci echo "$file couldn't be deleted" >&2 11462306a36Sopenharmony_ci exit 1 11562306a36Sopenharmony_ci fi 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci} 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci# test that we can remove a variable by issuing a write with only 12062306a36Sopenharmony_ci# attributes specified 12162306a36Sopenharmony_citest_zero_size_delete() 12262306a36Sopenharmony_ci{ 12362306a36Sopenharmony_ci local attrs='\x07\x00\x00\x00' 12462306a36Sopenharmony_ci local file=$efivarfs_mount/$FUNCNAME-$test_guid 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci printf "$attrs\x00" > $file 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci if [ ! -e $file ]; then 12962306a36Sopenharmony_ci echo "$file does not exist" >&2 13062306a36Sopenharmony_ci exit 1 13162306a36Sopenharmony_ci fi 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci chattr -i $file 13462306a36Sopenharmony_ci printf "$attrs" > $file 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci if [ -e $file ]; then 13762306a36Sopenharmony_ci echo "$file should have been deleted" >&2 13862306a36Sopenharmony_ci exit 1 13962306a36Sopenharmony_ci fi 14062306a36Sopenharmony_ci} 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_citest_open_unlink() 14362306a36Sopenharmony_ci{ 14462306a36Sopenharmony_ci local file=$efivarfs_mount/$FUNCNAME-$test_guid 14562306a36Sopenharmony_ci ./open-unlink $file 14662306a36Sopenharmony_ci} 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci# test that we can create a range of filenames 14962306a36Sopenharmony_citest_valid_filenames() 15062306a36Sopenharmony_ci{ 15162306a36Sopenharmony_ci local attrs='\x07\x00\x00\x00' 15262306a36Sopenharmony_ci local ret=0 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci local file_list="abc dump-type0-11-1-1362436005 1234 -" 15562306a36Sopenharmony_ci for f in $file_list; do 15662306a36Sopenharmony_ci local file=$efivarfs_mount/$f-$test_guid 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci printf "$attrs\x00" > $file 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci if [ ! -e $file ]; then 16162306a36Sopenharmony_ci echo "$file could not be created" >&2 16262306a36Sopenharmony_ci ret=1 16362306a36Sopenharmony_ci else 16462306a36Sopenharmony_ci file_cleanup $file 16562306a36Sopenharmony_ci fi 16662306a36Sopenharmony_ci done 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci exit $ret 16962306a36Sopenharmony_ci} 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_citest_invalid_filenames() 17262306a36Sopenharmony_ci{ 17362306a36Sopenharmony_ci local attrs='\x07\x00\x00\x00' 17462306a36Sopenharmony_ci local ret=0 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci local file_list=" 17762306a36Sopenharmony_ci -1234-1234-1234-123456789abc 17862306a36Sopenharmony_ci foo 17962306a36Sopenharmony_ci foo-bar 18062306a36Sopenharmony_ci -foo- 18162306a36Sopenharmony_ci foo-barbazba-foob-foob-foob-foobarbazfoo 18262306a36Sopenharmony_ci foo------------------------------------- 18362306a36Sopenharmony_ci -12345678-1234-1234-1234-123456789abc 18462306a36Sopenharmony_ci a-12345678=1234-1234-1234-123456789abc 18562306a36Sopenharmony_ci a-12345678-1234=1234-1234-123456789abc 18662306a36Sopenharmony_ci a-12345678-1234-1234=1234-123456789abc 18762306a36Sopenharmony_ci a-12345678-1234-1234-1234=123456789abc 18862306a36Sopenharmony_ci 1112345678-1234-1234-1234-123456789abc" 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci for f in $file_list; do 19162306a36Sopenharmony_ci local file=$efivarfs_mount/$f 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci printf "$attrs\x00" 2>/dev/null > $file 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci if [ -e $file ]; then 19662306a36Sopenharmony_ci echo "Creating $file should have failed" >&2 19762306a36Sopenharmony_ci file_cleanup $file 19862306a36Sopenharmony_ci ret=1 19962306a36Sopenharmony_ci fi 20062306a36Sopenharmony_ci done 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci exit $ret 20362306a36Sopenharmony_ci} 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_cicheck_prereqs 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_circ=0 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_cirun_test test_create 21062306a36Sopenharmony_cirun_test test_create_empty 21162306a36Sopenharmony_cirun_test test_create_read 21262306a36Sopenharmony_cirun_test test_delete 21362306a36Sopenharmony_cirun_test test_zero_size_delete 21462306a36Sopenharmony_cirun_test test_open_unlink 21562306a36Sopenharmony_cirun_test test_valid_filenames 21662306a36Sopenharmony_cirun_test test_invalid_filenames 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ciexit $rc 219