cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

basic_test.c (1320B)


      1// SPDX-License-Identifier: LGPL-2.1
      2/*
      3 * Basic test coverage for critical regions and rseq_current_cpu().
      4 */
      5
      6#define _GNU_SOURCE
      7#include <assert.h>
      8#include <sched.h>
      9#include <signal.h>
     10#include <stdio.h>
     11#include <string.h>
     12#include <sys/time.h>
     13
     14#include "rseq.h"
     15
     16void test_cpu_pointer(void)
     17{
     18	cpu_set_t affinity, test_affinity;
     19	int i;
     20
     21	sched_getaffinity(0, sizeof(affinity), &affinity);
     22	CPU_ZERO(&test_affinity);
     23	for (i = 0; i < CPU_SETSIZE; i++) {
     24		if (CPU_ISSET(i, &affinity)) {
     25			CPU_SET(i, &test_affinity);
     26			sched_setaffinity(0, sizeof(test_affinity),
     27					&test_affinity);
     28			assert(sched_getcpu() == i);
     29			assert(rseq_current_cpu() == i);
     30			assert(rseq_current_cpu_raw() == i);
     31			assert(rseq_cpu_start() == i);
     32			CPU_CLR(i, &test_affinity);
     33		}
     34	}
     35	sched_setaffinity(0, sizeof(affinity), &affinity);
     36}
     37
     38int main(int argc, char **argv)
     39{
     40	if (rseq_register_current_thread()) {
     41		fprintf(stderr, "Error: rseq_register_current_thread(...) failed(%d): %s\n",
     42			errno, strerror(errno));
     43		goto init_thread_error;
     44	}
     45	printf("testing current cpu\n");
     46	test_cpu_pointer();
     47	if (rseq_unregister_current_thread()) {
     48		fprintf(stderr, "Error: rseq_unregister_current_thread(...) failed(%d): %s\n",
     49			errno, strerror(errno));
     50		goto init_thread_error;
     51	}
     52	return 0;
     53
     54init_thread_error:
     55	return -1;
     56}