diff options
Diffstat (limited to 'tools/testing/selftests/exec/recursion-depth.c')
| -rw-r--r-- | tools/testing/selftests/exec/recursion-depth.c | 53 | 
1 files changed, 26 insertions, 27 deletions
diff --git a/tools/testing/selftests/exec/recursion-depth.c b/tools/testing/selftests/exec/recursion-depth.c index 2dbd5bc45b3e..b2f37d86a5f6 100644 --- a/tools/testing/selftests/exec/recursion-depth.c +++ b/tools/testing/selftests/exec/recursion-depth.c @@ -23,45 +23,44 @@  #include <fcntl.h>  #include <sys/mount.h>  #include <unistd.h> +#include "../kselftest.h"  int main(void)  { +	int fd, rv; + +	ksft_print_header(); +	ksft_set_plan(1); +  	if (unshare(CLONE_NEWNS) == -1) {  		if (errno == ENOSYS || errno == EPERM) { -			fprintf(stderr, "error: unshare, errno %d\n", errno); -			return 4; +			ksft_test_result_skip("error: unshare, errno %d\n", errno); +			ksft_finished();  		} -		fprintf(stderr, "error: unshare, errno %d\n", errno); -		return 1; -	} -	if (mount(NULL, "/", NULL, MS_PRIVATE|MS_REC, NULL) == -1) { -		fprintf(stderr, "error: mount '/', errno %d\n", errno); -		return 1; +		ksft_exit_fail_msg("error: unshare, errno %d\n", errno);  	} + +	if (mount(NULL, "/", NULL, MS_PRIVATE | MS_REC, NULL) == -1) +		ksft_exit_fail_msg("error: mount '/', errno %d\n", errno); +  	/* Require "exec" filesystem. */ -	if (mount(NULL, "/tmp", "ramfs", 0, NULL) == -1) { -		fprintf(stderr, "error: mount ramfs, errno %d\n", errno); -		return 1; -	} +	if (mount(NULL, "/tmp", "ramfs", 0, NULL) == -1) +		ksft_exit_fail_msg("error: mount ramfs, errno %d\n", errno);  #define FILENAME "/tmp/1" -	int fd = creat(FILENAME, 0700); -	if (fd == -1) { -		fprintf(stderr, "error: creat, errno %d\n", errno); -		return 1; -	} +	fd = creat(FILENAME, 0700); +	if (fd == -1) +		ksft_exit_fail_msg("error: creat, errno %d\n", errno); +  #define S "#!" FILENAME "\n" -	if (write(fd, S, strlen(S)) != strlen(S)) { -		fprintf(stderr, "error: write, errno %d\n", errno); -		return 1; -	} +	if (write(fd, S, strlen(S)) != strlen(S)) +		ksft_exit_fail_msg("error: write, errno %d\n", errno); +  	close(fd); -	int rv = execve(FILENAME, NULL, NULL); -	if (rv == -1 && errno == ELOOP) { -		return 0; -	} -	fprintf(stderr, "error: execve, rv %d, errno %d\n", rv, errno); -	return 1; +	rv = execve(FILENAME, NULL, NULL); +	ksft_test_result(rv == -1 && errno == ELOOP, +			 "execve failed as expected (ret %d, errno %d)\n", rv, errno); +	ksft_finished();  }  |