aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/proc_sysctl.c
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2016-07-16 16:22:55 -0400
committerEric W. Biederman <ebiederm@xmission.com>2016-08-08 10:17:16 -0400
commit13bcc6a2853435bb5dad368bcbaa9d2a5b9c0ac4 (patch)
tree3c852b1ed6545b504ea23f5353d3570f46316d16 /fs/proc/proc_sysctl.c
parent29b4817d4018df78086157ea3a55c1d9424a7cfc (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.c14
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
73static void drop_sysctl_table(struct ctl_table_header *header); 73static void drop_sysctl_table(struct ctl_table_header *header);
74static int sysctl_follow_link(struct ctl_table_header **phead, 74static int sysctl_follow_link(struct ctl_table_header **phead,
75 struct ctl_table **pentry, struct nsproxy *namespaces); 75 struct ctl_table **pentry);
76static int insert_links(struct ctl_table_header *head); 76static int insert_links(struct ctl_table_header *head);
77static void put_links(struct ctl_table_header *header); 77static 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
321static struct ctl_table_set * 321static struct ctl_table_set *
322lookup_header_set(struct ctl_table_root *root, struct nsproxy *namespaces) 322lookup_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
978static int sysctl_follow_link(struct ctl_table_header **phead, 978static 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);