1455ce1c7SJeremy Kerr#!/bin/bash 2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 3455ce1c7SJeremy Kerr 4455ce1c7SJeremy Kerrefivarfs_mount=/sys/firmware/efi/efivars 5455ce1c7SJeremy Kerrtest_guid=210be57c-9849-4fc7-a635-e6382d1aec27 6455ce1c7SJeremy Kerr 71f0ea958SShuah Khan (Samsung OSG)# Kselftest framework requirement - SKIP code is 4. 81f0ea958SShuah Khan (Samsung OSG)ksft_skip=4 91f0ea958SShuah Khan (Samsung OSG) 10dff6d2aeSPo-Hsu Linfile_cleanup() 11dff6d2aeSPo-Hsu Lin{ 12dff6d2aeSPo-Hsu Lin chattr -i $1 13dff6d2aeSPo-Hsu Lin rm -f $1 14dff6d2aeSPo-Hsu Lin} 15dff6d2aeSPo-Hsu Lin 16455ce1c7SJeremy Kerrcheck_prereqs() 17455ce1c7SJeremy Kerr{ 18455ce1c7SJeremy Kerr local msg="skip all tests:" 19455ce1c7SJeremy Kerr 20455ce1c7SJeremy Kerr if [ $UID != 0 ]; then 21455ce1c7SJeremy Kerr echo $msg must be run as root >&2 221f0ea958SShuah Khan (Samsung OSG) exit $ksft_skip 23455ce1c7SJeremy Kerr fi 24455ce1c7SJeremy Kerr 25455ce1c7SJeremy Kerr if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then 26455ce1c7SJeremy Kerr echo $msg efivarfs is not mounted on $efivarfs_mount >&2 271f0ea958SShuah Khan (Samsung OSG) exit $ksft_skip 28455ce1c7SJeremy Kerr fi 29455ce1c7SJeremy Kerr} 30455ce1c7SJeremy Kerr 31455ce1c7SJeremy Kerrrun_test() 32455ce1c7SJeremy Kerr{ 33455ce1c7SJeremy Kerr local test="$1" 34455ce1c7SJeremy Kerr 35455ce1c7SJeremy Kerr echo "--------------------" 36455ce1c7SJeremy Kerr echo "running $test" 37455ce1c7SJeremy Kerr echo "--------------------" 38455ce1c7SJeremy Kerr 39455ce1c7SJeremy Kerr if [ "$(type -t $test)" = 'function' ]; then 40455ce1c7SJeremy Kerr ( $test ) 41455ce1c7SJeremy Kerr else 42455ce1c7SJeremy Kerr ( ./$test ) 43455ce1c7SJeremy Kerr fi 44455ce1c7SJeremy Kerr 45455ce1c7SJeremy Kerr if [ $? -ne 0 ]; then 46455ce1c7SJeremy Kerr echo " [FAIL]" 47455ce1c7SJeremy Kerr rc=1 48455ce1c7SJeremy Kerr else 49455ce1c7SJeremy Kerr echo " [PASS]" 50455ce1c7SJeremy Kerr fi 51455ce1c7SJeremy Kerr} 52455ce1c7SJeremy Kerr 53455ce1c7SJeremy Kerrtest_create() 54455ce1c7SJeremy Kerr{ 55455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 56455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 57455ce1c7SJeremy Kerr 58455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 59455ce1c7SJeremy Kerr 60455ce1c7SJeremy Kerr if [ ! -e $file ]; then 61455ce1c7SJeremy Kerr echo "$file couldn't be created" >&2 62455ce1c7SJeremy Kerr exit 1 63455ce1c7SJeremy Kerr fi 64455ce1c7SJeremy Kerr 65455ce1c7SJeremy Kerr if [ $(stat -c %s $file) -ne 5 ]; then 66455ce1c7SJeremy Kerr echo "$file has invalid size" >&2 67dff6d2aeSPo-Hsu Lin file_cleanup $file 68455ce1c7SJeremy Kerr exit 1 69455ce1c7SJeremy Kerr fi 70dff6d2aeSPo-Hsu Lin file_cleanup $file 71455ce1c7SJeremy Kerr} 72455ce1c7SJeremy Kerr 73033a1a7fSJeremy Kerrtest_create_empty() 74033a1a7fSJeremy Kerr{ 75033a1a7fSJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 76033a1a7fSJeremy Kerr 77033a1a7fSJeremy Kerr : > $file 78033a1a7fSJeremy Kerr 79033a1a7fSJeremy Kerr if [ ! -e $file ]; then 80033a1a7fSJeremy Kerr echo "$file can not be created without writing" >&2 81033a1a7fSJeremy Kerr exit 1 82033a1a7fSJeremy Kerr fi 83dff6d2aeSPo-Hsu Lin file_cleanup $file 84033a1a7fSJeremy Kerr} 85033a1a7fSJeremy Kerr 86d974f67aSJeremy Kerrtest_create_read() 87d974f67aSJeremy Kerr{ 88d974f67aSJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 89d974f67aSJeremy Kerr ./create-read $file 90*c9392426SZhao Gongyi if [ $? -ne 0 ]; then 91*c9392426SZhao Gongyi echo "create and read $file failed" 92*c9392426SZhao Gongyi file_cleanup $file 93*c9392426SZhao Gongyi exit 1 94*c9392426SZhao Gongyi fi 95dff6d2aeSPo-Hsu Lin file_cleanup $file 96d974f67aSJeremy Kerr} 97d974f67aSJeremy Kerr 98455ce1c7SJeremy Kerrtest_delete() 99455ce1c7SJeremy Kerr{ 100455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 101455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 102455ce1c7SJeremy Kerr 103455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 104455ce1c7SJeremy Kerr 105455ce1c7SJeremy Kerr if [ ! -e $file ]; then 106455ce1c7SJeremy Kerr echo "$file couldn't be created" >&2 107455ce1c7SJeremy Kerr exit 1 108455ce1c7SJeremy Kerr fi 109455ce1c7SJeremy Kerr 110dff6d2aeSPo-Hsu Lin file_cleanup $file 111455ce1c7SJeremy Kerr 112455ce1c7SJeremy Kerr if [ -e $file ]; then 113455ce1c7SJeremy Kerr echo "$file couldn't be deleted" >&2 114455ce1c7SJeremy Kerr exit 1 115455ce1c7SJeremy Kerr fi 116455ce1c7SJeremy Kerr 117455ce1c7SJeremy Kerr} 118455ce1c7SJeremy Kerr 119455ce1c7SJeremy Kerr# test that we can remove a variable by issuing a write with only 120455ce1c7SJeremy Kerr# attributes specified 121455ce1c7SJeremy Kerrtest_zero_size_delete() 122455ce1c7SJeremy Kerr{ 123455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 124455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 125455ce1c7SJeremy Kerr 126455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 127455ce1c7SJeremy Kerr 128455ce1c7SJeremy Kerr if [ ! -e $file ]; then 129455ce1c7SJeremy Kerr echo "$file does not exist" >&2 130455ce1c7SJeremy Kerr exit 1 131455ce1c7SJeremy Kerr fi 132455ce1c7SJeremy Kerr 133ed8b0de5SPeter Jones chattr -i $file 134455ce1c7SJeremy Kerr printf "$attrs" > $file 135455ce1c7SJeremy Kerr 136455ce1c7SJeremy Kerr if [ -e $file ]; then 137455ce1c7SJeremy Kerr echo "$file should have been deleted" >&2 138455ce1c7SJeremy Kerr exit 1 139455ce1c7SJeremy Kerr fi 140455ce1c7SJeremy Kerr} 141455ce1c7SJeremy Kerr 142455ce1c7SJeremy Kerrtest_open_unlink() 143455ce1c7SJeremy Kerr{ 144455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 145455ce1c7SJeremy Kerr ./open-unlink $file 146455ce1c7SJeremy Kerr} 147455ce1c7SJeremy Kerr 148123abd76SMatt Fleming# test that we can create a range of filenames 149123abd76SMatt Flemingtest_valid_filenames() 150123abd76SMatt Fleming{ 151123abd76SMatt Fleming local attrs='\x07\x00\x00\x00' 152123abd76SMatt Fleming local ret=0 153123abd76SMatt Fleming 154123abd76SMatt Fleming local file_list="abc dump-type0-11-1-1362436005 1234 -" 155123abd76SMatt Fleming for f in $file_list; do 156123abd76SMatt Fleming local file=$efivarfs_mount/$f-$test_guid 157123abd76SMatt Fleming 158123abd76SMatt Fleming printf "$attrs\x00" > $file 159123abd76SMatt Fleming 160123abd76SMatt Fleming if [ ! -e $file ]; then 161123abd76SMatt Fleming echo "$file could not be created" >&2 162123abd76SMatt Fleming ret=1 163123abd76SMatt Fleming else 164dff6d2aeSPo-Hsu Lin file_cleanup $file 165ed8b0de5SPeter Jones fi 166123abd76SMatt Fleming done 167123abd76SMatt Fleming 168123abd76SMatt Fleming exit $ret 169123abd76SMatt Fleming} 170123abd76SMatt Fleming 171123abd76SMatt Flemingtest_invalid_filenames() 172123abd76SMatt Fleming{ 173123abd76SMatt Fleming local attrs='\x07\x00\x00\x00' 174123abd76SMatt Fleming local ret=0 175123abd76SMatt Fleming 176123abd76SMatt Fleming local file_list=" 177123abd76SMatt Fleming -1234-1234-1234-123456789abc 178123abd76SMatt Fleming foo 179123abd76SMatt Fleming foo-bar 180123abd76SMatt Fleming -foo- 181123abd76SMatt Fleming foo-barbazba-foob-foob-foob-foobarbazfoo 182123abd76SMatt Fleming foo------------------------------------- 183123abd76SMatt Fleming -12345678-1234-1234-1234-123456789abc 184123abd76SMatt Fleming a-12345678=1234-1234-1234-123456789abc 185123abd76SMatt Fleming a-12345678-1234=1234-1234-123456789abc 186123abd76SMatt Fleming a-12345678-1234-1234=1234-123456789abc 187123abd76SMatt Fleming a-12345678-1234-1234-1234=123456789abc 188123abd76SMatt Fleming 1112345678-1234-1234-1234-123456789abc" 189123abd76SMatt Fleming 190123abd76SMatt Fleming for f in $file_list; do 191123abd76SMatt Fleming local file=$efivarfs_mount/$f 192123abd76SMatt Fleming 193123abd76SMatt Fleming printf "$attrs\x00" 2>/dev/null > $file 194123abd76SMatt Fleming 195123abd76SMatt Fleming if [ -e $file ]; then 196123abd76SMatt Fleming echo "Creating $file should have failed" >&2 197dff6d2aeSPo-Hsu Lin file_cleanup $file 198123abd76SMatt Fleming ret=1 199123abd76SMatt Fleming fi 200123abd76SMatt Fleming done 201123abd76SMatt Fleming 202123abd76SMatt Fleming exit $ret 203123abd76SMatt Fleming} 204123abd76SMatt Fleming 205455ce1c7SJeremy Kerrcheck_prereqs 206455ce1c7SJeremy Kerr 207455ce1c7SJeremy Kerrrc=0 208455ce1c7SJeremy Kerr 209455ce1c7SJeremy Kerrrun_test test_create 210033a1a7fSJeremy Kerrrun_test test_create_empty 211d974f67aSJeremy Kerrrun_test test_create_read 212455ce1c7SJeremy Kerrrun_test test_delete 213455ce1c7SJeremy Kerrrun_test test_zero_size_delete 214455ce1c7SJeremy Kerrrun_test test_open_unlink 215123abd76SMatt Flemingrun_test test_valid_filenames 216123abd76SMatt Flemingrun_test test_invalid_filenames 217455ce1c7SJeremy Kerr 218455ce1c7SJeremy Kerrexit $rc 219