| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // SPDX-License-Identifier: GPL-2.0-only
- #include <stdbool.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include "unpriv_helpers.h"
- static bool get_mitigations_off(void)
- {
- char cmdline[4096], *c;
- int fd, ret = false;
- fd = open("/proc/cmdline", O_RDONLY);
- if (fd < 0) {
- perror("open /proc/cmdline");
- return false;
- }
- if (read(fd, cmdline, sizeof(cmdline) - 1) < 0) {
- perror("read /proc/cmdline");
- goto out;
- }
- cmdline[sizeof(cmdline) - 1] = '\0';
- for (c = strtok(cmdline, " \n"); c; c = strtok(NULL, " \n")) {
- if (strncmp(c, "mitigations=off", strlen(c)))
- continue;
- ret = true;
- break;
- }
- out:
- close(fd);
- return ret;
- }
- bool get_unpriv_disabled(void)
- {
- bool disabled;
- char buf[2];
- FILE *fd;
- fd = fopen("/proc/sys/" UNPRIV_SYSCTL, "r");
- if (fd) {
- disabled = (fgets(buf, 2, fd) == buf && atoi(buf));
- fclose(fd);
- } else {
- perror("fopen /proc/sys/" UNPRIV_SYSCTL);
- disabled = true;
- }
- return disabled ? true : get_mitigations_off();
- }
|