parent
ecff980761
commit
7ac9a16090
|
@ -319,7 +319,9 @@ struct Noux::Sysio
|
||||||
SYMLINK_ERR_NO_SPACE, SYMLINK_ERR_NO_PERM,
|
SYMLINK_ERR_NO_SPACE, SYMLINK_ERR_NO_PERM,
|
||||||
SYMLINK_ERR_NAME_TOO_LONG };
|
SYMLINK_ERR_NAME_TOO_LONG };
|
||||||
|
|
||||||
enum Execve_error { EXECVE_NONEXISTENT = Vfs::Directory_service::NUM_GENERAL_ERRORS, EXECVE_NOMEM };
|
enum Execve_error { EXECVE_NONEXISTENT = Vfs::Directory_service::NUM_GENERAL_ERRORS,
|
||||||
|
EXECVE_NOMEM,
|
||||||
|
EXECVE_NOEXEC };
|
||||||
enum Fork_error { FORK_NOMEM = Vfs::Directory_service::NUM_GENERAL_ERRORS };
|
enum Fork_error { FORK_NOMEM = Vfs::Directory_service::NUM_GENERAL_ERRORS };
|
||||||
enum Select_error { SELECT_ERR_INTERRUPT };
|
enum Select_error { SELECT_ERR_INTERRUPT };
|
||||||
|
|
||||||
|
|
|
@ -1101,6 +1101,7 @@ namespace {
|
||||||
switch (sysio()->error.execve) {
|
switch (sysio()->error.execve) {
|
||||||
case Noux::Sysio::EXECVE_NONEXISTENT: errno = ENOENT; break;
|
case Noux::Sysio::EXECVE_NONEXISTENT: errno = ENOENT; break;
|
||||||
case Noux::Sysio::EXECVE_NOMEM: errno = ENOMEM; break;
|
case Noux::Sysio::EXECVE_NOMEM: errno = ENOMEM; break;
|
||||||
|
case Noux::Sysio::EXECVE_NOEXEC: errno = ENOEXEC; break;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -296,6 +296,18 @@ bool Noux::Child::syscall(Noux::Session::Syscall sc)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Attached_dataspace attached_binary_ds(_env.rm(), binary_ds->ds);
|
||||||
|
char const *binary_addr = attached_binary_ds.local_addr<char const>();
|
||||||
|
if ((binary_addr[0] != 0x7f) ||
|
||||||
|
(binary_addr[1] != 'E') ||
|
||||||
|
(binary_addr[2] != 'L') ||
|
||||||
|
(binary_addr[3] != 'F')) {
|
||||||
|
_sysio.error.execve = Sysio::EXECVE_NOEXEC;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binary_ds.destruct();
|
binary_ds.destruct();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user