diff options
Diffstat (limited to 'sandbox/linux/suid/sandbox.c')
-rw-r--r-- | sandbox/linux/suid/sandbox.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sandbox/linux/suid/sandbox.c b/sandbox/linux/suid/sandbox.c index f54bcd1..04073d4 100644 --- a/sandbox/linux/suid/sandbox.c +++ b/sandbox/linux/suid/sandbox.c @@ -26,6 +26,7 @@ #include <unistd.h> #include "linux_util.h" +#include "process_util.h" #include "suid_unsafe_environment_variables.h" #if !defined(CLONE_NEWPID) @@ -309,7 +310,7 @@ int main(int argc, char **argv) { // when you call it with --find-inode INODE_NUMBER. if (argc == 3 && (0 == strcmp(argv[1], kFindInodeSwitch))) { pid_t pid; - char *endptr; + char* endptr; ino_t inode = strtoull(argv[2], &endptr, 10); if (inode == ULLONG_MAX || *endptr) return 1; @@ -318,6 +319,19 @@ int main(int argc, char **argv) { printf("%d\n", pid); return 0; } + // Likewise, we cannot adjust /proc/pid/oom_adj for sandboxed renderers + // because those files are owned by root. So we need another helper here. + if (argc == 4 && (0 == strcmp(argv[1], kAdjustOOMScoreSwitch))) { + char* endptr; + int score; + pid_t pid = strtoul(argv[2], &endptr, 10); + if (pid == ULONG_MAX || *endptr) + return 1; + score = strtol(argv[3], &endptr, 10); + if (score == LONG_MAX || score == LONG_MIN || *endptr) + return 1; + return AdjustOOMScore(pid, score); + } if (!MoveToNewPIDNamespace()) return 1; |