57 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2 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}57