execve(): support for ETXTBSY via a new ioctl() call to test in kernel space with open_exec()

This commit is contained in:
Balazs Gerofi bgerofi@riken.jp
2014-09-10 14:07:25 +09:00
parent cee647aee4
commit ac40b96c24
4 changed files with 42 additions and 8 deletions

View File

@@ -519,7 +519,13 @@ int load_elf_desc(char *filename, struct program_load_desc **desc_p,
}
rewind(fp);
if ((ret = ioctl(fd, MCEXEC_UP_TEST_OPEN_EXEC, filename)) != 0) {
fprintf(stderr, "Error: open_exec() fails for %s: %d (fd: %d)\n",
filename, ret, fd);
return ret;
}
desc = load_elf(fp, &interp_path);
if (!desc) {
fclose(fp);
@@ -989,6 +995,13 @@ int main(int argc, char **argv)
}
__dprintf("%s", "\n");
/* Open OS chardev for ioctl() */
fd = open(dev, O_RDWR);
if (fd < 0) {
fprintf(stderr, "Error: Failed to open %s.\n", dev);
return 1;
}
if (lookup_exec_path(argv[optind], path, sizeof(path)) != 0) {
fprintf(stderr, "error: finding file: %s\n", argv[optind]);
return 1;
@@ -1053,12 +1066,6 @@ int main(int argc, char **argv)
desc->rlimit_stack_cur = rlim_stack.rlim_cur;
desc->rlimit_stack_max = rlim_stack.rlim_max;
fd = open(dev, O_RDWR);
if (fd < 0) {
fprintf(stderr, "Error: Failed to open %s.\n", dev);
return 1;
}
ncpu = ioctl(fd, MCEXEC_UP_GET_CPU, 0);
if(ncpu == -1){
fprintf(stderr, "No CPU found.\n");