summaryrefslogtreecommitdiffstats
path: root/sandbox/linux/suid/sandbox.c
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/linux/suid/sandbox.c')
-rw-r--r--sandbox/linux/suid/sandbox.c16
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;