コード例 #1
0
int main(void)
{
  uint32_t sr;

  printf("Init syscall handler.\n\r");
  overwriteSYSCALL();

  // Configure the assertion fabric
  printf("Enabling the assertion fabric.\n\r");
  setAttackEnables(0);
  disableFabric();
  enableFabric();

  // Go to user mode
  printf("Going to user mode.\n\r");
  sr = getSPR(SPR_SR);
  sr = sr & 0xfffffffe;
  setSPR(SPR_SR, sr);

  // Do some stuff
  printf("Waiting.\n\r");
  busyWait();

  // Trigger attack
  printf("Triggering attack.\n\r");
  setAttackEnables(1 << 7);
  
  // Do some stuff
  printf("Waiting.\n\r");
  busyWait();

  printf("Syscall enter.\n\r");
  asm volatile(
      "l.sys 1234"
  );
  printf("Syscall exit.\n\r");

  // Do some stuff
  printf("Waiting.\n\r");
  busyWait();

  // Test
  printf("EEAR = %x.\n\r", getSPR(SPR_EEAR_BASE));
  if(getSPR(SPR_EEAR_BASE) != 0xdeadbeef)
    printf("DEFENSE SUCCESS\n\r");
  else
    printf("DEFENSE FAILURE\n\r");

  // Exit
  printf("Exit.\n\r");
  return 0;
}
コード例 #2
0
ファイル: privEscTest.c プロジェクト: hoangt/SPECS
int main(void)
{
  unsigned int sr;

  // Configure the assertion fabric
  printf("Configuring assertion fabric.\n\r");
  disableFabric();
  configureFabric();
  enableFabric();

  // Go to user mode
  printf("Going to user mode.\n\r");
  sr = getSPR(SPR_SR);
  sr = sr & 0xfffffffe;
  setSPR(SPR_SR, sr);

  // Do some stuff
  printf("Waiting.\n\r");
  busyWait();

  // Trigger attack
  printf("Triggering attack.\n\r");
  setSPR(SPR_PCCR(3), 0x80000000);
  setSPR(SPR_PCCR(3), 0x00000000);

  // Do some stuff
  printf("Waiting.\n\r");
  busyWait();

  // Test
  if((getSPR(SPR_SR) & 0x1) == 0)
    printf("DEFENSE SUCCESS\n\r");
  else
    printf("DEFENSE FAILURE\n\r");

  // Exit
  printf("Exit.\n\r");
  return 0;
}