1 // SPDX-License-Identifier: GPL-2.0
2 #define _GNU_SOURCE
3 #define __EXPORTED_HEADERS__
4 
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <linux/fcntl.h>
8 #include <linux/memfd.h>
9 #include <unistd.h>
10 #include <sys/syscall.h>
11 
12 #include "common.h"
13 
14 int hugetlbfs_test = 0;
15 
16 /*
17  * Copied from mlock2-tests.c
18  */
19 unsigned long default_huge_page_size(void)
20 {
21 	unsigned long hps = 0;
22 	char *line = NULL;
23 	size_t linelen = 0;
24 	FILE *f = fopen("/proc/meminfo", "r");
25 
26 	if (!f)
27 		return 0;
28 	while (getline(&line, &linelen, f) > 0) {
29 		if (sscanf(line, "Hugepagesize:       %lu kB", &hps) == 1) {
30 			hps <<= 10;
31 			break;
32 		}
33 	}
34 
35 	free(line);
36 	fclose(f);
37 	return hps;
38 }
39 
40 int sys_memfd_create(const char *name, unsigned int flags)
41 {
42 	if (hugetlbfs_test)
43 		flags |= MFD_HUGETLB;
44 
45 	return syscall(__NR_memfd_create, name, flags);
46 }
47