diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2016-07-16 16:22:55 -0400 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2016-08-08 10:17:16 -0400 |
commit | 13bcc6a2853435bb5dad368bcbaa9d2a5b9c0ac4 (patch) | |
tree | 3c852b1ed6545b504ea23f5353d3570f46316d16 /fs/proc/proc_sysctl.c | |
parent | 29b4817d4018df78086157ea3a55c1d9424a7cfc (diff) |
sysctl: Stop implicitly passing current into sysctl_table_root.lookup
Passing nsproxy into sysctl_table_root.lookup was a premature
optimization in attempt to avoid depending on current. The
directory /proc/self/sys has not appeared and if and when
it does this code will need to be reviewed closely and reworked
anyway. So remove the premature optimization.
Acked-by: Kees Cook <keescook@chromium.org>
Acked-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'fs/proc/proc_sysctl.c')
-rw-r--r-- | fs/proc/proc_sysctl.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index 1b93650dda2f..a80acdfbe180 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c | |||
@@ -72,7 +72,7 @@ static DEFINE_SPINLOCK(sysctl_lock); | |||
72 | 72 | ||
73 | static void drop_sysctl_table(struct ctl_table_header *header); | 73 | static void drop_sysctl_table(struct ctl_table_header *header); |
74 | static int sysctl_follow_link(struct ctl_table_header **phead, | 74 | static int sysctl_follow_link(struct ctl_table_header **phead, |
75 | struct ctl_table **pentry, struct nsproxy *namespaces); | 75 | struct ctl_table **pentry); |
76 | static int insert_links(struct ctl_table_header *head); | 76 | static int insert_links(struct ctl_table_header *head); |
77 | static void put_links(struct ctl_table_header *header); | 77 | static void put_links(struct ctl_table_header *header); |
78 | 78 | ||
@@ -319,11 +319,11 @@ static void sysctl_head_finish(struct ctl_table_header *head) | |||
319 | } | 319 | } |
320 | 320 | ||
321 | static struct ctl_table_set * | 321 | static struct ctl_table_set * |
322 | lookup_header_set(struct ctl_table_root *root, struct nsproxy *namespaces) | 322 | lookup_header_set(struct ctl_table_root *root) |
323 | { | 323 | { |
324 | struct ctl_table_set *set = &root->default_set; | 324 | struct ctl_table_set *set = &root->default_set; |
325 | if (root->lookup) | 325 | if (root->lookup) |
326 | set = root->lookup(root, namespaces); | 326 | set = root->lookup(root); |
327 | return set; | 327 | return set; |
328 | } | 328 | } |
329 | 329 | ||
@@ -491,7 +491,7 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry, | |||
491 | goto out; | 491 | goto out; |
492 | 492 | ||
493 | if (S_ISLNK(p->mode)) { | 493 | if (S_ISLNK(p->mode)) { |
494 | ret = sysctl_follow_link(&h, &p, current->nsproxy); | 494 | ret = sysctl_follow_link(&h, &p); |
495 | err = ERR_PTR(ret); | 495 | err = ERR_PTR(ret); |
496 | if (ret) | 496 | if (ret) |
497 | goto out; | 497 | goto out; |
@@ -659,7 +659,7 @@ static bool proc_sys_link_fill_cache(struct file *file, | |||
659 | 659 | ||
660 | if (S_ISLNK(table->mode)) { | 660 | if (S_ISLNK(table->mode)) { |
661 | /* It is not an error if we can not follow the link ignore it */ | 661 | /* It is not an error if we can not follow the link ignore it */ |
662 | int err = sysctl_follow_link(&head, &table, current->nsproxy); | 662 | int err = sysctl_follow_link(&head, &table); |
663 | if (err) | 663 | if (err) |
664 | goto out; | 664 | goto out; |
665 | } | 665 | } |
@@ -976,7 +976,7 @@ static struct ctl_dir *xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir) | |||
976 | } | 976 | } |
977 | 977 | ||
978 | static int sysctl_follow_link(struct ctl_table_header **phead, | 978 | static int sysctl_follow_link(struct ctl_table_header **phead, |
979 | struct ctl_table **pentry, struct nsproxy *namespaces) | 979 | struct ctl_table **pentry) |
980 | { | 980 | { |
981 | struct ctl_table_header *head; | 981 | struct ctl_table_header *head; |
982 | struct ctl_table_root *root; | 982 | struct ctl_table_root *root; |
@@ -988,7 +988,7 @@ static int sysctl_follow_link(struct ctl_table_header **phead, | |||
988 | ret = 0; | 988 | ret = 0; |
989 | spin_lock(&sysctl_lock); | 989 | spin_lock(&sysctl_lock); |
990 | root = (*pentry)->data; | 990 | root = (*pentry)->data; |
991 | set = lookup_header_set(root, namespaces); | 991 | set = lookup_header_set(root); |
992 | dir = xlate_dir(set, (*phead)->parent); | 992 | dir = xlate_dir(set, (*phead)->parent); |
993 | if (IS_ERR(dir)) | 993 | if (IS_ERR(dir)) |
994 | ret = PTR_ERR(dir); | 994 | ret = PTR_ERR(dir); |