1// SPDX-License-Identifier: GPL-2.0-only
2
3#include <stdbool.h>
4#include <stdlib.h>
5#include <error.h>
6#include <stdio.h>
7#include <string.h>
8#include <unistd.h>
9#include <fcntl.h>
10
11#include "unpriv_helpers.h"
12
13static bool get_mitigations_off(void)
14{
15 char cmdline[4096], *c;
16 int fd, ret = false;
17
18 fd = open("/proc/cmdline", O_RDONLY);
19 if (fd < 0) {
20 perror("open /proc/cmdline");
21 return false;
22 }
23
24 if (read(fd, cmdline, sizeof(cmdline) - 1) < 0) {
25 perror("read /proc/cmdline");
26 goto out;
27 }
28
29 cmdline[sizeof(cmdline) - 1] = '\0';
30 for (c = strtok(cmdline, " \n"); c; c = strtok(NULL, " \n")) {
31 if (strncmp(c, "mitigations=off", strlen(c)))
32 continue;
33 ret = true;
34 break;
35 }
36out:
37 close(fd);
38 return ret;
39}
40
41bool get_unpriv_disabled(void)
42{
43 bool disabled;
44 char buf[2];
45 FILE *fd;
46
47 fd = fopen("/proc/sys/" UNPRIV_SYSCTL, "r");
48 if (fd) {
49 disabled = (fgets(buf, 2, fd) == buf && atoi(buf));
50 fclose(fd);
51 } else {
52 perror("fopen /proc/sys/" UNPRIV_SYSCTL);
53 disabled = true;
54 }
55
56 return disabled ? true : get_mitigations_off();
57}
58

source code of linux/tools/testing/selftests/bpf/unpriv_helpers.c