brintos

brintos / linux-shallow public Read only

0
0
Text · 1.0 KiB · 220f6a9 Raw
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