Beispiel #1
0
/* Returns 1 if Data Execution Prevention is present and working */
static int NaClAttemptToExecuteData()
{
  int result;
  char *thunk_buffer = malloc(64);
  nacl_void_thunk thunk;

  /* d'b: small fixes */
  if(thunk_buffer == NULL) return 0;
  thunk = NaClGenerateThunk(thunk_buffer, 64);
  setup_signals();

  if(0 == sigsetjmp(try_state, 1))
  {
    thunk();
    result = 0;
  }
  else
  {
    result = 1;
  }

  restore_signals();
  free(thunk_buffer);
  return result;
}
int NaClAttemptToExecuteDataAtAddr(char *thunk_buffer, size_t size) {
  int result;
  MachExceptionHandlerData saved_handlers;
  nacl_void_thunk thunk = NaClGenerateThunk(thunk_buffer, size);

  setup_signals();
  DisableMachExceptionHandler(&saved_handlers);

  if (0 == sigsetjmp(try_state, 1)) {
    thunk();
    result = 0;
  } else {
    result = 1;
  }

  EnableMachExceptionHandler(&saved_handlers);
  restore_signals();

  return result;
}