|
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