Beispiel #1
0
int main(int argc, char **argv) {
  struct NaClApp app;

  NaClHandleBootstrapArgs(&argc, &argv);
  NaClDebugExceptionHandlerStandaloneHandleArgs(argc, argv);

  /* Turn off buffering to aid debugging. */
  setvbuf(stdout, NULL, _IONBF, 0);
  setvbuf(stderr, NULL, _IONBF, 0);

  NaClAllModulesInit();

  if (argc != 3) {
    NaClLog(LOG_FATAL,
            "Expected 2 arguments: <executable-filename> <crash-type>\n");
  }

  g_crash_type = argv[2];

  CHECK(NaClAppCtor(&app));
  CHECK(NaClAppLoadFileFromFilename(&app, argv[1]) == LOAD_OK);
  NaClAppInitialDescriptorHookup(&app);

  if (TestWithUntrustedExceptionHandling()) {
    app.enable_exception_handling = 1;
#if NACL_WINDOWS
    app.attach_debug_exception_handler_func =
        NaClDebugExceptionHandlerStandaloneAttach;
#endif
  }

  NaClAddSyscall(NACL_sys_test_syscall_1, JumpToZeroCrashSyscall);
  NaClAddSyscall(NACL_sys_test_syscall_2, JumpIntoSandboxCrashSyscall);

  RegisterHandlers();

  CHECK(NaClCreateMainThread(&app, argc - 1, argv + 1, NULL));
  NaClWaitForMainThreadToExit(&app);

  NaClLog(LOG_ERROR, "We did not expect the test program to exit cleanly\n");
  return 1;
}
Beispiel #2
0
int main(int argc, char **argv) {
  struct NaClApp app;
  uint32_t mmap_addr;
  char arg_string[32];
  char *args[] = {"prog_name", arg_string};

  NaClAllModulesInit();

  if (argc != 2) {
    NaClLog(LOG_FATAL, "Expected 1 argument: executable filename\n");
  }

  NaClAddSyscall(NACL_sys_test_syscall_1, TestSyscall);

  CHECK(NaClAppCtor(&app));
  CHECK(NaClAppLoadFileFromFilename(&app, argv[1]) == LOAD_OK);
  NaClAppInitialDescriptorHookup(&app);
  CHECK(NaClAppPrepareToLaunch(&app) == LOAD_OK);

  NaClSignalHandlerInit();
  NaClSignalHandlerSet(TrapSignalHandler);

  /*
   * Allocate some space in untrusted address space.  We pass the
   * address to the guest program so that it can write a register
   * snapshot for us to compare against.
   */
  mmap_addr = NaClSysMmapIntern(
      &app, NULL, sizeof(*g_test_shm),
      NACL_ABI_PROT_READ | NACL_ABI_PROT_WRITE,
      NACL_ABI_MAP_PRIVATE | NACL_ABI_MAP_ANONYMOUS, -1, 0);
  g_test_shm = (struct RegsTestShm *) NaClUserToSys(&app, mmap_addr);
  SNPRINTF(arg_string, sizeof(arg_string), "0x%x", (unsigned int) mmap_addr);

  CHECK(NaClCreateMainThread(&app, 2, args, NULL));
  CHECK(NaClWaitForMainThreadToExit(&app) == 0);

  CHECK(!g_in_untrusted_code);
  ASSERT_EQ(g_context_switch_count,
            (kNumberOfCallsToTest + kFastPathSyscallsToTest - 1) * 2);

  /*
   * Avoid calling exit() because it runs process-global destructors
   * which might break code that is running in our unjoined threads.
   */
  NaClExit(0);
  return 0;
}
/*
 * d'b: see documentation about "one ring" tonneling syscall
 * note: all syscalls except trap() only need for nexe prolog
 */
void NaClSyscallTableInit() {
  int i;
  for (i = 0; i < NACL_MAX_SYSCALLS; ++i) {
     nacl_syscall[i].handler = &NotImplementedDecoder;
  }

  NaClAddSyscall(Trap, &TrapDecoder); /* 0. added onering call */
  NaClAddSyscall(NACL_sys_sysbrk, &NaClSysSysbrkDecoder); /* 20 */
  NaClAddSyscall(NACL_sys_exit, &NaClSysExitDecoder); /* 30 */
  NaClAddSyscall(NACL_sys_tls_init, &NaClSysTls_InitDecoder); /* 82 */
  NaClAddSyscall(NACL_sys_tls_get, &NaClSysTls_GetDecoder); /* 84 */
  NaClAddSyscall(NACL_sys_mutex_create, &NaClSysMutex_CreateDecoder); /* 70 */
}
void NaClInjectThreadCaptureSyscall(struct NaClApp *nap) {
  UNREFERENCED_PARAMETER(nap);

  NaClAddSyscall(NACL_sys_test_syscall_1, TestSyscall);
}
Beispiel #5
0
/*
  d'b:
  in this list of system calls 5 ones left untouched:
  (other syscalls set to "NaClSysRestricted")

  syscalls for an empty nexe: "main(){}"
  +  20 -- NACL_sys_sysbrk (NaClSysSysbrkDecoder) -- still need to serve user malloc()
  ++ 30 -- NACL_sys_exit (NaClSysExitDecoder) -- no need. i gonna exit through long/short jump
  +  70 -- NACL_sys_mutex_create (NaClSysMutex_CreateDecoder) -- dummy
  +  82 -- NACL_sys_tls_init (NaClSysTls_InitDecoder) -- dummy
  +  84 -- NACL_sys_tls_get (NaClSysTls_GetDecoder) -- dummy

  special case, tonneling call:
  0 -- artificially added "One Ring" single syscall

  note: to restore syscalls to the original version just delete everything
  until "d'b end" and uncomment commented code
*/
void NaClSyscallTableInitDisable() {
  int i;
  for (i = 0; i < NACL_MAX_SYSCALLS; ++i) {
     nacl_syscall[i].handler = &NotImplementedDecoder;
  }

  NaClAddSyscall(One_ring, &OneRingDecoder); /* 0. added onering call */
  NaClAddSyscall(NACL_sys_null, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_nameservice, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_dup, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_dup2, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_open, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_close, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_read, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_write, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_lseek, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_ioctl, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_fstat, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_stat, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_getdents, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sysbrk, &NaClSysSysbrkDecoder); /* 20 */
  NaClAddSyscall(NACL_sys_mmap, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_munmap, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_exit, &NaClSysExitDecoder); /* 30 */
  NaClAddSyscall(NACL_sys_getpid, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_thread_exit, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_gettimeofday, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_clock, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_nanosleep, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_makeboundsock, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_accept, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_connect, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_sendmsg, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_recvmsg, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_mem_obj_create, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_tls_init, &NaClSysTls_InitDecoder); /* 82 */
  NaClAddSyscall(NACL_sys_thread_create, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_tls_get, &NaClSysTls_GetDecoder); /* 84 */
  NaClAddSyscall(NACL_sys_thread_nice, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_mutex_create, &NaClSysMutex_CreateDecoder); /* 70 */
  NaClAddSyscall(NACL_sys_mutex_lock, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_mutex_unlock, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_mutex_trylock, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_cond_create, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_cond_wait, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_cond_signal, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_cond_broadcast, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_cond_timed_wait_abs, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_imc_socketpair, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sem_create, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sem_wait, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sem_post, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sem_get_value, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sched_yield, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_sysconf, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_dyncode_create, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_dyncode_modify, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_dyncode_delete, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_second_tls_set, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_second_tls_get, &NaClSysRestricted);
  NaClAddSyscall(NACL_sys_test_infoleak, &NaClSysRestricted);
}
Beispiel #6
0
/* auto generated */
void NaClSyscallTableInit() {
  int i;
  for (i = 0; i < NACL_MAX_SYSCALLS; ++i) {
    nacl_syscall[i].handler = &NotImplementedDecoder;
  }

  NaClAddSyscall(One_ring, &OneRingDecoder); /* d'b: 0. added onering call */
  NaClAddSyscall(NACL_sys_null, &NaClSysNullDecoder);
  NaClAddSyscall(NACL_sys_nameservice, &NaClSysNameServiceDecoder);
  NaClAddSyscall(NACL_sys_dup, &NaClSysDupDecoder);
  NaClAddSyscall(NACL_sys_dup2, &NaClSysDup2Decoder);
  NaClAddSyscall(NACL_sys_open, &NaClSysOpenDecoder);
  NaClAddSyscall(NACL_sys_close, &NaClSysCloseDecoder);
  NaClAddSyscall(NACL_sys_read, &NaClSysReadDecoder);
  NaClAddSyscall(NACL_sys_write, &NaClSysWriteDecoder);
  NaClAddSyscall(NACL_sys_lseek, &NaClSysLseekDecoder);
  NaClAddSyscall(NACL_sys_ioctl, &NaClSysIoctlDecoder);
  NaClAddSyscall(NACL_sys_fstat, &NaClSysFstatDecoder);
  NaClAddSyscall(NACL_sys_stat, &NaClSysStatDecoder);
  NaClAddSyscall(NACL_sys_getdents, &NaClSysGetdentsDecoder);
  NaClAddSyscall(NACL_sys_sysbrk, &NaClSysSysbrkDecoder);
  NaClAddSyscall(NACL_sys_mmap, &NaClSysMmapDecoder);
  NaClAddSyscall(NACL_sys_munmap, &NaClSysMunmapDecoder);
  NaClAddSyscall(NACL_sys_exit, &NaClSysExitDecoder);
  NaClAddSyscall(NACL_sys_getpid, &NaClSysGetpidDecoder);
  NaClAddSyscall(NACL_sys_thread_exit, &NaClSysThread_ExitDecoder);
  NaClAddSyscall(NACL_sys_gettimeofday, &NaClSysGetTimeOfDayDecoder);
  NaClAddSyscall(NACL_sys_clock, &NaClSysClockDecoder);
  NaClAddSyscall(NACL_sys_nanosleep, &NaClSysNanosleepDecoder);
  NaClAddSyscall(NACL_sys_imc_makeboundsock, &NaClSysImc_MakeBoundSockDecoder);
  NaClAddSyscall(NACL_sys_imc_accept, &NaClSysImc_AcceptDecoder);
  NaClAddSyscall(NACL_sys_imc_connect, &NaClSysImc_ConnectDecoder);
  NaClAddSyscall(NACL_sys_imc_sendmsg, &NaClSysImc_SendmsgDecoder);
  NaClAddSyscall(NACL_sys_imc_recvmsg, &NaClSysImc_RecvmsgDecoder);
  NaClAddSyscall(NACL_sys_imc_mem_obj_create, &NaClSysImc_Mem_Obj_CreateDecoder);
  NaClAddSyscall(NACL_sys_tls_init, &NaClSysTls_InitDecoder);
  NaClAddSyscall(NACL_sys_thread_create, &NaClSysThread_CreateDecoder);
  NaClAddSyscall(NACL_sys_tls_get, &NaClSysTls_GetDecoder);
  NaClAddSyscall(NACL_sys_thread_nice, &NaClSysThread_NiceDecoder);
  NaClAddSyscall(NACL_sys_mutex_create, &NaClSysMutex_CreateDecoder);
  NaClAddSyscall(NACL_sys_mutex_lock, &NaClSysMutex_LockDecoder);
  NaClAddSyscall(NACL_sys_mutex_unlock, &NaClSysMutex_UnlockDecoder);
  NaClAddSyscall(NACL_sys_mutex_trylock, &NaClSysMutex_TrylockDecoder);
  NaClAddSyscall(NACL_sys_cond_create, &NaClSysCond_CreateDecoder);
  NaClAddSyscall(NACL_sys_cond_wait, &NaClSysCond_WaitDecoder);
  NaClAddSyscall(NACL_sys_cond_signal, &NaClSysCond_SignalDecoder);
  NaClAddSyscall(NACL_sys_cond_broadcast, &NaClSysCond_BroadcastDecoder);
  NaClAddSyscall(NACL_sys_cond_timed_wait_abs, &NaClSysCond_Timed_Wait_AbsDecoder);
  NaClAddSyscall(NACL_sys_imc_socketpair, &NaClSysImc_SocketPairDecoder);
  NaClAddSyscall(NACL_sys_sem_create, &NaClSysSem_CreateDecoder);
  NaClAddSyscall(NACL_sys_sem_wait, &NaClSysSem_WaitDecoder);
  NaClAddSyscall(NACL_sys_sem_post, &NaClSysSem_PostDecoder);
  NaClAddSyscall(NACL_sys_sem_get_value, &NaClSysSem_Get_ValueDecoder);
  NaClAddSyscall(NACL_sys_sched_yield, &NaClSysSched_YieldDecoder);
  NaClAddSyscall(NACL_sys_sysconf, &NaClSysSysconfDecoder);
  NaClAddSyscall(NACL_sys_dyncode_create, &NaClSysDyncode_CreateDecoder);
  NaClAddSyscall(NACL_sys_dyncode_modify, &NaClSysDyncode_ModifyDecoder);
  NaClAddSyscall(NACL_sys_dyncode_delete, &NaClSysDyncode_DeleteDecoder);
  NaClAddSyscall(NACL_sys_second_tls_set, &NaClSysSecond_Tls_SetDecoder);
  NaClAddSyscall(NACL_sys_second_tls_get, &NaClSysSecond_Tls_GetDecoder);
  NaClAddSyscall(NACL_sys_test_infoleak, &NaClSysTest_InfoLeakDecoder);
}