diff options
| author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2015-02-02 11:47:31 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2015-02-02 11:47:31 -0500 |
| commit | dfbc1534eac550b37df592a8a0b550cd47539d0b (patch) | |
| tree | ec2f50ac271be0bad556e5e22a204bddc1f63a9a /tools/testing/selftests/exec/execveat.c | |
| parent | 7eeafbcab47fe9860e5106286db83d60e3f35644 (diff) | |
| parent | 163f9eb95a10371ead59b62087e0d4e7ce53112e (diff) | |
Merge branch 'debugfs_automount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs into trace/ftrace/tracefs
Pull in Al Viro's changes to debugfs that implement the new primitive:
debugfs_create_automount(), that creates a directory in debugfs that will
safely mount another file system automatically when debugfs is mounted.
This will let tracefs automount itself on top of debugfs/tracing directory.
Diffstat (limited to 'tools/testing/selftests/exec/execveat.c')
| -rw-r--r-- | tools/testing/selftests/exec/execveat.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/tools/testing/selftests/exec/execveat.c b/tools/testing/selftests/exec/execveat.c index 33a5c06d95ca..e238c9559caf 100644 --- a/tools/testing/selftests/exec/execveat.c +++ b/tools/testing/selftests/exec/execveat.c | |||
| @@ -62,7 +62,7 @@ static int _check_execveat_fail(int fd, const char *path, int flags, | |||
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | static int check_execveat_invoked_rc(int fd, const char *path, int flags, | 64 | static int check_execveat_invoked_rc(int fd, const char *path, int flags, |
| 65 | int expected_rc) | 65 | int expected_rc, int expected_rc2) |
| 66 | { | 66 | { |
| 67 | int status; | 67 | int status; |
| 68 | int rc; | 68 | int rc; |
| @@ -98,9 +98,10 @@ static int check_execveat_invoked_rc(int fd, const char *path, int flags, | |||
| 98 | child, status); | 98 | child, status); |
| 99 | return 1; | 99 | return 1; |
| 100 | } | 100 | } |
| 101 | if (WEXITSTATUS(status) != expected_rc) { | 101 | if ((WEXITSTATUS(status) != expected_rc) && |
| 102 | printf("[FAIL] (child %d exited with %d not %d)\n", | 102 | (WEXITSTATUS(status) != expected_rc2)) { |
| 103 | child, WEXITSTATUS(status), expected_rc); | 103 | printf("[FAIL] (child %d exited with %d not %d nor %d)\n", |
| 104 | child, WEXITSTATUS(status), expected_rc, expected_rc2); | ||
| 104 | return 1; | 105 | return 1; |
| 105 | } | 106 | } |
| 106 | printf("[OK]\n"); | 107 | printf("[OK]\n"); |
| @@ -109,7 +110,7 @@ static int check_execveat_invoked_rc(int fd, const char *path, int flags, | |||
| 109 | 110 | ||
| 110 | static int check_execveat(int fd, const char *path, int flags) | 111 | static int check_execveat(int fd, const char *path, int flags) |
| 111 | { | 112 | { |
| 112 | return check_execveat_invoked_rc(fd, path, flags, 99); | 113 | return check_execveat_invoked_rc(fd, path, flags, 99, 99); |
| 113 | } | 114 | } |
| 114 | 115 | ||
| 115 | static char *concat(const char *left, const char *right) | 116 | static char *concat(const char *left, const char *right) |
| @@ -179,11 +180,11 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) | |||
| 179 | */ | 180 | */ |
| 180 | fd = open(longpath, O_RDONLY); | 181 | fd = open(longpath, O_RDONLY); |
| 181 | if (fd > 0) { | 182 | if (fd > 0) { |
| 182 | printf("Invoke copy of '%s' via filename of length %lu:\n", | 183 | printf("Invoke copy of '%s' via filename of length %zu:\n", |
| 183 | src, strlen(longpath)); | 184 | src, strlen(longpath)); |
| 184 | fail += check_execveat(fd, "", AT_EMPTY_PATH); | 185 | fail += check_execveat(fd, "", AT_EMPTY_PATH); |
| 185 | } else { | 186 | } else { |
| 186 | printf("Failed to open length %lu filename, errno=%d (%s)\n", | 187 | printf("Failed to open length %zu filename, errno=%d (%s)\n", |
| 187 | strlen(longpath), errno, strerror(errno)); | 188 | strlen(longpath), errno, strerror(errno)); |
| 188 | fail++; | 189 | fail++; |
| 189 | } | 190 | } |
| @@ -192,9 +193,15 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) | |||
| 192 | * Execute as a long pathname relative to ".". If this is a script, | 193 | * Execute as a long pathname relative to ".". If this is a script, |
| 193 | * the interpreter will launch but fail to open the script because its | 194 | * the interpreter will launch but fail to open the script because its |
| 194 | * name ("/dev/fd/5/xxx....") is bigger than PATH_MAX. | 195 | * name ("/dev/fd/5/xxx....") is bigger than PATH_MAX. |
| 196 | * | ||
| 197 | * The failure code is usually 127 (POSIX: "If a command is not found, | ||
| 198 | * the exit status shall be 127."), but some systems give 126 (POSIX: | ||
| 199 | * "If the command name is found, but it is not an executable utility, | ||
| 200 | * the exit status shall be 126."), so allow either. | ||
| 195 | */ | 201 | */ |
| 196 | if (is_script) | 202 | if (is_script) |
| 197 | fail += check_execveat_invoked_rc(dot_dfd, longpath, 0, 127); | 203 | fail += check_execveat_invoked_rc(dot_dfd, longpath, 0, |
| 204 | 127, 126); | ||
| 198 | else | 205 | else |
| 199 | fail += check_execveat(dot_dfd, longpath, 0); | 206 | fail += check_execveat(dot_dfd, longpath, 0); |
| 200 | 207 | ||
