Exemplo n.º 1
0
extern "C" int execve (const char *filename, char *const argv[],
                        char *const envp[])
{
  if (isPerformingCkptRestart()) {
    return _real_execve(filename, argv, envp);
  }
  JTRACE("execve() wrapper") (filename);

  /* Acquire the wrapperExeution lock to prevent checkpoint to happen while
   * processing this system call.
   */
  WRAPPER_EXECUTION_GET_EXCL_LOCK();

  dmtcp::vector<dmtcp::string> origUserEnv = copyUserEnv(envp);

  char *newFilename;
  char **newArgv;
  dmtcpPrepareForExec(filename, argv, &newFilename, &newArgv);

  dmtcp::vector<const char*> envVect = patchUserEnv(origUserEnv);

  int retVal = _real_execve (newFilename, newArgv, (char* const*)&envVect[0]);

  dmtcpProcessFailedExec(filename, newArgv);

  WRAPPER_EXECUTION_RELEASE_EXCL_LOCK();

  return retVal;
}
Exemplo n.º 2
0
// Stop calls to outside executables.
int execve(const char*filename, char *const argv[], char *const envp[]) {
    if (action==A_HALT) exit(0);
    if (has_run_access(filename)) {
        sb_log(4, "Allowing \"%s\" to be execve", filename);
        return _real_execve(filename, argv, envp);
    }
    sb_log(0, "Attempt to execve(%s).", filename);
    if (action==A_WARN) return 0;
    errno=EACCES;
    return -1;
}