mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
Grants system server access to /proc/<pid>/oom_adj for Android applications.
Signed-off-by: Brian Swetland <swetland@google.com>
This commit is contained in:
parent
68d0e19e91
commit
aa3305f2ba
|
|
@ -139,6 +139,12 @@ struct pid_entry {
|
|||
NULL, &proc_single_file_operations, \
|
||||
{ .proc_show = show } )
|
||||
|
||||
/* ANDROID is for special files in /proc. */
|
||||
#define ANDROID(NAME, MODE, OTYPE) \
|
||||
NOD(NAME, (S_IFREG|(MODE)), \
|
||||
&proc_##OTYPE##_inode_operations, \
|
||||
&proc_##OTYPE##_operations, {})
|
||||
|
||||
/*
|
||||
* Count the number of hardlinks for the pid_entry table, excluding the .
|
||||
* and .. links.
|
||||
|
|
@ -1000,6 +1006,35 @@ static ssize_t oom_adj_write(struct file *file, const char __user *buf,
|
|||
return err < 0 ? err : count;
|
||||
}
|
||||
|
||||
static int oom_adjust_permission(struct inode *inode, int mask)
|
||||
{
|
||||
uid_t uid;
|
||||
struct task_struct *p;
|
||||
|
||||
p = get_proc_task(inode);
|
||||
if(p) {
|
||||
uid = task_uid(p);
|
||||
put_task_struct(p);
|
||||
}
|
||||
|
||||
/*
|
||||
* System Server (uid == 1000) is granted access to oom_adj of all
|
||||
* android applications (uid > 10000) as and services (uid >= 1000)
|
||||
*/
|
||||
if (p && (current_fsuid() == 1000) && (uid >= 1000)) {
|
||||
if (inode->i_mode >> 6 & mask) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fall back to default. */
|
||||
return generic_permission(inode, mask);
|
||||
}
|
||||
|
||||
static const struct inode_operations proc_oom_adj_inode_operations = {
|
||||
.permission = oom_adjust_permission,
|
||||
};
|
||||
|
||||
static const struct file_operations proc_oom_adj_operations = {
|
||||
.read = oom_adj_read,
|
||||
.write = oom_adj_write,
|
||||
|
|
@ -2697,7 +2732,7 @@ static const struct pid_entry tgid_base_stuff[] = {
|
|||
REG("cgroup", S_IRUGO, proc_cgroup_operations),
|
||||
#endif
|
||||
INF("oom_score", S_IRUGO, proc_oom_score),
|
||||
REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adj_operations),
|
||||
ANDROID("oom_adj", S_IRUGO|S_IWUSR, oom_adj),
|
||||
REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
|
||||
#ifdef CONFIG_AUDITSYSCALL
|
||||
REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user