xref: /freebsd/tests/sys/kern/execve/execve_test.sh (revision e5b431fc0c20771a2a18cb5169d75cf337d0f1dd)
1bbf12e6fSEnji Cooper
2bbf12e6fSEnji Cooperbad_interp_len_head()
3bbf12e6fSEnji Cooper{
4bbf12e6fSEnji Cooper	atf_set "descr" "Bad interpreter length"
5bbf12e6fSEnji Cooper}
6bbf12e6fSEnji Cooperbad_interp_len_body()
7bbf12e6fSEnji Cooper{
8bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
9bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper bad_interp_len"
10bbf12e6fSEnji Cooper}
11bbf12e6fSEnji Cooper
12bbf12e6fSEnji Cooperempty_head()
13bbf12e6fSEnji Cooper{
14bbf12e6fSEnji Cooper	atf_set "descr" "Empty file"
15bbf12e6fSEnji Cooper}
16bbf12e6fSEnji Cooperempty_body()
17bbf12e6fSEnji Cooper{
18bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:Exec format error' -o empty \
19bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper empty"
20bbf12e6fSEnji Cooper}
21bbf12e6fSEnji Cooper
22bbf12e6fSEnji Coopergood_aout_head()
23bbf12e6fSEnji Cooper{
24bbf12e6fSEnji Cooper	atf_set "descr" "Good a.out"
25bbf12e6fSEnji Cooper}
26bbf12e6fSEnji Coopergood_aout_body()
27bbf12e6fSEnji Cooper{
28bbf12e6fSEnji Cooper	atf_check -s exit:0 -e empty -o 'match:succeeded' \
29bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper ./good_aout"
30bbf12e6fSEnji Cooper}
31bbf12e6fSEnji Cooper
32bbf12e6fSEnji Coopergood_script_head()
33bbf12e6fSEnji Cooper{
34bbf12e6fSEnji Cooper	atf_set "descr" "Good script"
35bbf12e6fSEnji Cooper}
36bbf12e6fSEnji Coopergood_script_body()
37bbf12e6fSEnji Cooper{
38bbf12e6fSEnji Cooper	atf_check -s exit:0 -e empty -o 'match:succeeded' \
39bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper good_script"
40bbf12e6fSEnji Cooper}
41bbf12e6fSEnji Cooper
42bbf12e6fSEnji Coopernon_exist_head()
43bbf12e6fSEnji Cooper{
44bbf12e6fSEnji Cooper	atf_set "descr" "Non-existent file"
45bbf12e6fSEnji Cooper}
46bbf12e6fSEnji Coopernon_exist_body()
47bbf12e6fSEnji Cooper{
48bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
49bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper non_exist"
50bbf12e6fSEnji Cooper}
51bbf12e6fSEnji Cooper
52bbf12e6fSEnji Coopernon_exist_shell_head()
53bbf12e6fSEnji Cooper{
54bbf12e6fSEnji Cooper	atf_set "descr" "Non-existent shell"
55bbf12e6fSEnji Cooper}
56bbf12e6fSEnji Coopernon_exist_shell_body()
57bbf12e6fSEnji Cooper{
58bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
59bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper non_exist_shell"
60bbf12e6fSEnji Cooper}
61bbf12e6fSEnji Cooper
62bbf12e6fSEnji Cooperscript_arg_head()
63bbf12e6fSEnji Cooper{
64bbf12e6fSEnji Cooper	atf_set "descr" "-x in the shebang"
65bbf12e6fSEnji Cooper}
66bbf12e6fSEnji Cooperscript_arg_body()
67bbf12e6fSEnji Cooper{
68bbf12e6fSEnji Cooper	atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \
69bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper script_arg"
70bbf12e6fSEnji Cooper}
71bbf12e6fSEnji Cooper
72bbf12e6fSEnji Cooperscript_arg_nospace_head()
73bbf12e6fSEnji Cooper{
74bbf12e6fSEnji Cooper	atf_set "descr" '-x in the shebang; no space between #! and /bin/sh'
75bbf12e6fSEnji Cooper}
76bbf12e6fSEnji Cooperscript_arg_nospace_body()
77bbf12e6fSEnji Cooper{
78bbf12e6fSEnji Cooper	atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \
79bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper script_arg_nospace"
80bbf12e6fSEnji Cooper}
81bbf12e6fSEnji Cooper
82bbf12e6fSEnji Coopersparse_aout_head()
83bbf12e6fSEnji Cooper{
84bbf12e6fSEnji Cooper	atf_set "descr" 'Sparse file'
85bbf12e6fSEnji Cooper}
86bbf12e6fSEnji Coopersparse_aout_body()
87bbf12e6fSEnji Cooper{
88bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:Exec format error' -o empty \
89bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper sparse_aout"
90bbf12e6fSEnji Cooper}
91bbf12e6fSEnji Cooper
92bbf12e6fSEnji Coopertrunc_aout_head()
93bbf12e6fSEnji Cooper{
94bbf12e6fSEnji Cooper	atf_set "descr" 'Truncated file'
95bbf12e6fSEnji Cooper}
96bbf12e6fSEnji Coopertrunc_aout_body()
97bbf12e6fSEnji Cooper{
98bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:Exec format error' -o empty \
99bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper trunc_aout"
100bbf12e6fSEnji Cooper}
101bbf12e6fSEnji Cooper
102*e5b431fcSKyle Evansempty_args_head()
103*e5b431fcSKyle Evans{
104*e5b431fcSKyle Evans	atf_set "descr" "Empty argv behavior"
105*e5b431fcSKyle Evans}
106*e5b431fcSKyle Evansempty_args_body()
107*e5b431fcSKyle Evans{
108*e5b431fcSKyle Evans	atf_check -o inline:"1\n" \
109*e5b431fcSKyle Evans	    -x "cd $(atf_get_srcdir) && ./execve_helper execve_argc_helper"
110*e5b431fcSKyle Evans
111*e5b431fcSKyle Evans	# Historically we allowed argc == 0, while execve(2) claimed we didn't.
112*e5b431fcSKyle Evans	# execve() should kick back an EINVAL now.  We verified the helper was
113*e5b431fcSKyle Evans	# there/working in the check just above.
114*e5b431fcSKyle Evans	atf_check -s exit:1 \
115*e5b431fcSKyle Evans	    -e match:".+Invalid argument$" \
116*e5b431fcSKyle Evans	    -x "cd $(atf_get_srcdir) && ./execve_helper -n execve_argc_helper"
117*e5b431fcSKyle Evans}
118*e5b431fcSKyle Evans
119bbf12e6fSEnji Cooperatf_init_test_cases()
120bbf12e6fSEnji Cooper{
121bbf12e6fSEnji Cooper	atf_add_test_case bad_interp_len
122bbf12e6fSEnji Cooper	atf_add_test_case empty
123bbf12e6fSEnji Cooper	atf_add_test_case good_aout
124bbf12e6fSEnji Cooper	atf_add_test_case good_script
125bbf12e6fSEnji Cooper	atf_add_test_case non_exist
126bbf12e6fSEnji Cooper	atf_add_test_case non_exist_shell
127bbf12e6fSEnji Cooper	atf_add_test_case script_arg
128bbf12e6fSEnji Cooper	atf_add_test_case script_arg_nospace
129bbf12e6fSEnji Cooper	atf_add_test_case sparse_aout
130bbf12e6fSEnji Cooper	atf_add_test_case trunc_aout
131*e5b431fcSKyle Evans	atf_add_test_case empty_args
132bbf12e6fSEnji Cooper
133bbf12e6fSEnji Cooper}
134