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