]>
Commit | Line | Data |
---|---|---|
455ce1c7 | 1 | #!/bin/bash |
b2441318 | 2 | # SPDX-License-Identifier: GPL-2.0 |
455ce1c7 JK |
3 | |
4 | efivarfs_mount=/sys/firmware/efi/efivars | |
5 | test_guid=210be57c-9849-4fc7-a635-e6382d1aec27 | |
6 | ||
7 | check_prereqs() | |
8 | { | |
9 | local msg="skip all tests:" | |
10 | ||
11 | if [ $UID != 0 ]; then | |
12 | echo $msg must be run as root >&2 | |
13 | exit 0 | |
14 | fi | |
15 | ||
16 | if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then | |
17 | echo $msg efivarfs is not mounted on $efivarfs_mount >&2 | |
18 | exit 0 | |
19 | fi | |
20 | } | |
21 | ||
22 | run_test() | |
23 | { | |
24 | local test="$1" | |
25 | ||
26 | echo "--------------------" | |
27 | echo "running $test" | |
28 | echo "--------------------" | |
29 | ||
30 | if [ "$(type -t $test)" = 'function' ]; then | |
31 | ( $test ) | |
32 | else | |
33 | ( ./$test ) | |
34 | fi | |
35 | ||
36 | if [ $? -ne 0 ]; then | |
37 | echo " [FAIL]" | |
38 | rc=1 | |
39 | else | |
40 | echo " [PASS]" | |
41 | fi | |
42 | } | |
43 | ||
44 | test_create() | |
45 | { | |
46 | local attrs='\x07\x00\x00\x00' | |
47 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
48 | ||
49 | printf "$attrs\x00" > $file | |
50 | ||
51 | if [ ! -e $file ]; then | |
52 | echo "$file couldn't be created" >&2 | |
53 | exit 1 | |
54 | fi | |
55 | ||
56 | if [ $(stat -c %s $file) -ne 5 ]; then | |
57 | echo "$file has invalid size" >&2 | |
58 | exit 1 | |
59 | fi | |
60 | } | |
61 | ||
033a1a7f JK |
62 | test_create_empty() |
63 | { | |
64 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
65 | ||
66 | : > $file | |
67 | ||
68 | if [ ! -e $file ]; then | |
69 | echo "$file can not be created without writing" >&2 | |
70 | exit 1 | |
71 | fi | |
72 | } | |
73 | ||
d974f67a JK |
74 | test_create_read() |
75 | { | |
76 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
77 | ./create-read $file | |
78 | } | |
79 | ||
455ce1c7 JK |
80 | test_delete() |
81 | { | |
82 | local attrs='\x07\x00\x00\x00' | |
83 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
84 | ||
85 | printf "$attrs\x00" > $file | |
86 | ||
87 | if [ ! -e $file ]; then | |
88 | echo "$file couldn't be created" >&2 | |
89 | exit 1 | |
90 | fi | |
91 | ||
ed8b0de5 PJ |
92 | rm $file 2>/dev/null |
93 | if [ $? -ne 0 ]; then | |
94 | chattr -i $file | |
95 | rm $file | |
96 | fi | |
455ce1c7 JK |
97 | |
98 | if [ -e $file ]; then | |
99 | echo "$file couldn't be deleted" >&2 | |
100 | exit 1 | |
101 | fi | |
102 | ||
103 | } | |
104 | ||
105 | # test that we can remove a variable by issuing a write with only | |
106 | # attributes specified | |
107 | test_zero_size_delete() | |
108 | { | |
109 | local attrs='\x07\x00\x00\x00' | |
110 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
111 | ||
112 | printf "$attrs\x00" > $file | |
113 | ||
114 | if [ ! -e $file ]; then | |
115 | echo "$file does not exist" >&2 | |
116 | exit 1 | |
117 | fi | |
118 | ||
ed8b0de5 | 119 | chattr -i $file |
455ce1c7 JK |
120 | printf "$attrs" > $file |
121 | ||
122 | if [ -e $file ]; then | |
123 | echo "$file should have been deleted" >&2 | |
124 | exit 1 | |
125 | fi | |
126 | } | |
127 | ||
128 | test_open_unlink() | |
129 | { | |
130 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
131 | ./open-unlink $file | |
132 | } | |
133 | ||
123abd76 MF |
134 | # test that we can create a range of filenames |
135 | test_valid_filenames() | |
136 | { | |
137 | local attrs='\x07\x00\x00\x00' | |
138 | local ret=0 | |
139 | ||
140 | local file_list="abc dump-type0-11-1-1362436005 1234 -" | |
141 | for f in $file_list; do | |
142 | local file=$efivarfs_mount/$f-$test_guid | |
143 | ||
144 | printf "$attrs\x00" > $file | |
145 | ||
146 | if [ ! -e $file ]; then | |
147 | echo "$file could not be created" >&2 | |
148 | ret=1 | |
149 | else | |
ed8b0de5 PJ |
150 | rm $file 2>/dev/null |
151 | if [ $? -ne 0 ]; then | |
152 | chattr -i $file | |
153 | rm $file | |
154 | fi | |
123abd76 MF |
155 | fi |
156 | done | |
157 | ||
158 | exit $ret | |
159 | } | |
160 | ||
161 | test_invalid_filenames() | |
162 | { | |
163 | local attrs='\x07\x00\x00\x00' | |
164 | local ret=0 | |
165 | ||
166 | local file_list=" | |
167 | -1234-1234-1234-123456789abc | |
168 | foo | |
169 | foo-bar | |
170 | -foo- | |
171 | foo-barbazba-foob-foob-foob-foobarbazfoo | |
172 | foo------------------------------------- | |
173 | -12345678-1234-1234-1234-123456789abc | |
174 | a-12345678=1234-1234-1234-123456789abc | |
175 | a-12345678-1234=1234-1234-123456789abc | |
176 | a-12345678-1234-1234=1234-123456789abc | |
177 | a-12345678-1234-1234-1234=123456789abc | |
178 | 1112345678-1234-1234-1234-123456789abc" | |
179 | ||
180 | for f in $file_list; do | |
181 | local file=$efivarfs_mount/$f | |
182 | ||
183 | printf "$attrs\x00" 2>/dev/null > $file | |
184 | ||
185 | if [ -e $file ]; then | |
186 | echo "Creating $file should have failed" >&2 | |
ed8b0de5 PJ |
187 | rm $file 2>/dev/null |
188 | if [ $? -ne 0 ]; then | |
189 | chattr -i $file | |
190 | rm $file | |
191 | fi | |
123abd76 MF |
192 | ret=1 |
193 | fi | |
194 | done | |
195 | ||
196 | exit $ret | |
197 | } | |
198 | ||
455ce1c7 JK |
199 | check_prereqs |
200 | ||
201 | rc=0 | |
202 | ||
203 | run_test test_create | |
033a1a7f | 204 | run_test test_create_empty |
d974f67a | 205 | run_test test_create_read |
455ce1c7 JK |
206 | run_test test_delete |
207 | run_test test_zero_size_delete | |
208 | run_test test_open_unlink | |
123abd76 MF |
209 | run_test test_valid_filenames |
210 | run_test test_invalid_filenames | |
455ce1c7 JK |
211 | |
212 | exit $rc |