projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[cascardo/linux.git]
/
fs
/
proc
/
proc_sysctl.c
diff --git
a/fs/proc/proc_sysctl.c
b/fs/proc/proc_sysctl.c
index
1b93650
..
55313d9
100644
(file)
--- a/
fs/proc/proc_sysctl.c
+++ b/
fs/proc/proc_sysctl.c
@@
-72,7
+72,7
@@
static DEFINE_SPINLOCK(sysctl_lock);
static void drop_sysctl_table(struct ctl_table_header *header);
static int sysctl_follow_link(struct ctl_table_header **phead,
static void drop_sysctl_table(struct ctl_table_header *header);
static int sysctl_follow_link(struct ctl_table_header **phead,
- struct ctl_table **pentry
, struct nsproxy *namespaces
);
+ struct ctl_table **pentry);
static int insert_links(struct ctl_table_header *head);
static void put_links(struct ctl_table_header *header);
static int insert_links(struct ctl_table_header *head);
static void put_links(struct ctl_table_header *header);
@@
-319,11
+319,11
@@
static void sysctl_head_finish(struct ctl_table_header *head)
}
static struct ctl_table_set *
}
static struct ctl_table_set *
-lookup_header_set(struct ctl_table_root *root
, struct nsproxy *namespaces
)
+lookup_header_set(struct ctl_table_root *root)
{
struct ctl_table_set *set = &root->default_set;
if (root->lookup)
{
struct ctl_table_set *set = &root->default_set;
if (root->lookup)
- set = root->lookup(root
, namespaces
);
+ set = root->lookup(root);
return set;
}
return set;
}
@@
-430,6
+430,7
@@
static int sysctl_perm(struct ctl_table_header *head, struct ctl_table *table, i
static struct inode *proc_sys_make_inode(struct super_block *sb,
struct ctl_table_header *head, struct ctl_table *table)
{
static struct inode *proc_sys_make_inode(struct super_block *sb,
struct ctl_table_header *head, struct ctl_table *table)
{
+ struct ctl_table_root *root = head->root;
struct inode *inode;
struct proc_inode *ei;
struct inode *inode;
struct proc_inode *ei;
@@
-444,7
+445,7
@@
static struct inode *proc_sys_make_inode(struct super_block *sb,
ei->sysctl = head;
ei->sysctl_entry = table;
ei->sysctl = head;
ei->sysctl_entry = table;
- inode->i_mtime = inode->i_atime = inode->i_ctime =
CURRENT_TIME
;
+ inode->i_mtime = inode->i_atime = inode->i_ctime =
current_time(inode)
;
inode->i_mode = table->mode;
if (!S_ISDIR(table->mode)) {
inode->i_mode |= S_IFREG;
inode->i_mode = table->mode;
if (!S_ISDIR(table->mode)) {
inode->i_mode |= S_IFREG;
@@
-457,6
+458,10
@@
static struct inode *proc_sys_make_inode(struct super_block *sb,
if (is_empty_dir(head))
make_empty_dir_inode(inode);
}
if (is_empty_dir(head))
make_empty_dir_inode(inode);
}
+
+ if (root->set_ownership)
+ root->set_ownership(head, table, &inode->i_uid, &inode->i_gid);
+
out:
return inode;
}
out:
return inode;
}
@@
-491,7
+496,7
@@
static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
goto out;
if (S_ISLNK(p->mode)) {
goto out;
if (S_ISLNK(p->mode)) {
- ret = sysctl_follow_link(&h, &p
, current->nsproxy
);
+ ret = sysctl_follow_link(&h, &p);
err = ERR_PTR(ret);
if (ret)
goto out;
err = ERR_PTR(ret);
if (ret)
goto out;
@@
-659,7
+664,7
@@
static bool proc_sys_link_fill_cache(struct file *file,
if (S_ISLNK(table->mode)) {
/* It is not an error if we can not follow the link ignore it */
if (S_ISLNK(table->mode)) {
/* It is not an error if we can not follow the link ignore it */
- int err = sysctl_follow_link(&head, &table
, current->nsproxy
);
+ int err = sysctl_follow_link(&head, &table);
if (err)
goto out;
}
if (err)
goto out;
}
@@
-754,7
+759,7
@@
static int proc_sys_setattr(struct dentry *dentry, struct iattr *attr)
if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
return -EPERM;
if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
return -EPERM;
- error =
inode_change_ok(inode
, attr);
+ error =
setattr_prepare(dentry
, attr);
if (error)
return error;
if (error)
return error;
@@
-976,7
+981,7
@@
static struct ctl_dir *xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir)
}
static int sysctl_follow_link(struct ctl_table_header **phead,
}
static int sysctl_follow_link(struct ctl_table_header **phead,
- struct ctl_table **pentry
, struct nsproxy *namespaces
)
+ struct ctl_table **pentry)
{
struct ctl_table_header *head;
struct ctl_table_root *root;
{
struct ctl_table_header *head;
struct ctl_table_root *root;
@@
-988,7
+993,7
@@
static int sysctl_follow_link(struct ctl_table_header **phead,
ret = 0;
spin_lock(&sysctl_lock);
root = (*pentry)->data;
ret = 0;
spin_lock(&sysctl_lock);
root = (*pentry)->data;
- set = lookup_header_set(root
, namespaces
);
+ set = lookup_header_set(root);
dir = xlate_dir(set, (*phead)->parent);
if (IS_ERR(dir))
ret = PTR_ERR(dir);
dir = xlate_dir(set, (*phead)->parent);
if (IS_ERR(dir))
ret = PTR_ERR(dir);