|
23 | 23 | #include <fcntl.h>
|
24 | 24 | #include <sys/mount.h>
|
25 | 25 | #include <unistd.h>
|
| 26 | +#include "../kselftest.h" |
26 | 27 |
|
27 | 28 | int main(void)
|
28 | 29 | {
|
| 30 | + int fd, rv; |
| 31 | + |
| 32 | + ksft_print_header(); |
| 33 | + ksft_set_plan(1); |
| 34 | + |
29 | 35 | if (unshare(CLONE_NEWNS) == -1) {
|
30 | 36 | if (errno == ENOSYS || errno == EPERM) {
|
31 |
| - fprintf(stderr, "error: unshare, errno %d\n", errno); |
32 |
| - return 4; |
| 37 | + ksft_test_result_skip("error: unshare, errno %d\n", errno); |
| 38 | + ksft_finished(); |
33 | 39 | }
|
34 |
| - fprintf(stderr, "error: unshare, errno %d\n", errno); |
35 |
| - return 1; |
36 |
| - } |
37 |
| - if (mount(NULL, "/", NULL, MS_PRIVATE|MS_REC, NULL) == -1) { |
38 |
| - fprintf(stderr, "error: mount '/', errno %d\n", errno); |
39 |
| - return 1; |
| 40 | + ksft_exit_fail_msg("error: unshare, errno %d\n", errno); |
40 | 41 | }
|
| 42 | + |
| 43 | + if (mount(NULL, "/", NULL, MS_PRIVATE | MS_REC, NULL) == -1) |
| 44 | + ksft_exit_fail_msg("error: mount '/', errno %d\n", errno); |
| 45 | + |
41 | 46 | /* Require "exec" filesystem. */
|
42 |
| - if (mount(NULL, "/tmp", "ramfs", 0, NULL) == -1) { |
43 |
| - fprintf(stderr, "error: mount ramfs, errno %d\n", errno); |
44 |
| - return 1; |
45 |
| - } |
| 47 | + if (mount(NULL, "/tmp", "ramfs", 0, NULL) == -1) |
| 48 | + ksft_exit_fail_msg("error: mount ramfs, errno %d\n", errno); |
46 | 49 |
|
47 | 50 | #define FILENAME "/tmp/1"
|
48 | 51 |
|
49 |
| - int fd = creat(FILENAME, 0700); |
50 |
| - if (fd == -1) { |
51 |
| - fprintf(stderr, "error: creat, errno %d\n", errno); |
52 |
| - return 1; |
53 |
| - } |
| 52 | + fd = creat(FILENAME, 0700); |
| 53 | + if (fd == -1) |
| 54 | + ksft_exit_fail_msg("error: creat, errno %d\n", errno); |
| 55 | + |
54 | 56 | #define S "#!" FILENAME "\n"
|
55 |
| - if (write(fd, S, strlen(S)) != strlen(S)) { |
56 |
| - fprintf(stderr, "error: write, errno %d\n", errno); |
57 |
| - return 1; |
58 |
| - } |
| 57 | + if (write(fd, S, strlen(S)) != strlen(S)) |
| 58 | + ksft_exit_fail_msg("error: write, errno %d\n", errno); |
| 59 | + |
59 | 60 | close(fd);
|
60 | 61 |
|
61 |
| - int rv = execve(FILENAME, NULL, NULL); |
62 |
| - if (rv == -1 && errno == ELOOP) { |
63 |
| - return 0; |
64 |
| - } |
65 |
| - fprintf(stderr, "error: execve, rv %d, errno %d\n", rv, errno); |
66 |
| - return 1; |
| 62 | + rv = execve(FILENAME, NULL, NULL); |
| 63 | + ksft_test_result(rv == -1 && errno == ELOOP, |
| 64 | + "execve failed as expected (ret %d, errno %d)\n", rv, errno); |
| 65 | + ksft_finished(); |
67 | 66 | }
|
0 commit comments