diff options
author | Michael I. Bushnell <mib@gnu.org> | 1996-04-30 15:36:17 +0000 |
---|---|---|
committer | Michael I. Bushnell <mib@gnu.org> | 1996-04-30 15:36:17 +0000 |
commit | b0c5347eb00cab5da924f0b6338b43f622677386 (patch) | |
tree | 38e84282eb0774101d46821e9dd649af11cf5139 /exec | |
parent | 560a4c31926611901854a40fa603dddaebfdaac1 (diff) |
(check_gzip) [ziprderr]: Treat all read errors as ENOEXEC. First off,
because that's what they are; also because some callers of read_error
don't set errno at all.
Diffstat (limited to 'exec')
-rw-r--r-- | exec/exec.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/exec/exec.c b/exec/exec.c index 451cd606..5b62d339 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -102,7 +102,7 @@ check_section (bfd *bfd, asection *sec, void *userdata) { u->info.bfd_locations[sec->index] = sec->filepos; if ((off_t) sec->filepos < 0 || (off_t) sec->filepos > u->file_size) - u->error = EINVAL; + u->error = ENOEXEC; } } #endif @@ -649,7 +649,7 @@ check_bfd (struct execdata *e) { /* This file is of a recognized binary file format, but it is not executable on this machine. */ - e->error = b2he (EINVAL); + e->error = b2he (ENOEXEC); return; } @@ -694,7 +694,7 @@ check_elf (struct execdata *e) ehdr->e_ehsize < sizeof *ehdr || ehdr->e_phentsize != sizeof (Elf32_Phdr)) { - e->error = EINVAL; + e->error = ENOEXEC; return; } @@ -710,7 +710,7 @@ check_elf (struct execdata *e) if (! phdr) { if (! ferror (&e->stream)) - e->error = EINVAL; + e->error = ENOEXEC; return; } e->info.elf.phdr = phdr; @@ -743,7 +743,7 @@ check_elf_phdr (struct execdata *e, const Elf32_Phdr *mapped_phdr, /* Sanity check. */ if (e->file_size <= (off_t) (phdr->p_offset + phdr->p_filesz)) - e->error = EINVAL; + e->error = ENOEXEC; break; } } @@ -937,6 +937,7 @@ check_gzip (struct execdata *earg) } void ziprderr (void) { + errno = ENOEXEC; longjmp (ziperr, 2); } void ziperror (const char *msg) @@ -1196,8 +1197,8 @@ do_exec (file_t file, ports_replaced[idx] = 1; } - e.error = ports_create_port (port_bucket, sizeof *boot, - execboot_portclass, &boot); + e.error = ports_create_port (execboot_portclass, port_bucket, + sizeof *boot, &boot); if (boot == NULL) { stdout: @@ -1374,7 +1375,7 @@ do_exec (file_t file, & ~(e.interp.phdr->p_align - 1)), e.interp.phdr->p_filesz); if (! name && ! ferror (&e.stream)) - e.error = EINVAL; + e.error = ENOEXEC; } if (! name) @@ -1743,7 +1744,7 @@ S_exec_setexecdata (struct trivfs_protid *protid, return EPERM; if (nports < INIT_PORT_MAX || nints < INIT_INT_MAX) - return EINVAL; + return EINVAL; /* */ err = servercopy ((void **) &ports, nports * sizeof (mach_port_t), ports_copy); |