cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

check_settls1.c (937B)


      1#include <stdio.h>
      2#include <stdlib.h>
      3#include <errno.h>
      4#include <unistd.h>
      5
      6#include <sys/syscall.h>
      7
      8#ifndef SYS_set_thread_area
      9#define SYS_set_thread_area 243
     10#endif
     11
     12int main (void)
     13{
     14    unsigned long tp, old_tp;
     15    int ret;
     16
     17    asm volatile ("move $pid,%0" : "=r" (old_tp));
     18    old_tp &= ~0xff;
     19
     20    ret = syscall (SYS_set_thread_area, 0xf0);
     21    if (ret != -1 || errno != EINVAL) {
     22        syscall (SYS_set_thread_area, old_tp);
     23        perror ("Invalid thread area accepted:");
     24        abort();
     25    }
     26
     27    ret = syscall (SYS_set_thread_area, 0xeddeed00);
     28    if (ret != 0) {
     29        perror ("Valid thread area not accepted: ");
     30        abort ();
     31    }
     32
     33    asm volatile ("move $pid,%0" : "=r" (tp));
     34    tp &= ~0xff;
     35    syscall (SYS_set_thread_area, old_tp);
     36
     37    if (tp != 0xeddeed00) {
     38        * (volatile int *) 0 = 0;
     39        perror ("tls2");
     40        abort ();
     41    }
     42
     43    printf ("pass\n");
     44    return EXIT_SUCCESS;
     45}