diff options
Diffstat (limited to 'fs/proc')
| -rw-r--r-- | fs/proc/Makefile | 3 | ||||
| -rw-r--r-- | fs/proc/array.c | 4 | ||||
| -rw-r--r-- | fs/proc/base.c | 48 | ||||
| -rw-r--r-- | fs/proc/generic.c | 58 | ||||
| -rw-r--r-- | fs/proc/inode.c | 46 | ||||
| -rw-r--r-- | fs/proc/internal.h | 3 | ||||
| -rw-r--r-- | fs/proc/kcore.c | 3 | ||||
| -rw-r--r-- | fs/proc/meminfo.c | 6 | ||||
| -rw-r--r-- | fs/proc/namespaces.c | 12 | ||||
| -rw-r--r-- | fs/proc/nommu.c | 2 | ||||
| -rw-r--r-- | fs/proc/proc_devtree.c | 13 | ||||
| -rw-r--r-- | fs/proc/proc_net.c | 16 | ||||
| -rw-r--r-- | fs/proc/proc_sysctl.c | 23 | ||||
| -rw-r--r-- | fs/proc/task_mmu.c | 6 | ||||
| -rw-r--r-- | fs/proc/task_nommu.c | 2 | ||||
| -rw-r--r-- | fs/proc/vmcore.c | 35 |
16 files changed, 127 insertions, 153 deletions
diff --git a/fs/proc/Makefile b/fs/proc/Makefile index 981b05601931..712f24db9600 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile | |||
| @@ -8,7 +8,8 @@ proc-y := nommu.o task_nommu.o | |||
| 8 | proc-$(CONFIG_MMU) := mmu.o task_mmu.o | 8 | proc-$(CONFIG_MMU) := mmu.o task_mmu.o |
| 9 | 9 | ||
| 10 | proc-y += inode.o root.o base.o generic.o array.o \ | 10 | proc-y += inode.o root.o base.o generic.o array.o \ |
| 11 | proc_tty.o fd.o | 11 | fd.o |
| 12 | proc-$(CONFIG_TTY) += proc_tty.o | ||
| 12 | proc-y += cmdline.o | 13 | proc-y += cmdline.o |
| 13 | proc-y += consoles.o | 14 | proc-y += consoles.o |
| 14 | proc-y += cpuinfo.o | 15 | proc-y += cpuinfo.o |
diff --git a/fs/proc/array.c b/fs/proc/array.c index 6a91e6ffbcbd..f7ed9ee46eb9 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
| @@ -449,7 +449,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
| 449 | do { | 449 | do { |
| 450 | min_flt += t->min_flt; | 450 | min_flt += t->min_flt; |
| 451 | maj_flt += t->maj_flt; | 451 | maj_flt += t->maj_flt; |
| 452 | gtime += t->gtime; | 452 | gtime += task_gtime(t); |
| 453 | t = next_thread(t); | 453 | t = next_thread(t); |
| 454 | } while (t != task); | 454 | } while (t != task); |
| 455 | 455 | ||
| @@ -472,7 +472,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
| 472 | min_flt = task->min_flt; | 472 | min_flt = task->min_flt; |
| 473 | maj_flt = task->maj_flt; | 473 | maj_flt = task->maj_flt; |
| 474 | task_cputime_adjusted(task, &utime, &stime); | 474 | task_cputime_adjusted(task, &utime, &stime); |
| 475 | gtime = task->gtime; | 475 | gtime = task_gtime(task); |
| 476 | } | 476 | } |
| 477 | 477 | ||
| 478 | /* scale priority and nice values from timeslices to -20..20 */ | 478 | /* scale priority and nice values from timeslices to -20..20 */ |
diff --git a/fs/proc/base.c b/fs/proc/base.c index 9b43ff77a51e..69078c7cef1f 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
| @@ -73,6 +73,7 @@ | |||
| 73 | #include <linux/security.h> | 73 | #include <linux/security.h> |
| 74 | #include <linux/ptrace.h> | 74 | #include <linux/ptrace.h> |
| 75 | #include <linux/tracehook.h> | 75 | #include <linux/tracehook.h> |
| 76 | #include <linux/printk.h> | ||
| 76 | #include <linux/cgroup.h> | 77 | #include <linux/cgroup.h> |
| 77 | #include <linux/cpuset.h> | 78 | #include <linux/cpuset.h> |
| 78 | #include <linux/audit.h> | 79 | #include <linux/audit.h> |
| @@ -383,7 +384,7 @@ static int lstats_open(struct inode *inode, struct file *file) | |||
| 383 | static ssize_t lstats_write(struct file *file, const char __user *buf, | 384 | static ssize_t lstats_write(struct file *file, const char __user *buf, |
| 384 | size_t count, loff_t *offs) | 385 | size_t count, loff_t *offs) |
| 385 | { | 386 | { |
| 386 | struct task_struct *task = get_proc_task(file->f_dentry->d_inode); | 387 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 387 | 388 | ||
| 388 | if (!task) | 389 | if (!task) |
| 389 | return -ESRCH; | 390 | return -ESRCH; |
| @@ -602,7 +603,7 @@ static const struct inode_operations proc_def_inode_operations = { | |||
| 602 | static ssize_t proc_info_read(struct file * file, char __user * buf, | 603 | static ssize_t proc_info_read(struct file * file, char __user * buf, |
| 603 | size_t count, loff_t *ppos) | 604 | size_t count, loff_t *ppos) |
| 604 | { | 605 | { |
| 605 | struct inode * inode = file->f_path.dentry->d_inode; | 606 | struct inode * inode = file_inode(file); |
| 606 | unsigned long page; | 607 | unsigned long page; |
| 607 | ssize_t length; | 608 | ssize_t length; |
| 608 | struct task_struct *task = get_proc_task(inode); | 609 | struct task_struct *task = get_proc_task(inode); |
| @@ -668,7 +669,7 @@ static const struct file_operations proc_single_file_operations = { | |||
| 668 | 669 | ||
| 669 | static int __mem_open(struct inode *inode, struct file *file, unsigned int mode) | 670 | static int __mem_open(struct inode *inode, struct file *file, unsigned int mode) |
| 670 | { | 671 | { |
| 671 | struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); | 672 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 672 | struct mm_struct *mm; | 673 | struct mm_struct *mm; |
| 673 | 674 | ||
| 674 | if (!task) | 675 | if (!task) |
| @@ -869,7 +870,7 @@ static const struct file_operations proc_environ_operations = { | |||
| 869 | static ssize_t oom_adj_read(struct file *file, char __user *buf, size_t count, | 870 | static ssize_t oom_adj_read(struct file *file, char __user *buf, size_t count, |
| 870 | loff_t *ppos) | 871 | loff_t *ppos) |
| 871 | { | 872 | { |
| 872 | struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); | 873 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 873 | char buffer[PROC_NUMBUF]; | 874 | char buffer[PROC_NUMBUF]; |
| 874 | int oom_adj = OOM_ADJUST_MIN; | 875 | int oom_adj = OOM_ADJUST_MIN; |
| 875 | size_t len; | 876 | size_t len; |
| @@ -916,7 +917,7 @@ static ssize_t oom_adj_write(struct file *file, const char __user *buf, | |||
| 916 | goto out; | 917 | goto out; |
| 917 | } | 918 | } |
| 918 | 919 | ||
| 919 | task = get_proc_task(file->f_path.dentry->d_inode); | 920 | task = get_proc_task(file_inode(file)); |
| 920 | if (!task) { | 921 | if (!task) { |
| 921 | err = -ESRCH; | 922 | err = -ESRCH; |
| 922 | goto out; | 923 | goto out; |
| @@ -952,7 +953,7 @@ static ssize_t oom_adj_write(struct file *file, const char __user *buf, | |||
| 952 | * /proc/pid/oom_adj is provided for legacy purposes, ask users to use | 953 | * /proc/pid/oom_adj is provided for legacy purposes, ask users to use |
| 953 | * /proc/pid/oom_score_adj instead. | 954 | * /proc/pid/oom_score_adj instead. |
| 954 | */ | 955 | */ |
| 955 | printk_once(KERN_WARNING "%s (%d): /proc/%d/oom_adj is deprecated, please use /proc/%d/oom_score_adj instead.\n", | 956 | pr_warn_once("%s (%d): /proc/%d/oom_adj is deprecated, please use /proc/%d/oom_score_adj instead.\n", |
| 956 | current->comm, task_pid_nr(current), task_pid_nr(task), | 957 | current->comm, task_pid_nr(current), task_pid_nr(task), |
| 957 | task_pid_nr(task)); | 958 | task_pid_nr(task)); |
| 958 | 959 | ||
| @@ -976,7 +977,7 @@ static const struct file_operations proc_oom_adj_operations = { | |||
| 976 | static ssize_t oom_score_adj_read(struct file *file, char __user *buf, | 977 | static ssize_t oom_score_adj_read(struct file *file, char __user *buf, |
| 977 | size_t count, loff_t *ppos) | 978 | size_t count, loff_t *ppos) |
| 978 | { | 979 | { |
| 979 | struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); | 980 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 980 | char buffer[PROC_NUMBUF]; | 981 | char buffer[PROC_NUMBUF]; |
| 981 | short oom_score_adj = OOM_SCORE_ADJ_MIN; | 982 | short oom_score_adj = OOM_SCORE_ADJ_MIN; |
| 982 | unsigned long flags; | 983 | unsigned long flags; |
| @@ -1019,7 +1020,7 @@ static ssize_t oom_score_adj_write(struct file *file, const char __user *buf, | |||
| 1019 | goto out; | 1020 | goto out; |
| 1020 | } | 1021 | } |
| 1021 | 1022 | ||
| 1022 | task = get_proc_task(file->f_path.dentry->d_inode); | 1023 | task = get_proc_task(file_inode(file)); |
| 1023 | if (!task) { | 1024 | if (!task) { |
| 1024 | err = -ESRCH; | 1025 | err = -ESRCH; |
| 1025 | goto out; | 1026 | goto out; |
| @@ -1067,7 +1068,7 @@ static const struct file_operations proc_oom_score_adj_operations = { | |||
| 1067 | static ssize_t proc_loginuid_read(struct file * file, char __user * buf, | 1068 | static ssize_t proc_loginuid_read(struct file * file, char __user * buf, |
| 1068 | size_t count, loff_t *ppos) | 1069 | size_t count, loff_t *ppos) |
| 1069 | { | 1070 | { |
| 1070 | struct inode * inode = file->f_path.dentry->d_inode; | 1071 | struct inode * inode = file_inode(file); |
| 1071 | struct task_struct *task = get_proc_task(inode); | 1072 | struct task_struct *task = get_proc_task(inode); |
| 1072 | ssize_t length; | 1073 | ssize_t length; |
| 1073 | char tmpbuf[TMPBUFLEN]; | 1074 | char tmpbuf[TMPBUFLEN]; |
| @@ -1084,7 +1085,7 @@ static ssize_t proc_loginuid_read(struct file * file, char __user * buf, | |||
| 1084 | static ssize_t proc_loginuid_write(struct file * file, const char __user * buf, | 1085 | static ssize_t proc_loginuid_write(struct file * file, const char __user * buf, |
| 1085 | size_t count, loff_t *ppos) | 1086 | size_t count, loff_t *ppos) |
| 1086 | { | 1087 | { |
| 1087 | struct inode * inode = file->f_path.dentry->d_inode; | 1088 | struct inode * inode = file_inode(file); |
| 1088 | char *page, *tmp; | 1089 | char *page, *tmp; |
| 1089 | ssize_t length; | 1090 | ssize_t length; |
| 1090 | uid_t loginuid; | 1091 | uid_t loginuid; |
| @@ -1142,7 +1143,7 @@ static const struct file_operations proc_loginuid_operations = { | |||
| 1142 | static ssize_t proc_sessionid_read(struct file * file, char __user * buf, | 1143 | static ssize_t proc_sessionid_read(struct file * file, char __user * buf, |
| 1143 | size_t count, loff_t *ppos) | 1144 | size_t count, loff_t *ppos) |
| 1144 | { | 1145 | { |
| 1145 | struct inode * inode = file->f_path.dentry->d_inode; | 1146 | struct inode * inode = file_inode(file); |
| 1146 | struct task_struct *task = get_proc_task(inode); | 1147 | struct task_struct *task = get_proc_task(inode); |
| 1147 | ssize_t length; | 1148 | ssize_t length; |
| 1148 | char tmpbuf[TMPBUFLEN]; | 1149 | char tmpbuf[TMPBUFLEN]; |
| @@ -1165,7 +1166,7 @@ static const struct file_operations proc_sessionid_operations = { | |||
| 1165 | static ssize_t proc_fault_inject_read(struct file * file, char __user * buf, | 1166 | static ssize_t proc_fault_inject_read(struct file * file, char __user * buf, |
| 1166 | size_t count, loff_t *ppos) | 1167 | size_t count, loff_t *ppos) |
| 1167 | { | 1168 | { |
| 1168 | struct task_struct *task = get_proc_task(file->f_dentry->d_inode); | 1169 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 1169 | char buffer[PROC_NUMBUF]; | 1170 | char buffer[PROC_NUMBUF]; |
| 1170 | size_t len; | 1171 | size_t len; |
| 1171 | int make_it_fail; | 1172 | int make_it_fail; |
| @@ -1197,7 +1198,7 @@ static ssize_t proc_fault_inject_write(struct file * file, | |||
| 1197 | make_it_fail = simple_strtol(strstrip(buffer), &end, 0); | 1198 | make_it_fail = simple_strtol(strstrip(buffer), &end, 0); |
| 1198 | if (*end) | 1199 | if (*end) |
| 1199 | return -EINVAL; | 1200 | return -EINVAL; |
| 1200 | task = get_proc_task(file->f_dentry->d_inode); | 1201 | task = get_proc_task(file_inode(file)); |
| 1201 | if (!task) | 1202 | if (!task) |
| 1202 | return -ESRCH; | 1203 | return -ESRCH; |
| 1203 | task->make_it_fail = make_it_fail; | 1204 | task->make_it_fail = make_it_fail; |
| @@ -1237,7 +1238,7 @@ static ssize_t | |||
| 1237 | sched_write(struct file *file, const char __user *buf, | 1238 | sched_write(struct file *file, const char __user *buf, |
| 1238 | size_t count, loff_t *offset) | 1239 | size_t count, loff_t *offset) |
| 1239 | { | 1240 | { |
| 1240 | struct inode *inode = file->f_path.dentry->d_inode; | 1241 | struct inode *inode = file_inode(file); |
| 1241 | struct task_struct *p; | 1242 | struct task_struct *p; |
| 1242 | 1243 | ||
| 1243 | p = get_proc_task(inode); | 1244 | p = get_proc_task(inode); |
| @@ -1288,7 +1289,7 @@ static ssize_t | |||
| 1288 | sched_autogroup_write(struct file *file, const char __user *buf, | 1289 | sched_autogroup_write(struct file *file, const char __user *buf, |
| 1289 | size_t count, loff_t *offset) | 1290 | size_t count, loff_t *offset) |
| 1290 | { | 1291 | { |
| 1291 | struct inode *inode = file->f_path.dentry->d_inode; | 1292 | struct inode *inode = file_inode(file); |
| 1292 | struct task_struct *p; | 1293 | struct task_struct *p; |
| 1293 | char buffer[PROC_NUMBUF]; | 1294 | char buffer[PROC_NUMBUF]; |
| 1294 | int nice; | 1295 | int nice; |
| @@ -1343,7 +1344,7 @@ static const struct file_operations proc_pid_sched_autogroup_operations = { | |||
| 1343 | static ssize_t comm_write(struct file *file, const char __user *buf, | 1344 | static ssize_t comm_write(struct file *file, const char __user *buf, |
| 1344 | size_t count, loff_t *offset) | 1345 | size_t count, loff_t *offset) |
| 1345 | { | 1346 | { |
| 1346 | struct inode *inode = file->f_path.dentry->d_inode; | 1347 | struct inode *inode = file_inode(file); |
| 1347 | struct task_struct *p; | 1348 | struct task_struct *p; |
| 1348 | char buffer[TASK_COMM_LEN]; | 1349 | char buffer[TASK_COMM_LEN]; |
| 1349 | 1350 | ||
| @@ -1711,7 +1712,7 @@ static int map_files_d_revalidate(struct dentry *dentry, unsigned int flags) | |||
| 1711 | return -ECHILD; | 1712 | return -ECHILD; |
| 1712 | 1713 | ||
| 1713 | if (!capable(CAP_SYS_ADMIN)) { | 1714 | if (!capable(CAP_SYS_ADMIN)) { |
| 1714 | status = -EACCES; | 1715 | status = -EPERM; |
| 1715 | goto out_notask; | 1716 | goto out_notask; |
| 1716 | } | 1717 | } |
| 1717 | 1718 | ||
| @@ -1844,7 +1845,7 @@ static struct dentry *proc_map_files_lookup(struct inode *dir, | |||
| 1844 | struct dentry *result; | 1845 | struct dentry *result; |
| 1845 | struct mm_struct *mm; | 1846 | struct mm_struct *mm; |
| 1846 | 1847 | ||
| 1847 | result = ERR_PTR(-EACCES); | 1848 | result = ERR_PTR(-EPERM); |
| 1848 | if (!capable(CAP_SYS_ADMIN)) | 1849 | if (!capable(CAP_SYS_ADMIN)) |
| 1849 | goto out; | 1850 | goto out; |
| 1850 | 1851 | ||
| @@ -1900,7 +1901,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
| 1900 | ino_t ino; | 1901 | ino_t ino; |
| 1901 | int ret; | 1902 | int ret; |
| 1902 | 1903 | ||
| 1903 | ret = -EACCES; | 1904 | ret = -EPERM; |
| 1904 | if (!capable(CAP_SYS_ADMIN)) | 1905 | if (!capable(CAP_SYS_ADMIN)) |
| 1905 | goto out; | 1906 | goto out; |
| 1906 | 1907 | ||
| @@ -2146,7 +2147,7 @@ out_no_task: | |||
| 2146 | static ssize_t proc_pid_attr_read(struct file * file, char __user * buf, | 2147 | static ssize_t proc_pid_attr_read(struct file * file, char __user * buf, |
| 2147 | size_t count, loff_t *ppos) | 2148 | size_t count, loff_t *ppos) |
| 2148 | { | 2149 | { |
| 2149 | struct inode * inode = file->f_path.dentry->d_inode; | 2150 | struct inode * inode = file_inode(file); |
| 2150 | char *p = NULL; | 2151 | char *p = NULL; |
| 2151 | ssize_t length; | 2152 | ssize_t length; |
| 2152 | struct task_struct *task = get_proc_task(inode); | 2153 | struct task_struct *task = get_proc_task(inode); |
| @@ -2167,7 +2168,7 @@ static ssize_t proc_pid_attr_read(struct file * file, char __user * buf, | |||
| 2167 | static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf, | 2168 | static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf, |
| 2168 | size_t count, loff_t *ppos) | 2169 | size_t count, loff_t *ppos) |
| 2169 | { | 2170 | { |
| 2170 | struct inode * inode = file->f_path.dentry->d_inode; | 2171 | struct inode * inode = file_inode(file); |
| 2171 | char *page; | 2172 | char *page; |
| 2172 | ssize_t length; | 2173 | ssize_t length; |
| 2173 | struct task_struct *task = get_proc_task(inode); | 2174 | struct task_struct *task = get_proc_task(inode); |
| @@ -2256,7 +2257,7 @@ static const struct inode_operations proc_attr_dir_inode_operations = { | |||
| 2256 | static ssize_t proc_coredump_filter_read(struct file *file, char __user *buf, | 2257 | static ssize_t proc_coredump_filter_read(struct file *file, char __user *buf, |
| 2257 | size_t count, loff_t *ppos) | 2258 | size_t count, loff_t *ppos) |
| 2258 | { | 2259 | { |
| 2259 | struct task_struct *task = get_proc_task(file->f_dentry->d_inode); | 2260 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 2260 | struct mm_struct *mm; | 2261 | struct mm_struct *mm; |
| 2261 | char buffer[PROC_NUMBUF]; | 2262 | char buffer[PROC_NUMBUF]; |
| 2262 | size_t len; | 2263 | size_t len; |
| @@ -2308,7 +2309,7 @@ static ssize_t proc_coredump_filter_write(struct file *file, | |||
| 2308 | goto out_no_task; | 2309 | goto out_no_task; |
| 2309 | 2310 | ||
| 2310 | ret = -ESRCH; | 2311 | ret = -ESRCH; |
| 2311 | task = get_proc_task(file->f_dentry->d_inode); | 2312 | task = get_proc_task(file_inode(file)); |
| 2312 | if (!task) | 2313 | if (!task) |
| 2313 | goto out_no_task; | 2314 | goto out_no_task; |
| 2314 | 2315 | ||
| @@ -2618,6 +2619,7 @@ static void proc_flush_task_mnt(struct vfsmount *mnt, pid_t pid, pid_t tgid) | |||
| 2618 | 2619 | ||
| 2619 | name.name = buf; | 2620 | name.name = buf; |
| 2620 | name.len = snprintf(buf, sizeof(buf), "%d", pid); | 2621 | name.len = snprintf(buf, sizeof(buf), "%d", pid); |
| 2622 | /* no ->d_hash() rejects on procfs */ | ||
| 2621 | dentry = d_hash_and_lookup(mnt->mnt_root, &name); | 2623 | dentry = d_hash_and_lookup(mnt->mnt_root, &name); |
| 2622 | if (dentry) { | 2624 | if (dentry) { |
| 2623 | shrink_dcache_parent(dentry); | 2625 | shrink_dcache_parent(dentry); |
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 76ddae83daa5..4b3b3ffb52f1 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
| 16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
| 17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 18 | #include <linux/printk.h> | ||
| 18 | #include <linux/mount.h> | 19 | #include <linux/mount.h> |
| 19 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 20 | #include <linux/idr.h> | 21 | #include <linux/idr.h> |
| @@ -42,7 +43,7 @@ static ssize_t | |||
| 42 | __proc_file_read(struct file *file, char __user *buf, size_t nbytes, | 43 | __proc_file_read(struct file *file, char __user *buf, size_t nbytes, |
| 43 | loff_t *ppos) | 44 | loff_t *ppos) |
| 44 | { | 45 | { |
| 45 | struct inode * inode = file->f_path.dentry->d_inode; | 46 | struct inode * inode = file_inode(file); |
| 46 | char *page; | 47 | char *page; |
| 47 | ssize_t retval=0; | 48 | ssize_t retval=0; |
| 48 | int eof=0; | 49 | int eof=0; |
| @@ -132,11 +133,8 @@ __proc_file_read(struct file *file, char __user *buf, size_t nbytes, | |||
| 132 | } | 133 | } |
| 133 | 134 | ||
| 134 | if (start == NULL) { | 135 | if (start == NULL) { |
| 135 | if (n > PAGE_SIZE) { | 136 | if (n > PAGE_SIZE) /* Apparent buffer overflow */ |
| 136 | printk(KERN_ERR | ||
| 137 | "proc_file_read: Apparent buffer overflow!\n"); | ||
| 138 | n = PAGE_SIZE; | 137 | n = PAGE_SIZE; |
| 139 | } | ||
| 140 | n -= *ppos; | 138 | n -= *ppos; |
| 141 | if (n <= 0) | 139 | if (n <= 0) |
| 142 | break; | 140 | break; |
| @@ -144,26 +142,19 @@ __proc_file_read(struct file *file, char __user *buf, size_t nbytes, | |||
| 144 | n = count; | 142 | n = count; |
| 145 | start = page + *ppos; | 143 | start = page + *ppos; |
| 146 | } else if (start < page) { | 144 | } else if (start < page) { |
| 147 | if (n > PAGE_SIZE) { | 145 | if (n > PAGE_SIZE) /* Apparent buffer overflow */ |
| 148 | printk(KERN_ERR | ||
| 149 | "proc_file_read: Apparent buffer overflow!\n"); | ||
| 150 | n = PAGE_SIZE; | 146 | n = PAGE_SIZE; |
| 151 | } | ||
| 152 | if (n > count) { | 147 | if (n > count) { |
| 153 | /* | 148 | /* |
| 154 | * Don't reduce n because doing so might | 149 | * Don't reduce n because doing so might |
| 155 | * cut off part of a data block. | 150 | * cut off part of a data block. |
| 156 | */ | 151 | */ |
| 157 | printk(KERN_WARNING | 152 | pr_warn("proc_file_read: count exceeded\n"); |
| 158 | "proc_file_read: Read count exceeded\n"); | ||
| 159 | } | 153 | } |
| 160 | } else /* start >= page */ { | 154 | } else /* start >= page */ { |
| 161 | unsigned long startoff = (unsigned long)(start - page); | 155 | unsigned long startoff = (unsigned long)(start - page); |
| 162 | if (n > (PAGE_SIZE - startoff)) { | 156 | if (n > (PAGE_SIZE - startoff)) /* buffer overflow? */ |
| 163 | printk(KERN_ERR | ||
| 164 | "proc_file_read: Apparent buffer overflow!\n"); | ||
| 165 | n = PAGE_SIZE - startoff; | 157 | n = PAGE_SIZE - startoff; |
| 166 | } | ||
| 167 | if (n > count) | 158 | if (n > count) |
| 168 | n = count; | 159 | n = count; |
| 169 | } | 160 | } |
| @@ -188,7 +179,7 @@ static ssize_t | |||
| 188 | proc_file_read(struct file *file, char __user *buf, size_t nbytes, | 179 | proc_file_read(struct file *file, char __user *buf, size_t nbytes, |
| 189 | loff_t *ppos) | 180 | loff_t *ppos) |
| 190 | { | 181 | { |
| 191 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 182 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 192 | ssize_t rv = -EIO; | 183 | ssize_t rv = -EIO; |
| 193 | 184 | ||
| 194 | spin_lock(&pde->pde_unload_lock); | 185 | spin_lock(&pde->pde_unload_lock); |
| @@ -209,7 +200,7 @@ static ssize_t | |||
| 209 | proc_file_write(struct file *file, const char __user *buffer, | 200 | proc_file_write(struct file *file, const char __user *buffer, |
| 210 | size_t count, loff_t *ppos) | 201 | size_t count, loff_t *ppos) |
| 211 | { | 202 | { |
| 212 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 203 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 213 | ssize_t rv = -EIO; | 204 | ssize_t rv = -EIO; |
| 214 | 205 | ||
| 215 | if (pde->write_proc) { | 206 | if (pde->write_proc) { |
| @@ -412,8 +403,7 @@ static const struct dentry_operations proc_dentry_operations = | |||
| 412 | struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, | 403 | struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, |
| 413 | struct dentry *dentry) | 404 | struct dentry *dentry) |
| 414 | { | 405 | { |
| 415 | struct inode *inode = NULL; | 406 | struct inode *inode; |
| 416 | int error = -ENOENT; | ||
| 417 | 407 | ||
| 418 | spin_lock(&proc_subdir_lock); | 408 | spin_lock(&proc_subdir_lock); |
| 419 | for (de = de->subdir; de ; de = de->next) { | 409 | for (de = de->subdir; de ; de = de->next) { |
| @@ -422,22 +412,16 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, | |||
| 422 | if (!memcmp(dentry->d_name.name, de->name, de->namelen)) { | 412 | if (!memcmp(dentry->d_name.name, de->name, de->namelen)) { |
| 423 | pde_get(de); | 413 | pde_get(de); |
| 424 | spin_unlock(&proc_subdir_lock); | 414 | spin_unlock(&proc_subdir_lock); |
| 425 | error = -ENOMEM; | ||
| 426 | inode = proc_get_inode(dir->i_sb, de); | 415 | inode = proc_get_inode(dir->i_sb, de); |
| 427 | goto out_unlock; | 416 | if (!inode) |
| 417 | return ERR_PTR(-ENOMEM); | ||
| 418 | d_set_d_op(dentry, &proc_dentry_operations); | ||
| 419 | d_add(dentry, inode); | ||
| 420 | return NULL; | ||
| 428 | } | 421 | } |
| 429 | } | 422 | } |
| 430 | spin_unlock(&proc_subdir_lock); | 423 | spin_unlock(&proc_subdir_lock); |
| 431 | out_unlock: | 424 | return ERR_PTR(-ENOENT); |
| 432 | |||
| 433 | if (inode) { | ||
| 434 | d_set_d_op(dentry, &proc_dentry_operations); | ||
| 435 | d_add(dentry, inode); | ||
| 436 | return NULL; | ||
| 437 | } | ||
| 438 | if (de) | ||
| 439 | pde_put(de); | ||
| 440 | return ERR_PTR(error); | ||
| 441 | } | 425 | } |
| 442 | 426 | ||
| 443 | struct dentry *proc_lookup(struct inode *dir, struct dentry *dentry, | 427 | struct dentry *proc_lookup(struct inode *dir, struct dentry *dentry, |
| @@ -460,7 +444,7 @@ int proc_readdir_de(struct proc_dir_entry *de, struct file *filp, void *dirent, | |||
| 460 | { | 444 | { |
| 461 | unsigned int ino; | 445 | unsigned int ino; |
| 462 | int i; | 446 | int i; |
| 463 | struct inode *inode = filp->f_path.dentry->d_inode; | 447 | struct inode *inode = file_inode(filp); |
| 464 | int ret = 0; | 448 | int ret = 0; |
| 465 | 449 | ||
| 466 | ino = inode->i_ino; | 450 | ino = inode->i_ino; |
| @@ -522,7 +506,7 @@ out: | |||
| 522 | 506 | ||
| 523 | int proc_readdir(struct file *filp, void *dirent, filldir_t filldir) | 507 | int proc_readdir(struct file *filp, void *dirent, filldir_t filldir) |
| 524 | { | 508 | { |
| 525 | struct inode *inode = filp->f_path.dentry->d_inode; | 509 | struct inode *inode = file_inode(filp); |
| 526 | 510 | ||
| 527 | return proc_readdir_de(PDE(inode), filp, dirent, filldir); | 511 | return proc_readdir_de(PDE(inode), filp, dirent, filldir); |
| 528 | } | 512 | } |
| @@ -576,7 +560,7 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp | |||
| 576 | 560 | ||
| 577 | for (tmp = dir->subdir; tmp; tmp = tmp->next) | 561 | for (tmp = dir->subdir; tmp; tmp = tmp->next) |
| 578 | if (strcmp(tmp->name, dp->name) == 0) { | 562 | if (strcmp(tmp->name, dp->name) == 0) { |
| 579 | WARN(1, KERN_WARNING "proc_dir_entry '%s/%s' already registered\n", | 563 | WARN(1, "proc_dir_entry '%s/%s' already registered\n", |
| 580 | dir->name, dp->name); | 564 | dir->name, dp->name); |
| 581 | break; | 565 | break; |
| 582 | } | 566 | } |
| @@ -837,9 +821,9 @@ void remove_proc_entry(const char *name, struct proc_dir_entry *parent) | |||
| 837 | if (S_ISDIR(de->mode)) | 821 | if (S_ISDIR(de->mode)) |
| 838 | parent->nlink--; | 822 | parent->nlink--; |
| 839 | de->nlink = 0; | 823 | de->nlink = 0; |
| 840 | WARN(de->subdir, KERN_WARNING "%s: removing non-empty directory " | 824 | WARN(de->subdir, "%s: removing non-empty directory " |
| 841 | "'%s/%s', leaking at least '%s'\n", __func__, | 825 | "'%s/%s', leaking at least '%s'\n", __func__, |
| 842 | de->parent->name, de->name, de->subdir->name); | 826 | de->parent->name, de->name, de->subdir->name); |
| 843 | pde_put(de); | 827 | pde_put(de); |
| 844 | } | 828 | } |
| 845 | EXPORT_SYMBOL(remove_proc_entry); | 829 | EXPORT_SYMBOL(remove_proc_entry); |
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 439ae6886507..869116c2afbe 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/stat.h> | 13 | #include <linux/stat.h> |
| 14 | #include <linux/completion.h> | 14 | #include <linux/completion.h> |
| 15 | #include <linux/poll.h> | 15 | #include <linux/poll.h> |
| 16 | #include <linux/printk.h> | ||
| 16 | #include <linux/file.h> | 17 | #include <linux/file.h> |
| 17 | #include <linux/limits.h> | 18 | #include <linux/limits.h> |
| 18 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| @@ -144,7 +145,7 @@ void pde_users_dec(struct proc_dir_entry *pde) | |||
| 144 | 145 | ||
| 145 | static loff_t proc_reg_llseek(struct file *file, loff_t offset, int whence) | 146 | static loff_t proc_reg_llseek(struct file *file, loff_t offset, int whence) |
| 146 | { | 147 | { |
| 147 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 148 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 148 | loff_t rv = -EINVAL; | 149 | loff_t rv = -EINVAL; |
| 149 | loff_t (*llseek)(struct file *, loff_t, int); | 150 | loff_t (*llseek)(struct file *, loff_t, int); |
| 150 | 151 | ||
| @@ -179,7 +180,7 @@ static loff_t proc_reg_llseek(struct file *file, loff_t offset, int whence) | |||
| 179 | 180 | ||
| 180 | static ssize_t proc_reg_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) | 181 | static ssize_t proc_reg_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) |
| 181 | { | 182 | { |
| 182 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 183 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 183 | ssize_t rv = -EIO; | 184 | ssize_t rv = -EIO; |
| 184 | ssize_t (*read)(struct file *, char __user *, size_t, loff_t *); | 185 | ssize_t (*read)(struct file *, char __user *, size_t, loff_t *); |
| 185 | 186 | ||
| @@ -201,7 +202,7 @@ static ssize_t proc_reg_read(struct file *file, char __user *buf, size_t count, | |||
| 201 | 202 | ||
| 202 | static ssize_t proc_reg_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) | 203 | static ssize_t proc_reg_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) |
| 203 | { | 204 | { |
| 204 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 205 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 205 | ssize_t rv = -EIO; | 206 | ssize_t rv = -EIO; |
| 206 | ssize_t (*write)(struct file *, const char __user *, size_t, loff_t *); | 207 | ssize_t (*write)(struct file *, const char __user *, size_t, loff_t *); |
| 207 | 208 | ||
| @@ -223,7 +224,7 @@ static ssize_t proc_reg_write(struct file *file, const char __user *buf, size_t | |||
| 223 | 224 | ||
| 224 | static unsigned int proc_reg_poll(struct file *file, struct poll_table_struct *pts) | 225 | static unsigned int proc_reg_poll(struct file *file, struct poll_table_struct *pts) |
| 225 | { | 226 | { |
| 226 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 227 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 227 | unsigned int rv = DEFAULT_POLLMASK; | 228 | unsigned int rv = DEFAULT_POLLMASK; |
| 228 | unsigned int (*poll)(struct file *, struct poll_table_struct *); | 229 | unsigned int (*poll)(struct file *, struct poll_table_struct *); |
| 229 | 230 | ||
| @@ -245,7 +246,7 @@ static unsigned int proc_reg_poll(struct file *file, struct poll_table_struct *p | |||
| 245 | 246 | ||
| 246 | static long proc_reg_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 247 | static long proc_reg_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 247 | { | 248 | { |
| 248 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 249 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 249 | long rv = -ENOTTY; | 250 | long rv = -ENOTTY; |
| 250 | long (*ioctl)(struct file *, unsigned int, unsigned long); | 251 | long (*ioctl)(struct file *, unsigned int, unsigned long); |
| 251 | 252 | ||
| @@ -268,7 +269,7 @@ static long proc_reg_unlocked_ioctl(struct file *file, unsigned int cmd, unsigne | |||
| 268 | #ifdef CONFIG_COMPAT | 269 | #ifdef CONFIG_COMPAT |
| 269 | static long proc_reg_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 270 | static long proc_reg_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 270 | { | 271 | { |
| 271 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 272 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 272 | long rv = -ENOTTY; | 273 | long rv = -ENOTTY; |
| 273 | long (*compat_ioctl)(struct file *, unsigned int, unsigned long); | 274 | long (*compat_ioctl)(struct file *, unsigned int, unsigned long); |
| 274 | 275 | ||
| @@ -291,7 +292,7 @@ static long proc_reg_compat_ioctl(struct file *file, unsigned int cmd, unsigned | |||
| 291 | 292 | ||
| 292 | static int proc_reg_mmap(struct file *file, struct vm_area_struct *vma) | 293 | static int proc_reg_mmap(struct file *file, struct vm_area_struct *vma) |
| 293 | { | 294 | { |
| 294 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); | 295 | struct proc_dir_entry *pde = PDE(file_inode(file)); |
| 295 | int rv = -EIO; | 296 | int rv = -EIO; |
| 296 | int (*mmap)(struct file *, struct vm_area_struct *); | 297 | int (*mmap)(struct file *, struct vm_area_struct *); |
| 297 | 298 | ||
| @@ -445,12 +446,10 @@ static const struct file_operations proc_reg_file_ops_no_compat = { | |||
| 445 | 446 | ||
| 446 | struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) | 447 | struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) |
| 447 | { | 448 | { |
| 448 | struct inode * inode; | 449 | struct inode *inode = new_inode_pseudo(sb); |
| 449 | 450 | ||
| 450 | inode = iget_locked(sb, de->low_ino); | 451 | if (inode) { |
| 451 | if (!inode) | 452 | inode->i_ino = de->low_ino; |
| 452 | return NULL; | ||
| 453 | if (inode->i_state & I_NEW) { | ||
| 454 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 453 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 455 | PROC_I(inode)->pde = de; | 454 | PROC_I(inode)->pde = de; |
| 456 | 455 | ||
| @@ -478,14 +477,15 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) | |||
| 478 | inode->i_fop = de->proc_fops; | 477 | inode->i_fop = de->proc_fops; |
| 479 | } | 478 | } |
| 480 | } | 479 | } |
| 481 | unlock_new_inode(inode); | ||
| 482 | } else | 480 | } else |
| 483 | pde_put(de); | 481 | pde_put(de); |
| 484 | return inode; | 482 | return inode; |
| 485 | } | 483 | } |
| 486 | 484 | ||
| 487 | int proc_fill_super(struct super_block *s) | 485 | int proc_fill_super(struct super_block *s) |
| 488 | { | 486 | { |
| 487 | struct inode *root_inode; | ||
| 488 | |||
| 489 | s->s_flags |= MS_NODIRATIME | MS_NOSUID | MS_NOEXEC; | 489 | s->s_flags |= MS_NODIRATIME | MS_NOSUID | MS_NOEXEC; |
| 490 | s->s_blocksize = 1024; | 490 | s->s_blocksize = 1024; |
| 491 | s->s_blocksize_bits = 10; | 491 | s->s_blocksize_bits = 10; |
| @@ -494,11 +494,17 @@ int proc_fill_super(struct super_block *s) | |||
| 494 | s->s_time_gran = 1; | 494 | s->s_time_gran = 1; |
| 495 | 495 | ||
| 496 | pde_get(&proc_root); | 496 | pde_get(&proc_root); |
| 497 | s->s_root = d_make_root(proc_get_inode(s, &proc_root)); | 497 | root_inode = proc_get_inode(s, &proc_root); |
| 498 | if (s->s_root) | 498 | if (!root_inode) { |
| 499 | return 0; | 499 | pr_err("proc_fill_super: get root inode failed\n"); |
| 500 | return -ENOMEM; | ||
| 501 | } | ||
| 500 | 502 | ||
| 501 | printk("proc_read_super: get root inode failed\n"); | 503 | s->s_root = d_make_root(root_inode); |
| 502 | pde_put(&proc_root); | 504 | if (!s->s_root) { |
| 503 | return -ENOMEM; | 505 | pr_err("proc_fill_super: allocate dentry failed\n"); |
| 506 | return -ENOMEM; | ||
| 507 | } | ||
| 508 | |||
| 509 | return 0; | ||
| 504 | } | 510 | } |
diff --git a/fs/proc/internal.h b/fs/proc/internal.h index 252544c05207..85ff3a4598b3 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
| 13 | #include <linux/proc_fs.h> | 13 | #include <linux/proc_fs.h> |
| 14 | #include <linux/binfmts.h> | ||
| 14 | struct ctl_table_header; | 15 | struct ctl_table_header; |
| 15 | struct mempolicy; | 16 | struct mempolicy; |
| 16 | 17 | ||
| @@ -108,7 +109,7 @@ static inline int task_dumpable(struct task_struct *task) | |||
| 108 | if (mm) | 109 | if (mm) |
| 109 | dumpable = get_dumpable(mm); | 110 | dumpable = get_dumpable(mm); |
| 110 | task_unlock(task); | 111 | task_unlock(task); |
| 111 | if (dumpable == SUID_DUMPABLE_ENABLED) | 112 | if (dumpable == SUID_DUMP_USER) |
| 112 | return 1; | 113 | return 1; |
| 113 | return 0; | 114 | return 0; |
| 114 | } | 115 | } |
diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c index e96d4f18ca3a..eda6f017f272 100644 --- a/fs/proc/kcore.c +++ b/fs/proc/kcore.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/elfcore.h> | 17 | #include <linux/elfcore.h> |
| 18 | #include <linux/vmalloc.h> | 18 | #include <linux/vmalloc.h> |
| 19 | #include <linux/highmem.h> | 19 | #include <linux/highmem.h> |
| 20 | #include <linux/printk.h> | ||
| 20 | #include <linux/bootmem.h> | 21 | #include <linux/bootmem.h> |
| 21 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 22 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
| @@ -619,7 +620,7 @@ static int __init proc_kcore_init(void) | |||
| 619 | proc_root_kcore = proc_create("kcore", S_IRUSR, NULL, | 620 | proc_root_kcore = proc_create("kcore", S_IRUSR, NULL, |
| 620 | &proc_kcore_operations); | 621 | &proc_kcore_operations); |
| 621 | if (!proc_root_kcore) { | 622 | if (!proc_root_kcore) { |
| 622 | printk(KERN_ERR "couldn't create /proc/kcore\n"); | 623 | pr_err("couldn't create /proc/kcore\n"); |
| 623 | return 0; /* Always returns 0. */ | 624 | return 0; /* Always returns 0. */ |
| 624 | } | 625 | } |
| 625 | /* Store text area if it's special */ | 626 | /* Store text area if it's special */ |
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index 80e4645f7990..1efaaa19c4f3 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c | |||
| @@ -40,7 +40,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) | |||
| 40 | * sysctl_overcommit_ratio / 100) + total_swap_pages; | 40 | * sysctl_overcommit_ratio / 100) + total_swap_pages; |
| 41 | 41 | ||
| 42 | cached = global_page_state(NR_FILE_PAGES) - | 42 | cached = global_page_state(NR_FILE_PAGES) - |
| 43 | total_swapcache_pages - i.bufferram; | 43 | total_swapcache_pages() - i.bufferram; |
| 44 | if (cached < 0) | 44 | if (cached < 0) |
| 45 | cached = 0; | 45 | cached = 0; |
| 46 | 46 | ||
| @@ -109,7 +109,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) | |||
| 109 | K(i.freeram), | 109 | K(i.freeram), |
| 110 | K(i.bufferram), | 110 | K(i.bufferram), |
| 111 | K(cached), | 111 | K(cached), |
| 112 | K(total_swapcache_pages), | 112 | K(total_swapcache_pages()), |
| 113 | K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]), | 113 | K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]), |
| 114 | K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]), | 114 | K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]), |
| 115 | K(pages[LRU_ACTIVE_ANON]), | 115 | K(pages[LRU_ACTIVE_ANON]), |
| @@ -158,7 +158,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) | |||
| 158 | vmi.used >> 10, | 158 | vmi.used >> 10, |
| 159 | vmi.largest_chunk >> 10 | 159 | vmi.largest_chunk >> 10 |
| 160 | #ifdef CONFIG_MEMORY_FAILURE | 160 | #ifdef CONFIG_MEMORY_FAILURE |
| 161 | ,atomic_long_read(&mce_bad_pages) << (PAGE_SHIFT - 10) | 161 | ,atomic_long_read(&num_poisoned_pages) << (PAGE_SHIFT - 10) |
| 162 | #endif | 162 | #endif |
| 163 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 163 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 164 | ,K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) * | 164 | ,K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) * |
diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c index b7a47196c8c3..66b51c0383da 100644 --- a/fs/proc/namespaces.c +++ b/fs/proc/namespaces.c | |||
| @@ -118,7 +118,7 @@ static void *proc_ns_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
| 118 | struct super_block *sb = inode->i_sb; | 118 | struct super_block *sb = inode->i_sb; |
| 119 | struct proc_inode *ei = PROC_I(inode); | 119 | struct proc_inode *ei = PROC_I(inode); |
| 120 | struct task_struct *task; | 120 | struct task_struct *task; |
| 121 | struct dentry *ns_dentry; | 121 | struct path ns_path; |
| 122 | void *error = ERR_PTR(-EACCES); | 122 | void *error = ERR_PTR(-EACCES); |
| 123 | 123 | ||
| 124 | task = get_proc_task(inode); | 124 | task = get_proc_task(inode); |
| @@ -128,14 +128,14 @@ static void *proc_ns_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
| 128 | if (!ptrace_may_access(task, PTRACE_MODE_READ)) | 128 | if (!ptrace_may_access(task, PTRACE_MODE_READ)) |
| 129 | goto out_put_task; | 129 | goto out_put_task; |
| 130 | 130 | ||
| 131 | ns_dentry = proc_ns_get_dentry(sb, task, ei->ns_ops); | 131 | ns_path.dentry = proc_ns_get_dentry(sb, task, ei->ns_ops); |
| 132 | if (IS_ERR(ns_dentry)) { | 132 | if (IS_ERR(ns_path.dentry)) { |
| 133 | error = ERR_CAST(ns_dentry); | 133 | error = ERR_CAST(ns_path.dentry); |
| 134 | goto out_put_task; | 134 | goto out_put_task; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | dput(nd->path.dentry); | 137 | ns_path.mnt = mntget(nd->path.mnt); |
| 138 | nd->path.dentry = ns_dentry; | 138 | nd_jump_link(nd, &ns_path); |
| 139 | error = NULL; | 139 | error = NULL; |
| 140 | 140 | ||
| 141 | out_put_task: | 141 | out_put_task: |
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c index b1822dde55c2..ccfd99bd1c5a 100644 --- a/fs/proc/nommu.c +++ b/fs/proc/nommu.c | |||
| @@ -45,7 +45,7 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region) | |||
| 45 | file = region->vm_file; | 45 | file = region->vm_file; |
| 46 | 46 | ||
| 47 | if (file) { | 47 | if (file) { |
| 48 | struct inode *inode = region->vm_file->f_path.dentry->d_inode; | 48 | struct inode *inode = file_inode(region->vm_file); |
| 49 | dev = inode->i_sb->s_dev; | 49 | dev = inode->i_sb->s_dev; |
| 50 | ino = inode->i_ino; | 50 | ino = inode->i_ino; |
| 51 | } | 51 | } |
diff --git a/fs/proc/proc_devtree.c b/fs/proc/proc_devtree.c index de20ec480fa0..30b590f5bd35 100644 --- a/fs/proc/proc_devtree.c +++ b/fs/proc/proc_devtree.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <linux/time.h> | 8 | #include <linux/time.h> |
| 9 | #include <linux/proc_fs.h> | 9 | #include <linux/proc_fs.h> |
| 10 | #include <linux/seq_file.h> | 10 | #include <linux/seq_file.h> |
| 11 | #include <linux/printk.h> | ||
| 11 | #include <linux/stat.h> | 12 | #include <linux/stat.h> |
| 12 | #include <linux/string.h> | 13 | #include <linux/string.h> |
| 13 | #include <linux/of.h> | 14 | #include <linux/of.h> |
| @@ -110,8 +111,8 @@ void proc_device_tree_update_prop(struct proc_dir_entry *pde, | |||
| 110 | if (ent->data == oldprop) | 111 | if (ent->data == oldprop) |
| 111 | break; | 112 | break; |
| 112 | if (ent == NULL) { | 113 | if (ent == NULL) { |
| 113 | printk(KERN_WARNING "device-tree: property \"%s\" " | 114 | pr_warn("device-tree: property \"%s\" does not exist\n", |
| 114 | " does not exist\n", oldprop->name); | 115 | oldprop->name); |
| 115 | } else { | 116 | } else { |
| 116 | ent->data = newprop; | 117 | ent->data = newprop; |
| 117 | ent->size = newprop->length; | 118 | ent->size = newprop->length; |
| @@ -153,8 +154,8 @@ static const char *fixup_name(struct device_node *np, struct proc_dir_entry *de, | |||
| 153 | realloc: | 154 | realloc: |
| 154 | fixed_name = kmalloc(fixup_len, GFP_KERNEL); | 155 | fixed_name = kmalloc(fixup_len, GFP_KERNEL); |
| 155 | if (fixed_name == NULL) { | 156 | if (fixed_name == NULL) { |
| 156 | printk(KERN_ERR "device-tree: Out of memory trying to fixup " | 157 | pr_err("device-tree: Out of memory trying to fixup " |
| 157 | "name \"%s\"\n", name); | 158 | "name \"%s\"\n", name); |
| 158 | return name; | 159 | return name; |
| 159 | } | 160 | } |
| 160 | 161 | ||
| @@ -175,8 +176,8 @@ retry: | |||
| 175 | goto retry; | 176 | goto retry; |
| 176 | } | 177 | } |
| 177 | 178 | ||
| 178 | printk(KERN_WARNING "device-tree: Duplicate name in %s, " | 179 | pr_warn("device-tree: Duplicate name in %s, renamed to \"%s\"\n", |
| 179 | "renamed to \"%s\"\n", np->full_name, fixed_name); | 180 | np->full_name, fixed_name); |
| 180 | 181 | ||
| 181 | return fixed_name; | 182 | return fixed_name; |
| 182 | } | 183 | } |
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c index fe72cd073dea..b4ac6572474f 100644 --- a/fs/proc/proc_net.c +++ b/fs/proc/proc_net.c | |||
| @@ -163,7 +163,7 @@ static int proc_tgid_net_readdir(struct file *filp, void *dirent, | |||
| 163 | struct net *net; | 163 | struct net *net; |
| 164 | 164 | ||
| 165 | ret = -EINVAL; | 165 | ret = -EINVAL; |
| 166 | net = get_proc_task_net(filp->f_path.dentry->d_inode); | 166 | net = get_proc_task_net(file_inode(filp)); |
| 167 | if (net != NULL) { | 167 | if (net != NULL) { |
| 168 | ret = proc_readdir_de(net->proc_net, filp, dirent, filldir); | 168 | ret = proc_readdir_de(net->proc_net, filp, dirent, filldir); |
| 169 | put_net(net); | 169 | put_net(net); |
| @@ -177,20 +177,6 @@ const struct file_operations proc_net_operations = { | |||
| 177 | .readdir = proc_tgid_net_readdir, | 177 | .readdir = proc_tgid_net_readdir, |
| 178 | }; | 178 | }; |
| 179 | 179 | ||
| 180 | |||
| 181 | struct proc_dir_entry *proc_net_fops_create(struct net *net, | ||
| 182 | const char *name, umode_t mode, const struct file_operations *fops) | ||
| 183 | { | ||
| 184 | return proc_create(name, mode, net->proc_net, fops); | ||
| 185 | } | ||
| 186 | EXPORT_SYMBOL_GPL(proc_net_fops_create); | ||
| 187 | |||
| 188 | void proc_net_remove(struct net *net, const char *name) | ||
| 189 | { | ||
| 190 | remove_proc_entry(name, net->proc_net); | ||
| 191 | } | ||
| 192 | EXPORT_SYMBOL_GPL(proc_net_remove); | ||
| 193 | |||
| 194 | static __net_init int proc_net_ns_init(struct net *net) | 180 | static __net_init int proc_net_ns_init(struct net *net) |
| 195 | { | 181 | { |
| 196 | struct proc_dir_entry *netd, *net_statd; | 182 | struct proc_dir_entry *netd, *net_statd; |
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index 1827d88ad58b..ac05f33a0dde 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <linux/sysctl.h> | 5 | #include <linux/sysctl.h> |
| 6 | #include <linux/poll.h> | 6 | #include <linux/poll.h> |
| 7 | #include <linux/proc_fs.h> | 7 | #include <linux/proc_fs.h> |
| 8 | #include <linux/printk.h> | ||
| 8 | #include <linux/security.h> | 9 | #include <linux/security.h> |
| 9 | #include <linux/sched.h> | 10 | #include <linux/sched.h> |
| 10 | #include <linux/namei.h> | 11 | #include <linux/namei.h> |
| @@ -57,7 +58,7 @@ static void sysctl_print_dir(struct ctl_dir *dir) | |||
| 57 | { | 58 | { |
| 58 | if (dir->header.parent) | 59 | if (dir->header.parent) |
| 59 | sysctl_print_dir(dir->header.parent); | 60 | sysctl_print_dir(dir->header.parent); |
| 60 | printk(KERN_CONT "%s/", dir->header.ctl_table[0].procname); | 61 | pr_cont("%s/", dir->header.ctl_table[0].procname); |
| 61 | } | 62 | } |
| 62 | 63 | ||
| 63 | static int namecmp(const char *name1, int len1, const char *name2, int len2) | 64 | static int namecmp(const char *name1, int len1, const char *name2, int len2) |
| @@ -134,9 +135,9 @@ static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry) | |||
| 134 | else if (cmp > 0) | 135 | else if (cmp > 0) |
| 135 | p = &(*p)->rb_right; | 136 | p = &(*p)->rb_right; |
| 136 | else { | 137 | else { |
| 137 | printk(KERN_ERR "sysctl duplicate entry: "); | 138 | pr_err("sysctl duplicate entry: "); |
| 138 | sysctl_print_dir(head->parent); | 139 | sysctl_print_dir(head->parent); |
| 139 | printk(KERN_CONT "/%s\n", entry->procname); | 140 | pr_cont("/%s\n", entry->procname); |
| 140 | return -EEXIST; | 141 | return -EEXIST; |
| 141 | } | 142 | } |
| 142 | } | 143 | } |
| @@ -478,7 +479,7 @@ out: | |||
| 478 | static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf, | 479 | static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf, |
| 479 | size_t count, loff_t *ppos, int write) | 480 | size_t count, loff_t *ppos, int write) |
| 480 | { | 481 | { |
| 481 | struct inode *inode = filp->f_path.dentry->d_inode; | 482 | struct inode *inode = file_inode(filp); |
| 482 | struct ctl_table_header *head = grab_header(inode); | 483 | struct ctl_table_header *head = grab_header(inode); |
| 483 | struct ctl_table *table = PROC_I(inode)->sysctl_entry; | 484 | struct ctl_table *table = PROC_I(inode)->sysctl_entry; |
| 484 | ssize_t error; | 485 | ssize_t error; |
| @@ -542,7 +543,7 @@ static int proc_sys_open(struct inode *inode, struct file *filp) | |||
| 542 | 543 | ||
| 543 | static unsigned int proc_sys_poll(struct file *filp, poll_table *wait) | 544 | static unsigned int proc_sys_poll(struct file *filp, poll_table *wait) |
| 544 | { | 545 | { |
| 545 | struct inode *inode = filp->f_path.dentry->d_inode; | 546 | struct inode *inode = file_inode(filp); |
| 546 | struct ctl_table_header *head = grab_header(inode); | 547 | struct ctl_table_header *head = grab_header(inode); |
| 547 | struct ctl_table *table = PROC_I(inode)->sysctl_entry; | 548 | struct ctl_table *table = PROC_I(inode)->sysctl_entry; |
| 548 | unsigned int ret = DEFAULT_POLLMASK; | 549 | unsigned int ret = DEFAULT_POLLMASK; |
| @@ -927,9 +928,9 @@ found: | |||
| 927 | subdir->header.nreg++; | 928 | subdir->header.nreg++; |
| 928 | failed: | 929 | failed: |
| 929 | if (unlikely(IS_ERR(subdir))) { | 930 | if (unlikely(IS_ERR(subdir))) { |
| 930 | printk(KERN_ERR "sysctl could not get directory: "); | 931 | pr_err("sysctl could not get directory: "); |
| 931 | sysctl_print_dir(dir); | 932 | sysctl_print_dir(dir); |
| 932 | printk(KERN_CONT "/%*.*s %ld\n", | 933 | pr_cont("/%*.*s %ld\n", |
| 933 | namelen, namelen, name, PTR_ERR(subdir)); | 934 | namelen, namelen, name, PTR_ERR(subdir)); |
| 934 | } | 935 | } |
| 935 | drop_sysctl_table(&dir->header); | 936 | drop_sysctl_table(&dir->header); |
| @@ -995,8 +996,8 @@ static int sysctl_err(const char *path, struct ctl_table *table, char *fmt, ...) | |||
| 995 | vaf.fmt = fmt; | 996 | vaf.fmt = fmt; |
| 996 | vaf.va = &args; | 997 | vaf.va = &args; |
| 997 | 998 | ||
| 998 | printk(KERN_ERR "sysctl table check failed: %s/%s %pV\n", | 999 | pr_err("sysctl table check failed: %s/%s %pV\n", |
| 999 | path, table->procname, &vaf); | 1000 | path, table->procname, &vaf); |
| 1000 | 1001 | ||
| 1001 | va_end(args); | 1002 | va_end(args); |
| 1002 | return -EINVAL; | 1003 | return -EINVAL; |
| @@ -1510,9 +1511,9 @@ static void put_links(struct ctl_table_header *header) | |||
| 1510 | drop_sysctl_table(link_head); | 1511 | drop_sysctl_table(link_head); |
| 1511 | } | 1512 | } |
| 1512 | else { | 1513 | else { |
| 1513 | printk(KERN_ERR "sysctl link missing during unregister: "); | 1514 | pr_err("sysctl link missing during unregister: "); |
| 1514 | sysctl_print_dir(parent); | 1515 | sysctl_print_dir(parent); |
| 1515 | printk(KERN_CONT "/%s\n", name); | 1516 | pr_cont("/%s\n", name); |
| 1516 | } | 1517 | } |
| 1517 | } | 1518 | } |
| 1518 | } | 1519 | } |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index ca5ce7f9f800..3e636d864d56 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
| @@ -271,7 +271,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) | |||
| 271 | const char *name = NULL; | 271 | const char *name = NULL; |
| 272 | 272 | ||
| 273 | if (file) { | 273 | if (file) { |
| 274 | struct inode *inode = vma->vm_file->f_path.dentry->d_inode; | 274 | struct inode *inode = file_inode(vma->vm_file); |
| 275 | dev = inode->i_sb->s_dev; | 275 | dev = inode->i_sb->s_dev; |
| 276 | ino = inode->i_ino; | 276 | ino = inode->i_ino; |
| 277 | pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; | 277 | pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; |
| @@ -743,7 +743,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, | |||
| 743 | return rv; | 743 | return rv; |
| 744 | if (type < CLEAR_REFS_ALL || type > CLEAR_REFS_MAPPED) | 744 | if (type < CLEAR_REFS_ALL || type > CLEAR_REFS_MAPPED) |
| 745 | return -EINVAL; | 745 | return -EINVAL; |
| 746 | task = get_proc_task(file->f_path.dentry->d_inode); | 746 | task = get_proc_task(file_inode(file)); |
| 747 | if (!task) | 747 | if (!task) |
| 748 | return -ESRCH; | 748 | return -ESRCH; |
| 749 | mm = get_task_mm(task); | 749 | mm = get_task_mm(task); |
| @@ -1015,7 +1015,7 @@ static int pagemap_hugetlb_range(pte_t *pte, unsigned long hmask, | |||
| 1015 | static ssize_t pagemap_read(struct file *file, char __user *buf, | 1015 | static ssize_t pagemap_read(struct file *file, char __user *buf, |
| 1016 | size_t count, loff_t *ppos) | 1016 | size_t count, loff_t *ppos) |
| 1017 | { | 1017 | { |
| 1018 | struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); | 1018 | struct task_struct *task = get_proc_task(file_inode(file)); |
| 1019 | struct mm_struct *mm; | 1019 | struct mm_struct *mm; |
| 1020 | struct pagemapread pm; | 1020 | struct pagemapread pm; |
| 1021 | int ret = -ESRCH; | 1021 | int ret = -ESRCH; |
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c index 1ccfa537f5f5..56123a6f462e 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c | |||
| @@ -149,7 +149,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, | |||
| 149 | file = vma->vm_file; | 149 | file = vma->vm_file; |
| 150 | 150 | ||
| 151 | if (file) { | 151 | if (file) { |
| 152 | struct inode *inode = vma->vm_file->f_path.dentry->d_inode; | 152 | struct inode *inode = file_inode(vma->vm_file); |
| 153 | dev = inode->i_sb->s_dev; | 153 | dev = inode->i_sb->s_dev; |
| 154 | ino = inode->i_ino; | 154 | ino = inode->i_ino; |
| 155 | pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; | 155 | pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; |
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 0d5071d29985..b870f740ab5a 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/export.h> | 15 | #include <linux/export.h> |
| 16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 17 | #include <linux/highmem.h> | 17 | #include <linux/highmem.h> |
| 18 | #include <linux/printk.h> | ||
| 18 | #include <linux/bootmem.h> | 19 | #include <linux/bootmem.h> |
| 19 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 20 | #include <linux/crash_dump.h> | 21 | #include <linux/crash_dump.h> |
| @@ -175,15 +176,15 @@ static ssize_t read_vmcore(struct file *file, char __user *buffer, | |||
| 175 | start = map_offset_to_paddr(*fpos, &vmcore_list, &curr_m); | 176 | start = map_offset_to_paddr(*fpos, &vmcore_list, &curr_m); |
| 176 | if (!curr_m) | 177 | if (!curr_m) |
| 177 | return -EINVAL; | 178 | return -EINVAL; |
| 178 | if ((tsz = (PAGE_SIZE - (start & ~PAGE_MASK))) > buflen) | ||
| 179 | tsz = buflen; | ||
| 180 | |||
| 181 | /* Calculate left bytes in current memory segment. */ | ||
| 182 | nr_bytes = (curr_m->size - (start - curr_m->paddr)); | ||
| 183 | if (tsz > nr_bytes) | ||
| 184 | tsz = nr_bytes; | ||
| 185 | 179 | ||
| 186 | while (buflen) { | 180 | while (buflen) { |
| 181 | tsz = min_t(size_t, buflen, PAGE_SIZE - (start & ~PAGE_MASK)); | ||
| 182 | |||
| 183 | /* Calculate left bytes in current memory segment. */ | ||
| 184 | nr_bytes = (curr_m->size - (start - curr_m->paddr)); | ||
| 185 | if (tsz > nr_bytes) | ||
| 186 | tsz = nr_bytes; | ||
| 187 | |||
| 187 | tmp = read_from_oldmem(buffer, tsz, &start, 1); | 188 | tmp = read_from_oldmem(buffer, tsz, &start, 1); |
| 188 | if (tmp < 0) | 189 | if (tmp < 0) |
| 189 | return tmp; | 190 | return tmp; |
| @@ -198,12 +199,6 @@ static ssize_t read_vmcore(struct file *file, char __user *buffer, | |||
| 198 | struct vmcore, list); | 199 | struct vmcore, list); |
| 199 | start = curr_m->paddr; | 200 | start = curr_m->paddr; |
| 200 | } | 201 | } |
| 201 | if ((tsz = (PAGE_SIZE - (start & ~PAGE_MASK))) > buflen) | ||
| 202 | tsz = buflen; | ||
| 203 | /* Calculate left bytes in current memory segment. */ | ||
| 204 | nr_bytes = (curr_m->size - (start - curr_m->paddr)); | ||
| 205 | if (tsz > nr_bytes) | ||
| 206 | tsz = nr_bytes; | ||
| 207 | } | 202 | } |
| 208 | return acc; | 203 | return acc; |
| 209 | } | 204 | } |
| @@ -553,8 +548,7 @@ static int __init parse_crash_elf64_headers(void) | |||
| 553 | ehdr.e_ehsize != sizeof(Elf64_Ehdr) || | 548 | ehdr.e_ehsize != sizeof(Elf64_Ehdr) || |
| 554 | ehdr.e_phentsize != sizeof(Elf64_Phdr) || | 549 | ehdr.e_phentsize != sizeof(Elf64_Phdr) || |
| 555 | ehdr.e_phnum == 0) { | 550 | ehdr.e_phnum == 0) { |
| 556 | printk(KERN_WARNING "Warning: Core image elf header is not" | 551 | pr_warn("Warning: Core image elf header is not sane\n"); |
| 557 | "sane\n"); | ||
| 558 | return -EINVAL; | 552 | return -EINVAL; |
| 559 | } | 553 | } |
| 560 | 554 | ||
| @@ -609,8 +603,7 @@ static int __init parse_crash_elf32_headers(void) | |||
| 609 | ehdr.e_ehsize != sizeof(Elf32_Ehdr) || | 603 | ehdr.e_ehsize != sizeof(Elf32_Ehdr) || |
| 610 | ehdr.e_phentsize != sizeof(Elf32_Phdr) || | 604 | ehdr.e_phentsize != sizeof(Elf32_Phdr) || |
| 611 | ehdr.e_phnum == 0) { | 605 | ehdr.e_phnum == 0) { |
| 612 | printk(KERN_WARNING "Warning: Core image elf header is not" | 606 | pr_warn("Warning: Core image elf header is not sane\n"); |
| 613 | "sane\n"); | ||
| 614 | return -EINVAL; | 607 | return -EINVAL; |
| 615 | } | 608 | } |
| 616 | 609 | ||
| @@ -653,8 +646,7 @@ static int __init parse_crash_elf_headers(void) | |||
| 653 | if (rc < 0) | 646 | if (rc < 0) |
| 654 | return rc; | 647 | return rc; |
| 655 | if (memcmp(e_ident, ELFMAG, SELFMAG) != 0) { | 648 | if (memcmp(e_ident, ELFMAG, SELFMAG) != 0) { |
| 656 | printk(KERN_WARNING "Warning: Core image elf header" | 649 | pr_warn("Warning: Core image elf header not found\n"); |
| 657 | " not found\n"); | ||
| 658 | return -EINVAL; | 650 | return -EINVAL; |
| 659 | } | 651 | } |
| 660 | 652 | ||
| @@ -673,8 +665,7 @@ static int __init parse_crash_elf_headers(void) | |||
| 673 | /* Determine vmcore size. */ | 665 | /* Determine vmcore size. */ |
| 674 | vmcore_size = get_vmcore_size_elf32(elfcorebuf); | 666 | vmcore_size = get_vmcore_size_elf32(elfcorebuf); |
| 675 | } else { | 667 | } else { |
| 676 | printk(KERN_WARNING "Warning: Core image elf header is not" | 668 | pr_warn("Warning: Core image elf header is not sane\n"); |
| 677 | " sane\n"); | ||
| 678 | return -EINVAL; | 669 | return -EINVAL; |
| 679 | } | 670 | } |
| 680 | return 0; | 671 | return 0; |
| @@ -690,7 +681,7 @@ static int __init vmcore_init(void) | |||
| 690 | return rc; | 681 | return rc; |
| 691 | rc = parse_crash_elf_headers(); | 682 | rc = parse_crash_elf_headers(); |
| 692 | if (rc) { | 683 | if (rc) { |
| 693 | printk(KERN_WARNING "Kdump: vmcore not initialized\n"); | 684 | pr_warn("Kdump: vmcore not initialized\n"); |
| 694 | return rc; | 685 | return rc; |
| 695 | } | 686 | } |
| 696 | 687 | ||
