blob: d90b8d1815d439349686c32ec43331f3cd5e0cd1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/07/02 18:48:26-07:00 chrisw@osdl.org
# [PATCH] check attr updates in /proc
#
# Any proc entry with default proc_file_inode_operations allow unauthorized
# attribute updates. This is very dangerous for proc entries that rely
# solely on file permissions for open/read/write.
#
# Signed-off-by: Chris Wright <chrisw@osdl.org>
# Signed-off-by: Linus Torvalds <torvalds@osdl.org>
#
# fs/proc/generic.c
# 2004/07/02 15:47:55-07:00 chrisw@osdl.org +14 -7
# check attr updates in /proc
#
diff -Nru a/fs/proc/generic.c b/fs/proc/generic.c
--- a/fs/proc/generic.c 2004-07-08 17:03:20 -07:00
+++ b/fs/proc/generic.c 2004-07-08 17:03:20 -07:00
@@ -231,14 +231,21 @@
static int proc_notify_change(struct dentry *dentry, struct iattr *iattr)
{
struct inode *inode = dentry->d_inode;
- int error = inode_setattr(inode, iattr);
- if (!error) {
- struct proc_dir_entry *de = PDE(inode);
- de->uid = inode->i_uid;
- de->gid = inode->i_gid;
- de->mode = inode->i_mode;
- }
+ struct proc_dir_entry *de = PDE(inode);
+ int error;
+ error = inode_change_ok(inode, iattr);
+ if (error)
+ goto out;
+
+ error = inode_setattr(inode, iattr);
+ if (error)
+ goto out;
+
+ de->uid = inode->i_uid;
+ de->gid = inode->i_gid;
+ de->mode = inode->i_mode;
+out:
return error;
}
|