// SPDX-License-Identifier: GPL-2.0-only #include #include #include #include #include #include #include #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(); }