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

on-fault-limit.c (842B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <sys/mman.h>
      3#include <stdio.h>
      4#include <unistd.h>
      5#include <string.h>
      6#include <sys/time.h>
      7#include <sys/resource.h>
      8
      9#ifndef MCL_ONFAULT
     10#define MCL_ONFAULT (MCL_FUTURE << 1)
     11#endif
     12
     13static int test_limit(void)
     14{
     15	int ret = 1;
     16	struct rlimit lims;
     17	void *map;
     18
     19	if (getrlimit(RLIMIT_MEMLOCK, &lims)) {
     20		perror("getrlimit");
     21		return ret;
     22	}
     23
     24	if (mlockall(MCL_ONFAULT | MCL_FUTURE)) {
     25		perror("mlockall");
     26		return ret;
     27	}
     28
     29	map = mmap(NULL, 2 * lims.rlim_max, PROT_READ | PROT_WRITE,
     30		   MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0);
     31	if (map != MAP_FAILED)
     32		printf("mmap should have failed, but didn't\n");
     33	else {
     34		ret = 0;
     35		munmap(map, 2 * lims.rlim_max);
     36	}
     37
     38	munlockall();
     39	return ret;
     40}
     41
     42int main(int argc, char **argv)
     43{
     44	int ret = 0;
     45
     46	ret += test_limit();
     47	return ret;
     48}