From: Lennart Poettering Date: Thu, 8 Jan 2015 22:12:16 +0000 (+0100) Subject: core: make EPERM errors when applying OOM adjustment for forked processes non-fatal X-Git-Tag: v219~603 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=d5243d628624038567c576e9b69c1d775eb05a05;ds=sidebyside core: make EPERM errors when applying OOM adjustment for forked processes non-fatal This should be useful for user namespaces. --- diff --git a/src/core/execute.c b/src/core/execute.c index 0af4227b0..63d295cf4 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -1406,12 +1406,16 @@ static int exec_child(ExecCommand *command, } if (context->oom_score_adjust_set) { - char t[16]; + char t[DECIMAL_STR_MAX(context->oom_score_adjust)]; - snprintf(t, sizeof(t), "%i", context->oom_score_adjust); - char_array_0(t); + /* When we can't make this change due to EPERM, then + * let's silently skip over it. User namespaces + * prohibit write access to this file, and we + * shouldn't trip up over that. */ - if (write_string_file("/proc/self/oom_score_adj", t) < 0) { + sprintf(t, "%i", context->oom_score_adjust); + err = write_string_file("/proc/self/oom_score_adj", t); + if (err < 0 && err != -EPERM) { *error = EXIT_OOM_ADJUST; return -errno; }