exec_invalid_args.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <unistd.h>
  5. int main(int argc, const char** argv, const char** envp) {
  6. int r;
  7. char* badptr = (char*) -1;
  8. char* bad_argv[] = { badptr, NULL };
  9. char* good_argv[] = { "DUMMY", NULL };
  10. char* bad_envp[] = { badptr, NULL };
  11. char* good_envp[] = { "DUMMY", NULL };
  12. r = execve(badptr, good_argv, good_envp);
  13. if (r == -1 && errno == EFAULT)
  14. printf("execve(invalid-path) correctly returned error\n");
  15. r = execve(argv[0], badptr, good_envp);
  16. if (r == -1 && errno == EFAULT)
  17. printf("execve(invalid-argv-ptr) correctly returned error\n");
  18. r = execve(argv[0], good_argv, badptr);
  19. if (r == -1 && errno == EFAULT)
  20. printf("execve(invalid-envp-ptr) correctly returned error\n");
  21. r = execve(argv[0], bad_argv, good_envp);
  22. if (r == -1 && errno == EFAULT)
  23. printf("execve(invalid-argv) correctly returned error\n");
  24. r = execve(argv[0], good_argv, bad_envp);
  25. if (r == -1 && errno == EFAULT)
  26. printf("execve(invalid-envp) correctly returned error\n");
  27. return 0;
  28. }