Commit 8fb4fc68 authored by Guillem Jover's avatar Guillem Jover Committed by Linus Torvalds

[PATCH] Allow user processes to raise their oom_adj value

Currently a user process cannot rise its own oom_adj value (i.e.
unprotecting itself from the OOM killer).  As this value is stored in the
task structure it gets inherited and the unprivileged childs will be unable
to rise it.

The EPERM will be handled by the generic proc fs layer, as only processes
with the proper caps or the owner of the process will be able to write to
the file.  So we allow only the processes with CAP_SYS_RESOURCE to lower
the value, otherwise it will get an EACCES which seems more appropriate
than EPERM.
Signed-off-by: default avatarGuillem Jover <guillem.jover@nokia.com>
Acked-by: default avatarAndrea Arcangeli <andrea@novell.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3b17979b
...@@ -683,8 +683,6 @@ static ssize_t oom_adjust_write(struct file *file, const char __user *buf, ...@@ -683,8 +683,6 @@ static ssize_t oom_adjust_write(struct file *file, const char __user *buf,
char buffer[PROC_NUMBUF], *end; char buffer[PROC_NUMBUF], *end;
int oom_adjust; int oom_adjust;
if (!capable(CAP_SYS_RESOURCE))
return -EPERM;
memset(buffer, 0, sizeof(buffer)); memset(buffer, 0, sizeof(buffer));
if (count > sizeof(buffer) - 1) if (count > sizeof(buffer) - 1)
count = sizeof(buffer) - 1; count = sizeof(buffer) - 1;
...@@ -699,6 +697,10 @@ static ssize_t oom_adjust_write(struct file *file, const char __user *buf, ...@@ -699,6 +697,10 @@ static ssize_t oom_adjust_write(struct file *file, const char __user *buf,
task = get_proc_task(file->f_dentry->d_inode); task = get_proc_task(file->f_dentry->d_inode);
if (!task) if (!task)
return -ESRCH; return -ESRCH;
if (oom_adjust < task->oomkilladj && !capable(CAP_SYS_RESOURCE)) {
put_task_struct(task);
return -EACCES;
}
task->oomkilladj = oom_adjust; task->oomkilladj = oom_adjust;
put_task_struct(task); put_task_struct(task);
if (end - buffer == 0) if (end - buffer == 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment