diff options
Diffstat (limited to 'fs/proc')
-rw-r--r-- | fs/proc/array.c | 2 | ||||
-rw-r--r-- | fs/proc/base.c | 6 | ||||
-rw-r--r-- | fs/proc/kmsg.c | 14 | ||||
-rw-r--r-- | fs/proc/proc_devtree.c | 7 |
4 files changed, 19 insertions, 10 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index 13b5d0708175..18e20feee251 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
@@ -270,7 +270,9 @@ static inline void task_sig(struct seq_file *m, struct task_struct *p) | |||
270 | blocked = p->blocked; | 270 | blocked = p->blocked; |
271 | collect_sigign_sigcatch(p, &ignored, &caught); | 271 | collect_sigign_sigcatch(p, &ignored, &caught); |
272 | num_threads = atomic_read(&p->signal->count); | 272 | num_threads = atomic_read(&p->signal->count); |
273 | rcu_read_lock(); /* FIXME: is this correct? */ | ||
273 | qsize = atomic_read(&__task_cred(p)->user->sigpending); | 274 | qsize = atomic_read(&__task_cred(p)->user->sigpending); |
275 | rcu_read_unlock(); | ||
274 | qlim = p->signal->rlim[RLIMIT_SIGPENDING].rlim_cur; | 276 | qlim = p->signal->rlim[RLIMIT_SIGPENDING].rlim_cur; |
275 | unlock_task_sighand(p, &flags); | 277 | unlock_task_sighand(p, &flags); |
276 | } | 278 | } |
diff --git a/fs/proc/base.c b/fs/proc/base.c index 746895ddfda1..a7310841c831 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -1089,8 +1089,12 @@ static ssize_t proc_loginuid_write(struct file * file, const char __user * buf, | |||
1089 | if (!capable(CAP_AUDIT_CONTROL)) | 1089 | if (!capable(CAP_AUDIT_CONTROL)) |
1090 | return -EPERM; | 1090 | return -EPERM; |
1091 | 1091 | ||
1092 | if (current != pid_task(proc_pid(inode), PIDTYPE_PID)) | 1092 | rcu_read_lock(); |
1093 | if (current != pid_task(proc_pid(inode), PIDTYPE_PID)) { | ||
1094 | rcu_read_unlock(); | ||
1093 | return -EPERM; | 1095 | return -EPERM; |
1096 | } | ||
1097 | rcu_read_unlock(); | ||
1094 | 1098 | ||
1095 | if (count >= PAGE_SIZE) | 1099 | if (count >= PAGE_SIZE) |
1096 | count = PAGE_SIZE - 1; | 1100 | count = PAGE_SIZE - 1; |
diff --git a/fs/proc/kmsg.c b/fs/proc/kmsg.c index 7ca78346d3f0..cfe90a48a6e8 100644 --- a/fs/proc/kmsg.c +++ b/fs/proc/kmsg.c | |||
@@ -12,37 +12,37 @@ | |||
12 | #include <linux/poll.h> | 12 | #include <linux/poll.h> |
13 | #include <linux/proc_fs.h> | 13 | #include <linux/proc_fs.h> |
14 | #include <linux/fs.h> | 14 | #include <linux/fs.h> |
15 | #include <linux/syslog.h> | ||
15 | 16 | ||
16 | #include <asm/uaccess.h> | 17 | #include <asm/uaccess.h> |
17 | #include <asm/io.h> | 18 | #include <asm/io.h> |
18 | 19 | ||
19 | extern wait_queue_head_t log_wait; | 20 | extern wait_queue_head_t log_wait; |
20 | 21 | ||
21 | extern int do_syslog(int type, char __user *bug, int count); | ||
22 | |||
23 | static int kmsg_open(struct inode * inode, struct file * file) | 22 | static int kmsg_open(struct inode * inode, struct file * file) |
24 | { | 23 | { |
25 | return do_syslog(1,NULL,0); | 24 | return do_syslog(SYSLOG_ACTION_OPEN, NULL, 0, SYSLOG_FROM_FILE); |
26 | } | 25 | } |
27 | 26 | ||
28 | static int kmsg_release(struct inode * inode, struct file * file) | 27 | static int kmsg_release(struct inode * inode, struct file * file) |
29 | { | 28 | { |
30 | (void) do_syslog(0,NULL,0); | 29 | (void) do_syslog(SYSLOG_ACTION_CLOSE, NULL, 0, SYSLOG_FROM_FILE); |
31 | return 0; | 30 | return 0; |
32 | } | 31 | } |
33 | 32 | ||
34 | static ssize_t kmsg_read(struct file *file, char __user *buf, | 33 | static ssize_t kmsg_read(struct file *file, char __user *buf, |
35 | size_t count, loff_t *ppos) | 34 | size_t count, loff_t *ppos) |
36 | { | 35 | { |
37 | if ((file->f_flags & O_NONBLOCK) && !do_syslog(9, NULL, 0)) | 36 | if ((file->f_flags & O_NONBLOCK) && |
37 | !do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_FILE)) | ||
38 | return -EAGAIN; | 38 | return -EAGAIN; |
39 | return do_syslog(2, buf, count); | 39 | return do_syslog(SYSLOG_ACTION_READ, buf, count, SYSLOG_FROM_FILE); |
40 | } | 40 | } |
41 | 41 | ||
42 | static unsigned int kmsg_poll(struct file *file, poll_table *wait) | 42 | static unsigned int kmsg_poll(struct file *file, poll_table *wait) |
43 | { | 43 | { |
44 | poll_wait(file, &log_wait, wait); | 44 | poll_wait(file, &log_wait, wait); |
45 | if (do_syslog(9, NULL, 0)) | 45 | if (do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_FILE)) |
46 | return POLLIN | POLLRDNORM; | 46 | return POLLIN | POLLRDNORM; |
47 | return 0; | 47 | return 0; |
48 | } | 48 | } |
diff --git a/fs/proc/proc_devtree.c b/fs/proc/proc_devtree.c index 123257bb356b..f8650dce74fb 100644 --- a/fs/proc/proc_devtree.c +++ b/fs/proc/proc_devtree.c | |||
@@ -10,16 +10,19 @@ | |||
10 | #include <linux/seq_file.h> | 10 | #include <linux/seq_file.h> |
11 | #include <linux/stat.h> | 11 | #include <linux/stat.h> |
12 | #include <linux/string.h> | 12 | #include <linux/string.h> |
13 | #include <linux/of.h> | ||
14 | #include <linux/module.h> | ||
13 | #include <asm/prom.h> | 15 | #include <asm/prom.h> |
14 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
15 | #include "internal.h" | 17 | #include "internal.h" |
16 | 18 | ||
17 | #ifndef HAVE_ARCH_DEVTREE_FIXUPS | ||
18 | static inline void set_node_proc_entry(struct device_node *np, | 19 | static inline void set_node_proc_entry(struct device_node *np, |
19 | struct proc_dir_entry *de) | 20 | struct proc_dir_entry *de) |
20 | { | 21 | { |
21 | } | 22 | #ifdef HAVE_ARCH_DEVTREE_FIXUPS |
23 | np->pde = de; | ||
22 | #endif | 24 | #endif |
25 | } | ||
23 | 26 | ||
24 | static struct proc_dir_entry *proc_device_tree; | 27 | static struct proc_dir_entry *proc_device_tree; |
25 | 28 | ||