0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 #include <linux/uaccess.h>
0052
0053 #include <linux/errno.h>
0054 #include <linux/time.h>
0055 #include <linux/proc_fs.h>
0056 #include <linux/stat.h>
0057 #include <linux/task_io_accounting_ops.h>
0058 #include <linux/init.h>
0059 #include <linux/capability.h>
0060 #include <linux/file.h>
0061 #include <linux/fdtable.h>
0062 #include <linux/generic-radix-tree.h>
0063 #include <linux/string.h>
0064 #include <linux/seq_file.h>
0065 #include <linux/namei.h>
0066 #include <linux/mnt_namespace.h>
0067 #include <linux/mm.h>
0068 #include <linux/swap.h>
0069 #include <linux/rcupdate.h>
0070 #include <linux/kallsyms.h>
0071 #include <linux/stacktrace.h>
0072 #include <linux/resource.h>
0073 #include <linux/module.h>
0074 #include <linux/mount.h>
0075 #include <linux/security.h>
0076 #include <linux/ptrace.h>
0077 #include <linux/printk.h>
0078 #include <linux/cache.h>
0079 #include <linux/cgroup.h>
0080 #include <linux/cpuset.h>
0081 #include <linux/audit.h>
0082 #include <linux/poll.h>
0083 #include <linux/nsproxy.h>
0084 #include <linux/oom.h>
0085 #include <linux/elf.h>
0086 #include <linux/pid_namespace.h>
0087 #include <linux/user_namespace.h>
0088 #include <linux/fs_struct.h>
0089 #include <linux/slab.h>
0090 #include <linux/sched/autogroup.h>
0091 #include <linux/sched/mm.h>
0092 #include <linux/sched/coredump.h>
0093 #include <linux/sched/debug.h>
0094 #include <linux/sched/stat.h>
0095 #include <linux/posix-timers.h>
0096 #include <linux/time_namespace.h>
0097 #include <linux/resctrl.h>
0098 #include <linux/cn_proc.h>
0099 #include <trace/events/oom.h>
0100 #include "internal.h"
0101 #include "fd.h"
0102
0103 #include "../../lib/kstrtox.h"
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115 static u8 nlink_tid __ro_after_init;
0116 static u8 nlink_tgid __ro_after_init;
0117
0118 struct pid_entry {
0119 const char *name;
0120 unsigned int len;
0121 umode_t mode;
0122 const struct inode_operations *iop;
0123 const struct file_operations *fop;
0124 union proc_op op;
0125 };
0126
0127 #define NOD(NAME, MODE, IOP, FOP, OP) { \
0128 .name = (NAME), \
0129 .len = sizeof(NAME) - 1, \
0130 .mode = MODE, \
0131 .iop = IOP, \
0132 .fop = FOP, \
0133 .op = OP, \
0134 }
0135
0136 #define DIR(NAME, MODE, iops, fops) \
0137 NOD(NAME, (S_IFDIR|(MODE)), &iops, &fops, {} )
0138 #define LNK(NAME, get_link) \
0139 NOD(NAME, (S_IFLNK|S_IRWXUGO), \
0140 &proc_pid_link_inode_operations, NULL, \
0141 { .proc_get_link = get_link } )
0142 #define REG(NAME, MODE, fops) \
0143 NOD(NAME, (S_IFREG|(MODE)), NULL, &fops, {})
0144 #define ONE(NAME, MODE, show) \
0145 NOD(NAME, (S_IFREG|(MODE)), \
0146 NULL, &proc_single_file_operations, \
0147 { .proc_show = show } )
0148 #define ATTR(LSM, NAME, MODE) \
0149 NOD(NAME, (S_IFREG|(MODE)), \
0150 NULL, &proc_pid_attr_operations, \
0151 { .lsm = LSM })
0152
0153
0154
0155
0156
0157 static unsigned int __init pid_entry_nlink(const struct pid_entry *entries,
0158 unsigned int n)
0159 {
0160 unsigned int i;
0161 unsigned int count;
0162
0163 count = 2;
0164 for (i = 0; i < n; ++i) {
0165 if (S_ISDIR(entries[i].mode))
0166 ++count;
0167 }
0168
0169 return count;
0170 }
0171
0172 static int get_task_root(struct task_struct *task, struct path *root)
0173 {
0174 int result = -ENOENT;
0175
0176 task_lock(task);
0177 if (task->fs) {
0178 get_fs_root(task->fs, root);
0179 result = 0;
0180 }
0181 task_unlock(task);
0182 return result;
0183 }
0184
0185 static int proc_cwd_link(struct dentry *dentry, struct path *path)
0186 {
0187 struct task_struct *task = get_proc_task(d_inode(dentry));
0188 int result = -ENOENT;
0189
0190 if (task) {
0191 task_lock(task);
0192 if (task->fs) {
0193 get_fs_pwd(task->fs, path);
0194 result = 0;
0195 }
0196 task_unlock(task);
0197 put_task_struct(task);
0198 }
0199 return result;
0200 }
0201
0202 static int proc_root_link(struct dentry *dentry, struct path *path)
0203 {
0204 struct task_struct *task = get_proc_task(d_inode(dentry));
0205 int result = -ENOENT;
0206
0207 if (task) {
0208 result = get_task_root(task, path);
0209 put_task_struct(task);
0210 }
0211 return result;
0212 }
0213
0214
0215
0216
0217
0218 static ssize_t get_mm_proctitle(struct mm_struct *mm, char __user *buf,
0219 size_t count, unsigned long pos,
0220 unsigned long arg_start)
0221 {
0222 char *page;
0223 int ret, got;
0224
0225 if (pos >= PAGE_SIZE)
0226 return 0;
0227
0228 page = (char *)__get_free_page(GFP_KERNEL);
0229 if (!page)
0230 return -ENOMEM;
0231
0232 ret = 0;
0233 got = access_remote_vm(mm, arg_start, page, PAGE_SIZE, FOLL_ANON);
0234 if (got > 0) {
0235 int len = strnlen(page, got);
0236
0237
0238 if (len < got)
0239 len++;
0240
0241 if (len > pos) {
0242 len -= pos;
0243 if (len > count)
0244 len = count;
0245 len -= copy_to_user(buf, page+pos, len);
0246 if (!len)
0247 len = -EFAULT;
0248 ret = len;
0249 }
0250 }
0251 free_page((unsigned long)page);
0252 return ret;
0253 }
0254
0255 static ssize_t get_mm_cmdline(struct mm_struct *mm, char __user *buf,
0256 size_t count, loff_t *ppos)
0257 {
0258 unsigned long arg_start, arg_end, env_start, env_end;
0259 unsigned long pos, len;
0260 char *page, c;
0261
0262
0263 if (!mm->env_end)
0264 return 0;
0265
0266 spin_lock(&mm->arg_lock);
0267 arg_start = mm->arg_start;
0268 arg_end = mm->arg_end;
0269 env_start = mm->env_start;
0270 env_end = mm->env_end;
0271 spin_unlock(&mm->arg_lock);
0272
0273 if (arg_start >= arg_end)
0274 return 0;
0275
0276
0277
0278
0279
0280
0281 if (env_start != arg_end || env_end < env_start)
0282 env_start = env_end = arg_end;
0283 len = env_end - arg_start;
0284
0285
0286 pos = *ppos;
0287 if (pos >= len)
0288 return 0;
0289 if (count > len - pos)
0290 count = len - pos;
0291 if (!count)
0292 return 0;
0293
0294
0295
0296
0297
0298
0299
0300
0301 if (access_remote_vm(mm, arg_end-1, &c, 1, FOLL_ANON) == 1 && c)
0302 return get_mm_proctitle(mm, buf, count, pos, arg_start);
0303
0304
0305
0306
0307
0308 pos += arg_start;
0309 if (pos < arg_start || pos >= arg_end)
0310 return 0;
0311 if (count > arg_end - pos)
0312 count = arg_end - pos;
0313
0314 page = (char *)__get_free_page(GFP_KERNEL);
0315 if (!page)
0316 return -ENOMEM;
0317
0318 len = 0;
0319 while (count) {
0320 int got;
0321 size_t size = min_t(size_t, PAGE_SIZE, count);
0322
0323 got = access_remote_vm(mm, pos, page, size, FOLL_ANON);
0324 if (got <= 0)
0325 break;
0326 got -= copy_to_user(buf, page, got);
0327 if (unlikely(!got)) {
0328 if (!len)
0329 len = -EFAULT;
0330 break;
0331 }
0332 pos += got;
0333 buf += got;
0334 len += got;
0335 count -= got;
0336 }
0337
0338 free_page((unsigned long)page);
0339 return len;
0340 }
0341
0342 static ssize_t get_task_cmdline(struct task_struct *tsk, char __user *buf,
0343 size_t count, loff_t *pos)
0344 {
0345 struct mm_struct *mm;
0346 ssize_t ret;
0347
0348 mm = get_task_mm(tsk);
0349 if (!mm)
0350 return 0;
0351
0352 ret = get_mm_cmdline(mm, buf, count, pos);
0353 mmput(mm);
0354 return ret;
0355 }
0356
0357 static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf,
0358 size_t count, loff_t *pos)
0359 {
0360 struct task_struct *tsk;
0361 ssize_t ret;
0362
0363 BUG_ON(*pos < 0);
0364
0365 tsk = get_proc_task(file_inode(file));
0366 if (!tsk)
0367 return -ESRCH;
0368 ret = get_task_cmdline(tsk, buf, count, pos);
0369 put_task_struct(tsk);
0370 if (ret > 0)
0371 *pos += ret;
0372 return ret;
0373 }
0374
0375 static const struct file_operations proc_pid_cmdline_ops = {
0376 .read = proc_pid_cmdline_read,
0377 .llseek = generic_file_llseek,
0378 };
0379
0380 #ifdef CONFIG_KALLSYMS
0381
0382
0383
0384
0385 static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns,
0386 struct pid *pid, struct task_struct *task)
0387 {
0388 unsigned long wchan;
0389 char symname[KSYM_NAME_LEN];
0390
0391 if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS))
0392 goto print0;
0393
0394 wchan = get_wchan(task);
0395 if (wchan && !lookup_symbol_name(wchan, symname)) {
0396 seq_puts(m, symname);
0397 return 0;
0398 }
0399
0400 print0:
0401 seq_putc(m, '0');
0402 return 0;
0403 }
0404 #endif
0405
0406 static int lock_trace(struct task_struct *task)
0407 {
0408 int err = down_read_killable(&task->signal->exec_update_lock);
0409 if (err)
0410 return err;
0411 if (!ptrace_may_access(task, PTRACE_MODE_ATTACH_FSCREDS)) {
0412 up_read(&task->signal->exec_update_lock);
0413 return -EPERM;
0414 }
0415 return 0;
0416 }
0417
0418 static void unlock_trace(struct task_struct *task)
0419 {
0420 up_read(&task->signal->exec_update_lock);
0421 }
0422
0423 #ifdef CONFIG_STACKTRACE
0424
0425 #define MAX_STACK_TRACE_DEPTH 64
0426
0427 static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
0428 struct pid *pid, struct task_struct *task)
0429 {
0430 unsigned long *entries;
0431 int err;
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444 if (!file_ns_capable(m->file, &init_user_ns, CAP_SYS_ADMIN))
0445 return -EACCES;
0446
0447 entries = kmalloc_array(MAX_STACK_TRACE_DEPTH, sizeof(*entries),
0448 GFP_KERNEL);
0449 if (!entries)
0450 return -ENOMEM;
0451
0452 err = lock_trace(task);
0453 if (!err) {
0454 unsigned int i, nr_entries;
0455
0456 nr_entries = stack_trace_save_tsk(task, entries,
0457 MAX_STACK_TRACE_DEPTH, 0);
0458
0459 for (i = 0; i < nr_entries; i++) {
0460 seq_printf(m, "[<0>] %pB\n", (void *)entries[i]);
0461 }
0462
0463 unlock_trace(task);
0464 }
0465 kfree(entries);
0466
0467 return err;
0468 }
0469 #endif
0470
0471 #ifdef CONFIG_SCHED_INFO
0472
0473
0474
0475 static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
0476 struct pid *pid, struct task_struct *task)
0477 {
0478 if (unlikely(!sched_info_on()))
0479 seq_puts(m, "0 0 0\n");
0480 else
0481 seq_printf(m, "%llu %llu %lu\n",
0482 (unsigned long long)task->se.sum_exec_runtime,
0483 (unsigned long long)task->sched_info.run_delay,
0484 task->sched_info.pcount);
0485
0486 return 0;
0487 }
0488 #endif
0489
0490 #ifdef CONFIG_LATENCYTOP
0491 static int lstats_show_proc(struct seq_file *m, void *v)
0492 {
0493 int i;
0494 struct inode *inode = m->private;
0495 struct task_struct *task = get_proc_task(inode);
0496
0497 if (!task)
0498 return -ESRCH;
0499 seq_puts(m, "Latency Top version : v0.1\n");
0500 for (i = 0; i < LT_SAVECOUNT; i++) {
0501 struct latency_record *lr = &task->latency_record[i];
0502 if (lr->backtrace[0]) {
0503 int q;
0504 seq_printf(m, "%i %li %li",
0505 lr->count, lr->time, lr->max);
0506 for (q = 0; q < LT_BACKTRACEDEPTH; q++) {
0507 unsigned long bt = lr->backtrace[q];
0508
0509 if (!bt)
0510 break;
0511 seq_printf(m, " %ps", (void *)bt);
0512 }
0513 seq_putc(m, '\n');
0514 }
0515
0516 }
0517 put_task_struct(task);
0518 return 0;
0519 }
0520
0521 static int lstats_open(struct inode *inode, struct file *file)
0522 {
0523 return single_open(file, lstats_show_proc, inode);
0524 }
0525
0526 static ssize_t lstats_write(struct file *file, const char __user *buf,
0527 size_t count, loff_t *offs)
0528 {
0529 struct task_struct *task = get_proc_task(file_inode(file));
0530
0531 if (!task)
0532 return -ESRCH;
0533 clear_tsk_latency_tracing(task);
0534 put_task_struct(task);
0535
0536 return count;
0537 }
0538
0539 static const struct file_operations proc_lstats_operations = {
0540 .open = lstats_open,
0541 .read = seq_read,
0542 .write = lstats_write,
0543 .llseek = seq_lseek,
0544 .release = single_release,
0545 };
0546
0547 #endif
0548
0549 static int proc_oom_score(struct seq_file *m, struct pid_namespace *ns,
0550 struct pid *pid, struct task_struct *task)
0551 {
0552 unsigned long totalpages = totalram_pages() + total_swap_pages;
0553 unsigned long points = 0;
0554 long badness;
0555
0556 badness = oom_badness(task, totalpages);
0557
0558
0559
0560
0561
0562 if (badness != LONG_MIN)
0563 points = (1000 + badness * 1000 / (long)totalpages) * 2 / 3;
0564
0565 seq_printf(m, "%lu\n", points);
0566
0567 return 0;
0568 }
0569
0570 struct limit_names {
0571 const char *name;
0572 const char *unit;
0573 };
0574
0575 static const struct limit_names lnames[RLIM_NLIMITS] = {
0576 [RLIMIT_CPU] = {"Max cpu time", "seconds"},
0577 [RLIMIT_FSIZE] = {"Max file size", "bytes"},
0578 [RLIMIT_DATA] = {"Max data size", "bytes"},
0579 [RLIMIT_STACK] = {"Max stack size", "bytes"},
0580 [RLIMIT_CORE] = {"Max core file size", "bytes"},
0581 [RLIMIT_RSS] = {"Max resident set", "bytes"},
0582 [RLIMIT_NPROC] = {"Max processes", "processes"},
0583 [RLIMIT_NOFILE] = {"Max open files", "files"},
0584 [RLIMIT_MEMLOCK] = {"Max locked memory", "bytes"},
0585 [RLIMIT_AS] = {"Max address space", "bytes"},
0586 [RLIMIT_LOCKS] = {"Max file locks", "locks"},
0587 [RLIMIT_SIGPENDING] = {"Max pending signals", "signals"},
0588 [RLIMIT_MSGQUEUE] = {"Max msgqueue size", "bytes"},
0589 [RLIMIT_NICE] = {"Max nice priority", NULL},
0590 [RLIMIT_RTPRIO] = {"Max realtime priority", NULL},
0591 [RLIMIT_RTTIME] = {"Max realtime timeout", "us"},
0592 };
0593
0594
0595 static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns,
0596 struct pid *pid, struct task_struct *task)
0597 {
0598 unsigned int i;
0599 unsigned long flags;
0600
0601 struct rlimit rlim[RLIM_NLIMITS];
0602
0603 if (!lock_task_sighand(task, &flags))
0604 return 0;
0605 memcpy(rlim, task->signal->rlim, sizeof(struct rlimit) * RLIM_NLIMITS);
0606 unlock_task_sighand(task, &flags);
0607
0608
0609
0610
0611 seq_puts(m, "Limit "
0612 "Soft Limit "
0613 "Hard Limit "
0614 "Units \n");
0615
0616 for (i = 0; i < RLIM_NLIMITS; i++) {
0617 if (rlim[i].rlim_cur == RLIM_INFINITY)
0618 seq_printf(m, "%-25s %-20s ",
0619 lnames[i].name, "unlimited");
0620 else
0621 seq_printf(m, "%-25s %-20lu ",
0622 lnames[i].name, rlim[i].rlim_cur);
0623
0624 if (rlim[i].rlim_max == RLIM_INFINITY)
0625 seq_printf(m, "%-20s ", "unlimited");
0626 else
0627 seq_printf(m, "%-20lu ", rlim[i].rlim_max);
0628
0629 if (lnames[i].unit)
0630 seq_printf(m, "%-10s\n", lnames[i].unit);
0631 else
0632 seq_putc(m, '\n');
0633 }
0634
0635 return 0;
0636 }
0637
0638 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
0639 static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
0640 struct pid *pid, struct task_struct *task)
0641 {
0642 struct syscall_info info;
0643 u64 *args = &info.data.args[0];
0644 int res;
0645
0646 res = lock_trace(task);
0647 if (res)
0648 return res;
0649
0650 if (task_current_syscall(task, &info))
0651 seq_puts(m, "running\n");
0652 else if (info.data.nr < 0)
0653 seq_printf(m, "%d 0x%llx 0x%llx\n",
0654 info.data.nr, info.sp, info.data.instruction_pointer);
0655 else
0656 seq_printf(m,
0657 "%d 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx\n",
0658 info.data.nr,
0659 args[0], args[1], args[2], args[3], args[4], args[5],
0660 info.sp, info.data.instruction_pointer);
0661 unlock_trace(task);
0662
0663 return 0;
0664 }
0665 #endif
0666
0667
0668
0669
0670
0671
0672 static bool proc_fd_access_allowed(struct inode *inode)
0673 {
0674 struct task_struct *task;
0675 bool allowed = false;
0676
0677
0678
0679
0680 task = get_proc_task(inode);
0681 if (task) {
0682 allowed = ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS);
0683 put_task_struct(task);
0684 }
0685 return allowed;
0686 }
0687
0688 int proc_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
0689 struct iattr *attr)
0690 {
0691 int error;
0692 struct inode *inode = d_inode(dentry);
0693
0694 if (attr->ia_valid & ATTR_MODE)
0695 return -EPERM;
0696
0697 error = setattr_prepare(&init_user_ns, dentry, attr);
0698 if (error)
0699 return error;
0700
0701 setattr_copy(&init_user_ns, inode, attr);
0702 mark_inode_dirty(inode);
0703 return 0;
0704 }
0705
0706
0707
0708
0709
0710 static bool has_pid_permissions(struct proc_fs_info *fs_info,
0711 struct task_struct *task,
0712 enum proc_hidepid hide_pid_min)
0713 {
0714
0715
0716
0717
0718
0719 if (fs_info->hide_pid == HIDEPID_NOT_PTRACEABLE)
0720 return ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS);
0721
0722 if (fs_info->hide_pid < hide_pid_min)
0723 return true;
0724 if (in_group_p(fs_info->pid_gid))
0725 return true;
0726 return ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS);
0727 }
0728
0729
0730 static int proc_pid_permission(struct user_namespace *mnt_userns,
0731 struct inode *inode, int mask)
0732 {
0733 struct proc_fs_info *fs_info = proc_sb_info(inode->i_sb);
0734 struct task_struct *task;
0735 bool has_perms;
0736
0737 task = get_proc_task(inode);
0738 if (!task)
0739 return -ESRCH;
0740 has_perms = has_pid_permissions(fs_info, task, HIDEPID_NO_ACCESS);
0741 put_task_struct(task);
0742
0743 if (!has_perms) {
0744 if (fs_info->hide_pid == HIDEPID_INVISIBLE) {
0745
0746
0747
0748
0749
0750
0751 return -ENOENT;
0752 }
0753
0754 return -EPERM;
0755 }
0756 return generic_permission(&init_user_ns, inode, mask);
0757 }
0758
0759
0760
0761 static const struct inode_operations proc_def_inode_operations = {
0762 .setattr = proc_setattr,
0763 };
0764
0765 static int proc_single_show(struct seq_file *m, void *v)
0766 {
0767 struct inode *inode = m->private;
0768 struct pid_namespace *ns = proc_pid_ns(inode->i_sb);
0769 struct pid *pid = proc_pid(inode);
0770 struct task_struct *task;
0771 int ret;
0772
0773 task = get_pid_task(pid, PIDTYPE_PID);
0774 if (!task)
0775 return -ESRCH;
0776
0777 ret = PROC_I(inode)->op.proc_show(m, ns, pid, task);
0778
0779 put_task_struct(task);
0780 return ret;
0781 }
0782
0783 static int proc_single_open(struct inode *inode, struct file *filp)
0784 {
0785 return single_open(filp, proc_single_show, inode);
0786 }
0787
0788 static const struct file_operations proc_single_file_operations = {
0789 .open = proc_single_open,
0790 .read = seq_read,
0791 .llseek = seq_lseek,
0792 .release = single_release,
0793 };
0794
0795
0796 struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode)
0797 {
0798 struct task_struct *task = get_proc_task(inode);
0799 struct mm_struct *mm = ERR_PTR(-ESRCH);
0800
0801 if (task) {
0802 mm = mm_access(task, mode | PTRACE_MODE_FSCREDS);
0803 put_task_struct(task);
0804
0805 if (!IS_ERR_OR_NULL(mm)) {
0806
0807 mmgrab(mm);
0808
0809 mmput(mm);
0810 }
0811 }
0812
0813 return mm;
0814 }
0815
0816 static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
0817 {
0818 struct mm_struct *mm = proc_mem_open(inode, mode);
0819
0820 if (IS_ERR(mm))
0821 return PTR_ERR(mm);
0822
0823 file->private_data = mm;
0824 return 0;
0825 }
0826
0827 static int mem_open(struct inode *inode, struct file *file)
0828 {
0829 int ret = __mem_open(inode, file, PTRACE_MODE_ATTACH);
0830
0831
0832 file->f_mode |= FMODE_UNSIGNED_OFFSET;
0833
0834 return ret;
0835 }
0836
0837 static ssize_t mem_rw(struct file *file, char __user *buf,
0838 size_t count, loff_t *ppos, int write)
0839 {
0840 struct mm_struct *mm = file->private_data;
0841 unsigned long addr = *ppos;
0842 ssize_t copied;
0843 char *page;
0844 unsigned int flags;
0845
0846 if (!mm)
0847 return 0;
0848
0849 page = (char *)__get_free_page(GFP_KERNEL);
0850 if (!page)
0851 return -ENOMEM;
0852
0853 copied = 0;
0854 if (!mmget_not_zero(mm))
0855 goto free;
0856
0857 flags = FOLL_FORCE | (write ? FOLL_WRITE : 0);
0858
0859 while (count > 0) {
0860 size_t this_len = min_t(size_t, count, PAGE_SIZE);
0861
0862 if (write && copy_from_user(page, buf, this_len)) {
0863 copied = -EFAULT;
0864 break;
0865 }
0866
0867 this_len = access_remote_vm(mm, addr, page, this_len, flags);
0868 if (!this_len) {
0869 if (!copied)
0870 copied = -EIO;
0871 break;
0872 }
0873
0874 if (!write && copy_to_user(buf, page, this_len)) {
0875 copied = -EFAULT;
0876 break;
0877 }
0878
0879 buf += this_len;
0880 addr += this_len;
0881 copied += this_len;
0882 count -= this_len;
0883 }
0884 *ppos = addr;
0885
0886 mmput(mm);
0887 free:
0888 free_page((unsigned long) page);
0889 return copied;
0890 }
0891
0892 static ssize_t mem_read(struct file *file, char __user *buf,
0893 size_t count, loff_t *ppos)
0894 {
0895 return mem_rw(file, buf, count, ppos, 0);
0896 }
0897
0898 static ssize_t mem_write(struct file *file, const char __user *buf,
0899 size_t count, loff_t *ppos)
0900 {
0901 return mem_rw(file, (char __user*)buf, count, ppos, 1);
0902 }
0903
0904 loff_t mem_lseek(struct file *file, loff_t offset, int orig)
0905 {
0906 switch (orig) {
0907 case 0:
0908 file->f_pos = offset;
0909 break;
0910 case 1:
0911 file->f_pos += offset;
0912 break;
0913 default:
0914 return -EINVAL;
0915 }
0916 force_successful_syscall_return();
0917 return file->f_pos;
0918 }
0919
0920 static int mem_release(struct inode *inode, struct file *file)
0921 {
0922 struct mm_struct *mm = file->private_data;
0923 if (mm)
0924 mmdrop(mm);
0925 return 0;
0926 }
0927
0928 static const struct file_operations proc_mem_operations = {
0929 .llseek = mem_lseek,
0930 .read = mem_read,
0931 .write = mem_write,
0932 .open = mem_open,
0933 .release = mem_release,
0934 };
0935
0936 static int environ_open(struct inode *inode, struct file *file)
0937 {
0938 return __mem_open(inode, file, PTRACE_MODE_READ);
0939 }
0940
0941 static ssize_t environ_read(struct file *file, char __user *buf,
0942 size_t count, loff_t *ppos)
0943 {
0944 char *page;
0945 unsigned long src = *ppos;
0946 int ret = 0;
0947 struct mm_struct *mm = file->private_data;
0948 unsigned long env_start, env_end;
0949
0950
0951 if (!mm || !mm->env_end)
0952 return 0;
0953
0954 page = (char *)__get_free_page(GFP_KERNEL);
0955 if (!page)
0956 return -ENOMEM;
0957
0958 ret = 0;
0959 if (!mmget_not_zero(mm))
0960 goto free;
0961
0962 spin_lock(&mm->arg_lock);
0963 env_start = mm->env_start;
0964 env_end = mm->env_end;
0965 spin_unlock(&mm->arg_lock);
0966
0967 while (count > 0) {
0968 size_t this_len, max_len;
0969 int retval;
0970
0971 if (src >= (env_end - env_start))
0972 break;
0973
0974 this_len = env_end - (env_start + src);
0975
0976 max_len = min_t(size_t, PAGE_SIZE, count);
0977 this_len = min(max_len, this_len);
0978
0979 retval = access_remote_vm(mm, (env_start + src), page, this_len, FOLL_ANON);
0980
0981 if (retval <= 0) {
0982 ret = retval;
0983 break;
0984 }
0985
0986 if (copy_to_user(buf, page, retval)) {
0987 ret = -EFAULT;
0988 break;
0989 }
0990
0991 ret += retval;
0992 src += retval;
0993 buf += retval;
0994 count -= retval;
0995 }
0996 *ppos = src;
0997 mmput(mm);
0998
0999 free:
1000 free_page((unsigned long) page);
1001 return ret;
1002 }
1003
1004 static const struct file_operations proc_environ_operations = {
1005 .open = environ_open,
1006 .read = environ_read,
1007 .llseek = generic_file_llseek,
1008 .release = mem_release,
1009 };
1010
1011 static int auxv_open(struct inode *inode, struct file *file)
1012 {
1013 return __mem_open(inode, file, PTRACE_MODE_READ_FSCREDS);
1014 }
1015
1016 static ssize_t auxv_read(struct file *file, char __user *buf,
1017 size_t count, loff_t *ppos)
1018 {
1019 struct mm_struct *mm = file->private_data;
1020 unsigned int nwords = 0;
1021
1022 if (!mm)
1023 return 0;
1024 do {
1025 nwords += 2;
1026 } while (mm->saved_auxv[nwords - 2] != 0);
1027 return simple_read_from_buffer(buf, count, ppos, mm->saved_auxv,
1028 nwords * sizeof(mm->saved_auxv[0]));
1029 }
1030
1031 static const struct file_operations proc_auxv_operations = {
1032 .open = auxv_open,
1033 .read = auxv_read,
1034 .llseek = generic_file_llseek,
1035 .release = mem_release,
1036 };
1037
1038 static ssize_t oom_adj_read(struct file *file, char __user *buf, size_t count,
1039 loff_t *ppos)
1040 {
1041 struct task_struct *task = get_proc_task(file_inode(file));
1042 char buffer[PROC_NUMBUF];
1043 int oom_adj = OOM_ADJUST_MIN;
1044 size_t len;
1045
1046 if (!task)
1047 return -ESRCH;
1048 if (task->signal->oom_score_adj == OOM_SCORE_ADJ_MAX)
1049 oom_adj = OOM_ADJUST_MAX;
1050 else
1051 oom_adj = (task->signal->oom_score_adj * -OOM_DISABLE) /
1052 OOM_SCORE_ADJ_MAX;
1053 put_task_struct(task);
1054 if (oom_adj > OOM_ADJUST_MAX)
1055 oom_adj = OOM_ADJUST_MAX;
1056 len = snprintf(buffer, sizeof(buffer), "%d\n", oom_adj);
1057 return simple_read_from_buffer(buf, count, ppos, buffer, len);
1058 }
1059
1060 static int __set_oom_adj(struct file *file, int oom_adj, bool legacy)
1061 {
1062 struct mm_struct *mm = NULL;
1063 struct task_struct *task;
1064 int err = 0;
1065
1066 task = get_proc_task(file_inode(file));
1067 if (!task)
1068 return -ESRCH;
1069
1070 mutex_lock(&oom_adj_mutex);
1071 if (legacy) {
1072 if (oom_adj < task->signal->oom_score_adj &&
1073 !capable(CAP_SYS_RESOURCE)) {
1074 err = -EACCES;
1075 goto err_unlock;
1076 }
1077
1078
1079
1080
1081 pr_warn_once("%s (%d): /proc/%d/oom_adj is deprecated, please use /proc/%d/oom_score_adj instead.\n",
1082 current->comm, task_pid_nr(current), task_pid_nr(task),
1083 task_pid_nr(task));
1084 } else {
1085 if ((short)oom_adj < task->signal->oom_score_adj_min &&
1086 !capable(CAP_SYS_RESOURCE)) {
1087 err = -EACCES;
1088 goto err_unlock;
1089 }
1090 }
1091
1092
1093
1094
1095
1096
1097 if (!task->vfork_done) {
1098 struct task_struct *p = find_lock_task_mm(task);
1099
1100 if (p) {
1101 if (test_bit(MMF_MULTIPROCESS, &p->mm->flags)) {
1102 mm = p->mm;
1103 mmgrab(mm);
1104 }
1105 task_unlock(p);
1106 }
1107 }
1108
1109 task->signal->oom_score_adj = oom_adj;
1110 if (!legacy && has_capability_noaudit(current, CAP_SYS_RESOURCE))
1111 task->signal->oom_score_adj_min = (short)oom_adj;
1112 trace_oom_score_adj_update(task);
1113
1114 if (mm) {
1115 struct task_struct *p;
1116
1117 rcu_read_lock();
1118 for_each_process(p) {
1119 if (same_thread_group(task, p))
1120 continue;
1121
1122
1123 if (p->flags & PF_KTHREAD || is_global_init(p))
1124 continue;
1125
1126 task_lock(p);
1127 if (!p->vfork_done && process_shares_mm(p, mm)) {
1128 p->signal->oom_score_adj = oom_adj;
1129 if (!legacy && has_capability_noaudit(current, CAP_SYS_RESOURCE))
1130 p->signal->oom_score_adj_min = (short)oom_adj;
1131 }
1132 task_unlock(p);
1133 }
1134 rcu_read_unlock();
1135 mmdrop(mm);
1136 }
1137 err_unlock:
1138 mutex_unlock(&oom_adj_mutex);
1139 put_task_struct(task);
1140 return err;
1141 }
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153 static ssize_t oom_adj_write(struct file *file, const char __user *buf,
1154 size_t count, loff_t *ppos)
1155 {
1156 char buffer[PROC_NUMBUF];
1157 int oom_adj;
1158 int err;
1159
1160 memset(buffer, 0, sizeof(buffer));
1161 if (count > sizeof(buffer) - 1)
1162 count = sizeof(buffer) - 1;
1163 if (copy_from_user(buffer, buf, count)) {
1164 err = -EFAULT;
1165 goto out;
1166 }
1167
1168 err = kstrtoint(strstrip(buffer), 0, &oom_adj);
1169 if (err)
1170 goto out;
1171 if ((oom_adj < OOM_ADJUST_MIN || oom_adj > OOM_ADJUST_MAX) &&
1172 oom_adj != OOM_DISABLE) {
1173 err = -EINVAL;
1174 goto out;
1175 }
1176
1177
1178
1179
1180
1181 if (oom_adj == OOM_ADJUST_MAX)
1182 oom_adj = OOM_SCORE_ADJ_MAX;
1183 else
1184 oom_adj = (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE;
1185
1186 err = __set_oom_adj(file, oom_adj, true);
1187 out:
1188 return err < 0 ? err : count;
1189 }
1190
1191 static const struct file_operations proc_oom_adj_operations = {
1192 .read = oom_adj_read,
1193 .write = oom_adj_write,
1194 .llseek = generic_file_llseek,
1195 };
1196
1197 static ssize_t oom_score_adj_read(struct file *file, char __user *buf,
1198 size_t count, loff_t *ppos)
1199 {
1200 struct task_struct *task = get_proc_task(file_inode(file));
1201 char buffer[PROC_NUMBUF];
1202 short oom_score_adj = OOM_SCORE_ADJ_MIN;
1203 size_t len;
1204
1205 if (!task)
1206 return -ESRCH;
1207 oom_score_adj = task->signal->oom_score_adj;
1208 put_task_struct(task);
1209 len = snprintf(buffer, sizeof(buffer), "%hd\n", oom_score_adj);
1210 return simple_read_from_buffer(buf, count, ppos, buffer, len);
1211 }
1212
1213 static ssize_t oom_score_adj_write(struct file *file, const char __user *buf,
1214 size_t count, loff_t *ppos)
1215 {
1216 char buffer[PROC_NUMBUF];
1217 int oom_score_adj;
1218 int err;
1219
1220 memset(buffer, 0, sizeof(buffer));
1221 if (count > sizeof(buffer) - 1)
1222 count = sizeof(buffer) - 1;
1223 if (copy_from_user(buffer, buf, count)) {
1224 err = -EFAULT;
1225 goto out;
1226 }
1227
1228 err = kstrtoint(strstrip(buffer), 0, &oom_score_adj);
1229 if (err)
1230 goto out;
1231 if (oom_score_adj < OOM_SCORE_ADJ_MIN ||
1232 oom_score_adj > OOM_SCORE_ADJ_MAX) {
1233 err = -EINVAL;
1234 goto out;
1235 }
1236
1237 err = __set_oom_adj(file, oom_score_adj, false);
1238 out:
1239 return err < 0 ? err : count;
1240 }
1241
1242 static const struct file_operations proc_oom_score_adj_operations = {
1243 .read = oom_score_adj_read,
1244 .write = oom_score_adj_write,
1245 .llseek = default_llseek,
1246 };
1247
1248 #ifdef CONFIG_AUDIT
1249 #define TMPBUFLEN 11
1250 static ssize_t proc_loginuid_read(struct file * file, char __user * buf,
1251 size_t count, loff_t *ppos)
1252 {
1253 struct inode * inode = file_inode(file);
1254 struct task_struct *task = get_proc_task(inode);
1255 ssize_t length;
1256 char tmpbuf[TMPBUFLEN];
1257
1258 if (!task)
1259 return -ESRCH;
1260 length = scnprintf(tmpbuf, TMPBUFLEN, "%u",
1261 from_kuid(file->f_cred->user_ns,
1262 audit_get_loginuid(task)));
1263 put_task_struct(task);
1264 return simple_read_from_buffer(buf, count, ppos, tmpbuf, length);
1265 }
1266
1267 static ssize_t proc_loginuid_write(struct file * file, const char __user * buf,
1268 size_t count, loff_t *ppos)
1269 {
1270 struct inode * inode = file_inode(file);
1271 uid_t loginuid;
1272 kuid_t kloginuid;
1273 int rv;
1274
1275
1276 if (current->flags & PF_KTHREAD)
1277 return -EPERM;
1278
1279 rcu_read_lock();
1280 if (current != pid_task(proc_pid(inode), PIDTYPE_PID)) {
1281 rcu_read_unlock();
1282 return -EPERM;
1283 }
1284 rcu_read_unlock();
1285
1286 if (*ppos != 0) {
1287
1288 return -EINVAL;
1289 }
1290
1291 rv = kstrtou32_from_user(buf, count, 10, &loginuid);
1292 if (rv < 0)
1293 return rv;
1294
1295
1296 if (loginuid == AUDIT_UID_UNSET) {
1297 kloginuid = INVALID_UID;
1298 } else {
1299 kloginuid = make_kuid(file->f_cred->user_ns, loginuid);
1300 if (!uid_valid(kloginuid))
1301 return -EINVAL;
1302 }
1303
1304 rv = audit_set_loginuid(kloginuid);
1305 if (rv < 0)
1306 return rv;
1307 return count;
1308 }
1309
1310 static const struct file_operations proc_loginuid_operations = {
1311 .read = proc_loginuid_read,
1312 .write = proc_loginuid_write,
1313 .llseek = generic_file_llseek,
1314 };
1315
1316 static ssize_t proc_sessionid_read(struct file * file, char __user * buf,
1317 size_t count, loff_t *ppos)
1318 {
1319 struct inode * inode = file_inode(file);
1320 struct task_struct *task = get_proc_task(inode);
1321 ssize_t length;
1322 char tmpbuf[TMPBUFLEN];
1323
1324 if (!task)
1325 return -ESRCH;
1326 length = scnprintf(tmpbuf, TMPBUFLEN, "%u",
1327 audit_get_sessionid(task));
1328 put_task_struct(task);
1329 return simple_read_from_buffer(buf, count, ppos, tmpbuf, length);
1330 }
1331
1332 static const struct file_operations proc_sessionid_operations = {
1333 .read = proc_sessionid_read,
1334 .llseek = generic_file_llseek,
1335 };
1336 #endif
1337
1338 #ifdef CONFIG_FAULT_INJECTION
1339 static ssize_t proc_fault_inject_read(struct file * file, char __user * buf,
1340 size_t count, loff_t *ppos)
1341 {
1342 struct task_struct *task = get_proc_task(file_inode(file));
1343 char buffer[PROC_NUMBUF];
1344 size_t len;
1345 int make_it_fail;
1346
1347 if (!task)
1348 return -ESRCH;
1349 make_it_fail = task->make_it_fail;
1350 put_task_struct(task);
1351
1352 len = snprintf(buffer, sizeof(buffer), "%i\n", make_it_fail);
1353
1354 return simple_read_from_buffer(buf, count, ppos, buffer, len);
1355 }
1356
1357 static ssize_t proc_fault_inject_write(struct file * file,
1358 const char __user * buf, size_t count, loff_t *ppos)
1359 {
1360 struct task_struct *task;
1361 char buffer[PROC_NUMBUF];
1362 int make_it_fail;
1363 int rv;
1364
1365 if (!capable(CAP_SYS_RESOURCE))
1366 return -EPERM;
1367 memset(buffer, 0, sizeof(buffer));
1368 if (count > sizeof(buffer) - 1)
1369 count = sizeof(buffer) - 1;
1370 if (copy_from_user(buffer, buf, count))
1371 return -EFAULT;
1372 rv = kstrtoint(strstrip(buffer), 0, &make_it_fail);
1373 if (rv < 0)
1374 return rv;
1375 if (make_it_fail < 0 || make_it_fail > 1)
1376 return -EINVAL;
1377
1378 task = get_proc_task(file_inode(file));
1379 if (!task)
1380 return -ESRCH;
1381 task->make_it_fail = make_it_fail;
1382 put_task_struct(task);
1383
1384 return count;
1385 }
1386
1387 static const struct file_operations proc_fault_inject_operations = {
1388 .read = proc_fault_inject_read,
1389 .write = proc_fault_inject_write,
1390 .llseek = generic_file_llseek,
1391 };
1392
1393 static ssize_t proc_fail_nth_write(struct file *file, const char __user *buf,
1394 size_t count, loff_t *ppos)
1395 {
1396 struct task_struct *task;
1397 int err;
1398 unsigned int n;
1399
1400 err = kstrtouint_from_user(buf, count, 0, &n);
1401 if (err)
1402 return err;
1403
1404 task = get_proc_task(file_inode(file));
1405 if (!task)
1406 return -ESRCH;
1407 task->fail_nth = n;
1408 put_task_struct(task);
1409
1410 return count;
1411 }
1412
1413 static ssize_t proc_fail_nth_read(struct file *file, char __user *buf,
1414 size_t count, loff_t *ppos)
1415 {
1416 struct task_struct *task;
1417 char numbuf[PROC_NUMBUF];
1418 ssize_t len;
1419
1420 task = get_proc_task(file_inode(file));
1421 if (!task)
1422 return -ESRCH;
1423 len = snprintf(numbuf, sizeof(numbuf), "%u\n", task->fail_nth);
1424 put_task_struct(task);
1425 return simple_read_from_buffer(buf, count, ppos, numbuf, len);
1426 }
1427
1428 static const struct file_operations proc_fail_nth_operations = {
1429 .read = proc_fail_nth_read,
1430 .write = proc_fail_nth_write,
1431 };
1432 #endif
1433
1434
1435 #ifdef CONFIG_SCHED_DEBUG
1436
1437
1438
1439 static int sched_show(struct seq_file *m, void *v)
1440 {
1441 struct inode *inode = m->private;
1442 struct pid_namespace *ns = proc_pid_ns(inode->i_sb);
1443 struct task_struct *p;
1444
1445 p = get_proc_task(inode);
1446 if (!p)
1447 return -ESRCH;
1448 proc_sched_show_task(p, ns, m);
1449
1450 put_task_struct(p);
1451
1452 return 0;
1453 }
1454
1455 static ssize_t
1456 sched_write(struct file *file, const char __user *buf,
1457 size_t count, loff_t *offset)
1458 {
1459 struct inode *inode = file_inode(file);
1460 struct task_struct *p;
1461
1462 p = get_proc_task(inode);
1463 if (!p)
1464 return -ESRCH;
1465 proc_sched_set_task(p);
1466
1467 put_task_struct(p);
1468
1469 return count;
1470 }
1471
1472 static int sched_open(struct inode *inode, struct file *filp)
1473 {
1474 return single_open(filp, sched_show, inode);
1475 }
1476
1477 static const struct file_operations proc_pid_sched_operations = {
1478 .open = sched_open,
1479 .read = seq_read,
1480 .write = sched_write,
1481 .llseek = seq_lseek,
1482 .release = single_release,
1483 };
1484
1485 #endif
1486
1487 #ifdef CONFIG_SCHED_AUTOGROUP
1488
1489
1490
1491 static int sched_autogroup_show(struct seq_file *m, void *v)
1492 {
1493 struct inode *inode = m->private;
1494 struct task_struct *p;
1495
1496 p = get_proc_task(inode);
1497 if (!p)
1498 return -ESRCH;
1499 proc_sched_autogroup_show_task(p, m);
1500
1501 put_task_struct(p);
1502
1503 return 0;
1504 }
1505
1506 static ssize_t
1507 sched_autogroup_write(struct file *file, const char __user *buf,
1508 size_t count, loff_t *offset)
1509 {
1510 struct inode *inode = file_inode(file);
1511 struct task_struct *p;
1512 char buffer[PROC_NUMBUF];
1513 int nice;
1514 int err;
1515
1516 memset(buffer, 0, sizeof(buffer));
1517 if (count > sizeof(buffer) - 1)
1518 count = sizeof(buffer) - 1;
1519 if (copy_from_user(buffer, buf, count))
1520 return -EFAULT;
1521
1522 err = kstrtoint(strstrip(buffer), 0, &nice);
1523 if (err < 0)
1524 return err;
1525
1526 p = get_proc_task(inode);
1527 if (!p)
1528 return -ESRCH;
1529
1530 err = proc_sched_autogroup_set_nice(p, nice);
1531 if (err)
1532 count = err;
1533
1534 put_task_struct(p);
1535
1536 return count;
1537 }
1538
1539 static int sched_autogroup_open(struct inode *inode, struct file *filp)
1540 {
1541 int ret;
1542
1543 ret = single_open(filp, sched_autogroup_show, NULL);
1544 if (!ret) {
1545 struct seq_file *m = filp->private_data;
1546
1547 m->private = inode;
1548 }
1549 return ret;
1550 }
1551
1552 static const struct file_operations proc_pid_sched_autogroup_operations = {
1553 .open = sched_autogroup_open,
1554 .read = seq_read,
1555 .write = sched_autogroup_write,
1556 .llseek = seq_lseek,
1557 .release = single_release,
1558 };
1559
1560 #endif
1561
1562 #ifdef CONFIG_TIME_NS
1563 static int timens_offsets_show(struct seq_file *m, void *v)
1564 {
1565 struct task_struct *p;
1566
1567 p = get_proc_task(file_inode(m->file));
1568 if (!p)
1569 return -ESRCH;
1570 proc_timens_show_offsets(p, m);
1571
1572 put_task_struct(p);
1573
1574 return 0;
1575 }
1576
1577 static ssize_t timens_offsets_write(struct file *file, const char __user *buf,
1578 size_t count, loff_t *ppos)
1579 {
1580 struct inode *inode = file_inode(file);
1581 struct proc_timens_offset offsets[2];
1582 char *kbuf = NULL, *pos, *next_line;
1583 struct task_struct *p;
1584 int ret, noffsets;
1585
1586
1587 if ((*ppos != 0) || (count >= PAGE_SIZE))
1588 return -EINVAL;
1589
1590
1591 kbuf = memdup_user_nul(buf, count);
1592 if (IS_ERR(kbuf))
1593 return PTR_ERR(kbuf);
1594
1595
1596 ret = -EINVAL;
1597 noffsets = 0;
1598 for (pos = kbuf; pos; pos = next_line) {
1599 struct proc_timens_offset *off = &offsets[noffsets];
1600 char clock[10];
1601 int err;
1602
1603
1604 next_line = strchr(pos, '\n');
1605 if (next_line) {
1606 *next_line = '\0';
1607 next_line++;
1608 if (*next_line == '\0')
1609 next_line = NULL;
1610 }
1611
1612 err = sscanf(pos, "%9s %lld %lu", clock,
1613 &off->val.tv_sec, &off->val.tv_nsec);
1614 if (err != 3 || off->val.tv_nsec >= NSEC_PER_SEC)
1615 goto out;
1616
1617 clock[sizeof(clock) - 1] = 0;
1618 if (strcmp(clock, "monotonic") == 0 ||
1619 strcmp(clock, __stringify(CLOCK_MONOTONIC)) == 0)
1620 off->clockid = CLOCK_MONOTONIC;
1621 else if (strcmp(clock, "boottime") == 0 ||
1622 strcmp(clock, __stringify(CLOCK_BOOTTIME)) == 0)
1623 off->clockid = CLOCK_BOOTTIME;
1624 else
1625 goto out;
1626
1627 noffsets++;
1628 if (noffsets == ARRAY_SIZE(offsets)) {
1629 if (next_line)
1630 count = next_line - kbuf;
1631 break;
1632 }
1633 }
1634
1635 ret = -ESRCH;
1636 p = get_proc_task(inode);
1637 if (!p)
1638 goto out;
1639 ret = proc_timens_set_offset(file, p, offsets, noffsets);
1640 put_task_struct(p);
1641 if (ret)
1642 goto out;
1643
1644 ret = count;
1645 out:
1646 kfree(kbuf);
1647 return ret;
1648 }
1649
1650 static int timens_offsets_open(struct inode *inode, struct file *filp)
1651 {
1652 return single_open(filp, timens_offsets_show, inode);
1653 }
1654
1655 static const struct file_operations proc_timens_offsets_operations = {
1656 .open = timens_offsets_open,
1657 .read = seq_read,
1658 .write = timens_offsets_write,
1659 .llseek = seq_lseek,
1660 .release = single_release,
1661 };
1662 #endif
1663
1664 static ssize_t comm_write(struct file *file, const char __user *buf,
1665 size_t count, loff_t *offset)
1666 {
1667 struct inode *inode = file_inode(file);
1668 struct task_struct *p;
1669 char buffer[TASK_COMM_LEN];
1670 const size_t maxlen = sizeof(buffer) - 1;
1671
1672 memset(buffer, 0, sizeof(buffer));
1673 if (copy_from_user(buffer, buf, count > maxlen ? maxlen : count))
1674 return -EFAULT;
1675
1676 p = get_proc_task(inode);
1677 if (!p)
1678 return -ESRCH;
1679
1680 if (same_thread_group(current, p)) {
1681 set_task_comm(p, buffer);
1682 proc_comm_connector(p);
1683 }
1684 else
1685 count = -EINVAL;
1686
1687 put_task_struct(p);
1688
1689 return count;
1690 }
1691
1692 static int comm_show(struct seq_file *m, void *v)
1693 {
1694 struct inode *inode = m->private;
1695 struct task_struct *p;
1696
1697 p = get_proc_task(inode);
1698 if (!p)
1699 return -ESRCH;
1700
1701 proc_task_name(m, p, false);
1702 seq_putc(m, '\n');
1703
1704 put_task_struct(p);
1705
1706 return 0;
1707 }
1708
1709 static int comm_open(struct inode *inode, struct file *filp)
1710 {
1711 return single_open(filp, comm_show, inode);
1712 }
1713
1714 static const struct file_operations proc_pid_set_comm_operations = {
1715 .open = comm_open,
1716 .read = seq_read,
1717 .write = comm_write,
1718 .llseek = seq_lseek,
1719 .release = single_release,
1720 };
1721
1722 static int proc_exe_link(struct dentry *dentry, struct path *exe_path)
1723 {
1724 struct task_struct *task;
1725 struct file *exe_file;
1726
1727 task = get_proc_task(d_inode(dentry));
1728 if (!task)
1729 return -ENOENT;
1730 exe_file = get_task_exe_file(task);
1731 put_task_struct(task);
1732 if (exe_file) {
1733 *exe_path = exe_file->f_path;
1734 path_get(&exe_file->f_path);
1735 fput(exe_file);
1736 return 0;
1737 } else
1738 return -ENOENT;
1739 }
1740
1741 static const char *proc_pid_get_link(struct dentry *dentry,
1742 struct inode *inode,
1743 struct delayed_call *done)
1744 {
1745 struct path path;
1746 int error = -EACCES;
1747
1748 if (!dentry)
1749 return ERR_PTR(-ECHILD);
1750
1751
1752 if (!proc_fd_access_allowed(inode))
1753 goto out;
1754
1755 error = PROC_I(inode)->op.proc_get_link(dentry, &path);
1756 if (error)
1757 goto out;
1758
1759 error = nd_jump_link(&path);
1760 out:
1761 return ERR_PTR(error);
1762 }
1763
1764 static int do_proc_readlink(struct path *path, char __user *buffer, int buflen)
1765 {
1766 char *tmp = kmalloc(PATH_MAX, GFP_KERNEL);
1767 char *pathname;
1768 int len;
1769
1770 if (!tmp)
1771 return -ENOMEM;
1772
1773 pathname = d_path(path, tmp, PATH_MAX);
1774 len = PTR_ERR(pathname);
1775 if (IS_ERR(pathname))
1776 goto out;
1777 len = tmp + PATH_MAX - 1 - pathname;
1778
1779 if (len > buflen)
1780 len = buflen;
1781 if (copy_to_user(buffer, pathname, len))
1782 len = -EFAULT;
1783 out:
1784 kfree(tmp);
1785 return len;
1786 }
1787
1788 static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int buflen)
1789 {
1790 int error = -EACCES;
1791 struct inode *inode = d_inode(dentry);
1792 struct path path;
1793
1794
1795 if (!proc_fd_access_allowed(inode))
1796 goto out;
1797
1798 error = PROC_I(inode)->op.proc_get_link(dentry, &path);
1799 if (error)
1800 goto out;
1801
1802 error = do_proc_readlink(&path, buffer, buflen);
1803 path_put(&path);
1804 out:
1805 return error;
1806 }
1807
1808 const struct inode_operations proc_pid_link_inode_operations = {
1809 .readlink = proc_pid_readlink,
1810 .get_link = proc_pid_get_link,
1811 .setattr = proc_setattr,
1812 };
1813
1814
1815
1816
1817 void task_dump_owner(struct task_struct *task, umode_t mode,
1818 kuid_t *ruid, kgid_t *rgid)
1819 {
1820
1821
1822
1823 const struct cred *cred;
1824 kuid_t uid;
1825 kgid_t gid;
1826
1827 if (unlikely(task->flags & PF_KTHREAD)) {
1828 *ruid = GLOBAL_ROOT_UID;
1829 *rgid = GLOBAL_ROOT_GID;
1830 return;
1831 }
1832
1833
1834 rcu_read_lock();
1835 cred = __task_cred(task);
1836 uid = cred->euid;
1837 gid = cred->egid;
1838 rcu_read_unlock();
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848 if (mode != (S_IFDIR|S_IRUGO|S_IXUGO)) {
1849 struct mm_struct *mm;
1850 task_lock(task);
1851 mm = task->mm;
1852
1853 if (mm) {
1854 if (get_dumpable(mm) != SUID_DUMP_USER) {
1855 struct user_namespace *user_ns = mm->user_ns;
1856
1857 uid = make_kuid(user_ns, 0);
1858 if (!uid_valid(uid))
1859 uid = GLOBAL_ROOT_UID;
1860
1861 gid = make_kgid(user_ns, 0);
1862 if (!gid_valid(gid))
1863 gid = GLOBAL_ROOT_GID;
1864 }
1865 } else {
1866 uid = GLOBAL_ROOT_UID;
1867 gid = GLOBAL_ROOT_GID;
1868 }
1869 task_unlock(task);
1870 }
1871 *ruid = uid;
1872 *rgid = gid;
1873 }
1874
1875 void proc_pid_evict_inode(struct proc_inode *ei)
1876 {
1877 struct pid *pid = ei->pid;
1878
1879 if (S_ISDIR(ei->vfs_inode.i_mode)) {
1880 spin_lock(&pid->lock);
1881 hlist_del_init_rcu(&ei->sibling_inodes);
1882 spin_unlock(&pid->lock);
1883 }
1884
1885 put_pid(pid);
1886 }
1887
1888 struct inode *proc_pid_make_inode(struct super_block *sb,
1889 struct task_struct *task, umode_t mode)
1890 {
1891 struct inode * inode;
1892 struct proc_inode *ei;
1893 struct pid *pid;
1894
1895
1896
1897 inode = new_inode(sb);
1898 if (!inode)
1899 goto out;
1900
1901
1902 ei = PROC_I(inode);
1903 inode->i_mode = mode;
1904 inode->i_ino = get_next_ino();
1905 inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
1906 inode->i_op = &proc_def_inode_operations;
1907
1908
1909
1910
1911 pid = get_task_pid(task, PIDTYPE_PID);
1912 if (!pid)
1913 goto out_unlock;
1914
1915
1916 ei->pid = pid;
1917
1918 task_dump_owner(task, 0, &inode->i_uid, &inode->i_gid);
1919 security_task_to_inode(task, inode);
1920
1921 out:
1922 return inode;
1923
1924 out_unlock:
1925 iput(inode);
1926 return NULL;
1927 }
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941 static struct inode *proc_pid_make_base_inode(struct super_block *sb,
1942 struct task_struct *task, umode_t mode)
1943 {
1944 struct inode *inode;
1945 struct proc_inode *ei;
1946 struct pid *pid;
1947
1948 inode = proc_pid_make_inode(sb, task, mode);
1949 if (!inode)
1950 return NULL;
1951
1952
1953 ei = PROC_I(inode);
1954 pid = ei->pid;
1955 spin_lock(&pid->lock);
1956 hlist_add_head_rcu(&ei->sibling_inodes, &pid->inodes);
1957 spin_unlock(&pid->lock);
1958
1959 return inode;
1960 }
1961
1962 int pid_getattr(struct user_namespace *mnt_userns, const struct path *path,
1963 struct kstat *stat, u32 request_mask, unsigned int query_flags)
1964 {
1965 struct inode *inode = d_inode(path->dentry);
1966 struct proc_fs_info *fs_info = proc_sb_info(inode->i_sb);
1967 struct task_struct *task;
1968
1969 generic_fillattr(&init_user_ns, inode, stat);
1970
1971 stat->uid = GLOBAL_ROOT_UID;
1972 stat->gid = GLOBAL_ROOT_GID;
1973 rcu_read_lock();
1974 task = pid_task(proc_pid(inode), PIDTYPE_PID);
1975 if (task) {
1976 if (!has_pid_permissions(fs_info, task, HIDEPID_INVISIBLE)) {
1977 rcu_read_unlock();
1978
1979
1980
1981
1982 return -ENOENT;
1983 }
1984 task_dump_owner(task, inode->i_mode, &stat->uid, &stat->gid);
1985 }
1986 rcu_read_unlock();
1987 return 0;
1988 }
1989
1990
1991
1992
1993
1994
1995 void pid_update_inode(struct task_struct *task, struct inode *inode)
1996 {
1997 task_dump_owner(task, inode->i_mode, &inode->i_uid, &inode->i_gid);
1998
1999 inode->i_mode &= ~(S_ISUID | S_ISGID);
2000 security_task_to_inode(task, inode);
2001 }
2002
2003
2004
2005
2006
2007
2008 static int pid_revalidate(struct dentry *dentry, unsigned int flags)
2009 {
2010 struct inode *inode;
2011 struct task_struct *task;
2012 int ret = 0;
2013
2014 rcu_read_lock();
2015 inode = d_inode_rcu(dentry);
2016 if (!inode)
2017 goto out;
2018 task = pid_task(proc_pid(inode), PIDTYPE_PID);
2019
2020 if (task) {
2021 pid_update_inode(task, inode);
2022 ret = 1;
2023 }
2024 out:
2025 rcu_read_unlock();
2026 return ret;
2027 }
2028
2029 static inline bool proc_inode_is_dead(struct inode *inode)
2030 {
2031 return !proc_pid(inode)->tasks[PIDTYPE_PID].first;
2032 }
2033
2034 int pid_delete_dentry(const struct dentry *dentry)
2035 {
2036
2037
2038
2039
2040 return proc_inode_is_dead(d_inode(dentry));
2041 }
2042
2043 const struct dentry_operations pid_dentry_operations =
2044 {
2045 .d_revalidate = pid_revalidate,
2046 .d_delete = pid_delete_dentry,
2047 };
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063 bool proc_fill_cache(struct file *file, struct dir_context *ctx,
2064 const char *name, unsigned int len,
2065 instantiate_t instantiate, struct task_struct *task, const void *ptr)
2066 {
2067 struct dentry *child, *dir = file->f_path.dentry;
2068 struct qstr qname = QSTR_INIT(name, len);
2069 struct inode *inode;
2070 unsigned type = DT_UNKNOWN;
2071 ino_t ino = 1;
2072
2073 child = d_hash_and_lookup(dir, &qname);
2074 if (!child) {
2075 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
2076 child = d_alloc_parallel(dir, &qname, &wq);
2077 if (IS_ERR(child))
2078 goto end_instantiate;
2079 if (d_in_lookup(child)) {
2080 struct dentry *res;
2081 res = instantiate(child, task, ptr);
2082 d_lookup_done(child);
2083 if (unlikely(res)) {
2084 dput(child);
2085 child = res;
2086 if (IS_ERR(child))
2087 goto end_instantiate;
2088 }
2089 }
2090 }
2091 inode = d_inode(child);
2092 ino = inode->i_ino;
2093 type = inode->i_mode >> 12;
2094 dput(child);
2095 end_instantiate:
2096 return dir_emit(ctx, name, len, ino, type);
2097 }
2098
2099
2100
2101
2102
2103 static int dname_to_vma_addr(struct dentry *dentry,
2104 unsigned long *start, unsigned long *end)
2105 {
2106 const char *str = dentry->d_name.name;
2107 unsigned long long sval, eval;
2108 unsigned int len;
2109
2110 if (str[0] == '0' && str[1] != '-')
2111 return -EINVAL;
2112 len = _parse_integer(str, 16, &sval);
2113 if (len & KSTRTOX_OVERFLOW)
2114 return -EINVAL;
2115 if (sval != (unsigned long)sval)
2116 return -EINVAL;
2117 str += len;
2118
2119 if (*str != '-')
2120 return -EINVAL;
2121 str++;
2122
2123 if (str[0] == '0' && str[1])
2124 return -EINVAL;
2125 len = _parse_integer(str, 16, &eval);
2126 if (len & KSTRTOX_OVERFLOW)
2127 return -EINVAL;
2128 if (eval != (unsigned long)eval)
2129 return -EINVAL;
2130 str += len;
2131
2132 if (*str != '\0')
2133 return -EINVAL;
2134
2135 *start = sval;
2136 *end = eval;
2137
2138 return 0;
2139 }
2140
2141 static int map_files_d_revalidate(struct dentry *dentry, unsigned int flags)
2142 {
2143 unsigned long vm_start, vm_end;
2144 bool exact_vma_exists = false;
2145 struct mm_struct *mm = NULL;
2146 struct task_struct *task;
2147 struct inode *inode;
2148 int status = 0;
2149
2150 if (flags & LOOKUP_RCU)
2151 return -ECHILD;
2152
2153 inode = d_inode(dentry);
2154 task = get_proc_task(inode);
2155 if (!task)
2156 goto out_notask;
2157
2158 mm = mm_access(task, PTRACE_MODE_READ_FSCREDS);
2159 if (IS_ERR_OR_NULL(mm))
2160 goto out;
2161
2162 if (!dname_to_vma_addr(dentry, &vm_start, &vm_end)) {
2163 status = mmap_read_lock_killable(mm);
2164 if (!status) {
2165 exact_vma_exists = !!find_exact_vma(mm, vm_start,
2166 vm_end);
2167 mmap_read_unlock(mm);
2168 }
2169 }
2170
2171 mmput(mm);
2172
2173 if (exact_vma_exists) {
2174 task_dump_owner(task, 0, &inode->i_uid, &inode->i_gid);
2175
2176 security_task_to_inode(task, inode);
2177 status = 1;
2178 }
2179
2180 out:
2181 put_task_struct(task);
2182
2183 out_notask:
2184 return status;
2185 }
2186
2187 static const struct dentry_operations tid_map_files_dentry_operations = {
2188 .d_revalidate = map_files_d_revalidate,
2189 .d_delete = pid_delete_dentry,
2190 };
2191
2192 static int map_files_get_link(struct dentry *dentry, struct path *path)
2193 {
2194 unsigned long vm_start, vm_end;
2195 struct vm_area_struct *vma;
2196 struct task_struct *task;
2197 struct mm_struct *mm;
2198 int rc;
2199
2200 rc = -ENOENT;
2201 task = get_proc_task(d_inode(dentry));
2202 if (!task)
2203 goto out;
2204
2205 mm = get_task_mm(task);
2206 put_task_struct(task);
2207 if (!mm)
2208 goto out;
2209
2210 rc = dname_to_vma_addr(dentry, &vm_start, &vm_end);
2211 if (rc)
2212 goto out_mmput;
2213
2214 rc = mmap_read_lock_killable(mm);
2215 if (rc)
2216 goto out_mmput;
2217
2218 rc = -ENOENT;
2219 vma = find_exact_vma(mm, vm_start, vm_end);
2220 if (vma && vma->vm_file) {
2221 *path = vma->vm_file->f_path;
2222 path_get(path);
2223 rc = 0;
2224 }
2225 mmap_read_unlock(mm);
2226
2227 out_mmput:
2228 mmput(mm);
2229 out:
2230 return rc;
2231 }
2232
2233 struct map_files_info {
2234 unsigned long start;
2235 unsigned long end;
2236 fmode_t mode;
2237 };
2238
2239
2240
2241
2242
2243
2244 static const char *
2245 proc_map_files_get_link(struct dentry *dentry,
2246 struct inode *inode,
2247 struct delayed_call *done)
2248 {
2249 if (!checkpoint_restore_ns_capable(&init_user_ns))
2250 return ERR_PTR(-EPERM);
2251
2252 return proc_pid_get_link(dentry, inode, done);
2253 }
2254
2255
2256
2257
2258 static const struct inode_operations proc_map_files_link_inode_operations = {
2259 .readlink = proc_pid_readlink,
2260 .get_link = proc_map_files_get_link,
2261 .setattr = proc_setattr,
2262 };
2263
2264 static struct dentry *
2265 proc_map_files_instantiate(struct dentry *dentry,
2266 struct task_struct *task, const void *ptr)
2267 {
2268 fmode_t mode = (fmode_t)(unsigned long)ptr;
2269 struct proc_inode *ei;
2270 struct inode *inode;
2271
2272 inode = proc_pid_make_inode(dentry->d_sb, task, S_IFLNK |
2273 ((mode & FMODE_READ ) ? S_IRUSR : 0) |
2274 ((mode & FMODE_WRITE) ? S_IWUSR : 0));
2275 if (!inode)
2276 return ERR_PTR(-ENOENT);
2277
2278 ei = PROC_I(inode);
2279 ei->op.proc_get_link = map_files_get_link;
2280
2281 inode->i_op = &proc_map_files_link_inode_operations;
2282 inode->i_size = 64;
2283
2284 d_set_d_op(dentry, &tid_map_files_dentry_operations);
2285 return d_splice_alias(inode, dentry);
2286 }
2287
2288 static struct dentry *proc_map_files_lookup(struct inode *dir,
2289 struct dentry *dentry, unsigned int flags)
2290 {
2291 unsigned long vm_start, vm_end;
2292 struct vm_area_struct *vma;
2293 struct task_struct *task;
2294 struct dentry *result;
2295 struct mm_struct *mm;
2296
2297 result = ERR_PTR(-ENOENT);
2298 task = get_proc_task(dir);
2299 if (!task)
2300 goto out;
2301
2302 result = ERR_PTR(-EACCES);
2303 if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS))
2304 goto out_put_task;
2305
2306 result = ERR_PTR(-ENOENT);
2307 if (dname_to_vma_addr(dentry, &vm_start, &vm_end))
2308 goto out_put_task;
2309
2310 mm = get_task_mm(task);
2311 if (!mm)
2312 goto out_put_task;
2313
2314 result = ERR_PTR(-EINTR);
2315 if (mmap_read_lock_killable(mm))
2316 goto out_put_mm;
2317
2318 result = ERR_PTR(-ENOENT);
2319 vma = find_exact_vma(mm, vm_start, vm_end);
2320 if (!vma)
2321 goto out_no_vma;
2322
2323 if (vma->vm_file)
2324 result = proc_map_files_instantiate(dentry, task,
2325 (void *)(unsigned long)vma->vm_file->f_mode);
2326
2327 out_no_vma:
2328 mmap_read_unlock(mm);
2329 out_put_mm:
2330 mmput(mm);
2331 out_put_task:
2332 put_task_struct(task);
2333 out:
2334 return result;
2335 }
2336
2337 static const struct inode_operations proc_map_files_inode_operations = {
2338 .lookup = proc_map_files_lookup,
2339 .permission = proc_fd_permission,
2340 .setattr = proc_setattr,
2341 };
2342
2343 static int
2344 proc_map_files_readdir(struct file *file, struct dir_context *ctx)
2345 {
2346 struct vm_area_struct *vma;
2347 struct task_struct *task;
2348 struct mm_struct *mm;
2349 unsigned long nr_files, pos, i;
2350 GENRADIX(struct map_files_info) fa;
2351 struct map_files_info *p;
2352 int ret;
2353
2354 genradix_init(&fa);
2355
2356 ret = -ENOENT;
2357 task = get_proc_task(file_inode(file));
2358 if (!task)
2359 goto out;
2360
2361 ret = -EACCES;
2362 if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS))
2363 goto out_put_task;
2364
2365 ret = 0;
2366 if (!dir_emit_dots(file, ctx))
2367 goto out_put_task;
2368
2369 mm = get_task_mm(task);
2370 if (!mm)
2371 goto out_put_task;
2372
2373 ret = mmap_read_lock_killable(mm);
2374 if (ret) {
2375 mmput(mm);
2376 goto out_put_task;
2377 }
2378
2379 nr_files = 0;
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391 for (vma = mm->mmap, pos = 2; vma; vma = vma->vm_next) {
2392 if (!vma->vm_file)
2393 continue;
2394 if (++pos <= ctx->pos)
2395 continue;
2396
2397 p = genradix_ptr_alloc(&fa, nr_files++, GFP_KERNEL);
2398 if (!p) {
2399 ret = -ENOMEM;
2400 mmap_read_unlock(mm);
2401 mmput(mm);
2402 goto out_put_task;
2403 }
2404
2405 p->start = vma->vm_start;
2406 p->end = vma->vm_end;
2407 p->mode = vma->vm_file->f_mode;
2408 }
2409 mmap_read_unlock(mm);
2410 mmput(mm);
2411
2412 for (i = 0; i < nr_files; i++) {
2413 char buf[4 * sizeof(long) + 2];
2414 unsigned int len;
2415
2416 p = genradix_ptr(&fa, i);
2417 len = snprintf(buf, sizeof(buf), "%lx-%lx", p->start, p->end);
2418 if (!proc_fill_cache(file, ctx,
2419 buf, len,
2420 proc_map_files_instantiate,
2421 task,
2422 (void *)(unsigned long)p->mode))
2423 break;
2424 ctx->pos++;
2425 }
2426
2427 out_put_task:
2428 put_task_struct(task);
2429 out:
2430 genradix_free(&fa);
2431 return ret;
2432 }
2433
2434 static const struct file_operations proc_map_files_operations = {
2435 .read = generic_read_dir,
2436 .iterate_shared = proc_map_files_readdir,
2437 .llseek = generic_file_llseek,
2438 };
2439
2440 #if defined(CONFIG_CHECKPOINT_RESTORE) && defined(CONFIG_POSIX_TIMERS)
2441 struct timers_private {
2442 struct pid *pid;
2443 struct task_struct *task;
2444 struct sighand_struct *sighand;
2445 struct pid_namespace *ns;
2446 unsigned long flags;
2447 };
2448
2449 static void *timers_start(struct seq_file *m, loff_t *pos)
2450 {
2451 struct timers_private *tp = m->private;
2452
2453 tp->task = get_pid_task(tp->pid, PIDTYPE_PID);
2454 if (!tp->task)
2455 return ERR_PTR(-ESRCH);
2456
2457 tp->sighand = lock_task_sighand(tp->task, &tp->flags);
2458 if (!tp->sighand)
2459 return ERR_PTR(-ESRCH);
2460
2461 return seq_list_start(&tp->task->signal->posix_timers, *pos);
2462 }
2463
2464 static void *timers_next(struct seq_file *m, void *v, loff_t *pos)
2465 {
2466 struct timers_private *tp = m->private;
2467 return seq_list_next(v, &tp->task->signal->posix_timers, pos);
2468 }
2469
2470 static void timers_stop(struct seq_file *m, void *v)
2471 {
2472 struct timers_private *tp = m->private;
2473
2474 if (tp->sighand) {
2475 unlock_task_sighand(tp->task, &tp->flags);
2476 tp->sighand = NULL;
2477 }
2478
2479 if (tp->task) {
2480 put_task_struct(tp->task);
2481 tp->task = NULL;
2482 }
2483 }
2484
2485 static int show_timer(struct seq_file *m, void *v)
2486 {
2487 struct k_itimer *timer;
2488 struct timers_private *tp = m->private;
2489 int notify;
2490 static const char * const nstr[] = {
2491 [SIGEV_SIGNAL] = "signal",
2492 [SIGEV_NONE] = "none",
2493 [SIGEV_THREAD] = "thread",
2494 };
2495
2496 timer = list_entry((struct list_head *)v, struct k_itimer, list);
2497 notify = timer->it_sigev_notify;
2498
2499 seq_printf(m, "ID: %d\n", timer->it_id);
2500 seq_printf(m, "signal: %d/%px\n",
2501 timer->sigq->info.si_signo,
2502 timer->sigq->info.si_value.sival_ptr);
2503 seq_printf(m, "notify: %s/%s.%d\n",
2504 nstr[notify & ~SIGEV_THREAD_ID],
2505 (notify & SIGEV_THREAD_ID) ? "tid" : "pid",
2506 pid_nr_ns(timer->it_pid, tp->ns));
2507 seq_printf(m, "ClockID: %d\n", timer->it_clock);
2508
2509 return 0;
2510 }
2511
2512 static const struct seq_operations proc_timers_seq_ops = {
2513 .start = timers_start,
2514 .next = timers_next,
2515 .stop = timers_stop,
2516 .show = show_timer,
2517 };
2518
2519 static int proc_timers_open(struct inode *inode, struct file *file)
2520 {
2521 struct timers_private *tp;
2522
2523 tp = __seq_open_private(file, &proc_timers_seq_ops,
2524 sizeof(struct timers_private));
2525 if (!tp)
2526 return -ENOMEM;
2527
2528 tp->pid = proc_pid(inode);
2529 tp->ns = proc_pid_ns(inode->i_sb);
2530 return 0;
2531 }
2532
2533 static const struct file_operations proc_timers_operations = {
2534 .open = proc_timers_open,
2535 .read = seq_read,
2536 .llseek = seq_lseek,
2537 .release = seq_release_private,
2538 };
2539 #endif
2540
2541 static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
2542 size_t count, loff_t *offset)
2543 {
2544 struct inode *inode = file_inode(file);
2545 struct task_struct *p;
2546 u64 slack_ns;
2547 int err;
2548
2549 err = kstrtoull_from_user(buf, count, 10, &slack_ns);
2550 if (err < 0)
2551 return err;
2552
2553 p = get_proc_task(inode);
2554 if (!p)
2555 return -ESRCH;
2556
2557 if (p != current) {
2558 rcu_read_lock();
2559 if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) {
2560 rcu_read_unlock();
2561 count = -EPERM;
2562 goto out;
2563 }
2564 rcu_read_unlock();
2565
2566 err = security_task_setscheduler(p);
2567 if (err) {
2568 count = err;
2569 goto out;
2570 }
2571 }
2572
2573 task_lock(p);
2574 if (slack_ns == 0)
2575 p->timer_slack_ns = p->default_timer_slack_ns;
2576 else
2577 p->timer_slack_ns = slack_ns;
2578 task_unlock(p);
2579
2580 out:
2581 put_task_struct(p);
2582
2583 return count;
2584 }
2585
2586 static int timerslack_ns_show(struct seq_file *m, void *v)
2587 {
2588 struct inode *inode = m->private;
2589 struct task_struct *p;
2590 int err = 0;
2591
2592 p = get_proc_task(inode);
2593 if (!p)
2594 return -ESRCH;
2595
2596 if (p != current) {
2597 rcu_read_lock();
2598 if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) {
2599 rcu_read_unlock();
2600 err = -EPERM;
2601 goto out;
2602 }
2603 rcu_read_unlock();
2604
2605 err = security_task_getscheduler(p);
2606 if (err)
2607 goto out;
2608 }
2609
2610 task_lock(p);
2611 seq_printf(m, "%llu\n", p->timer_slack_ns);
2612 task_unlock(p);
2613
2614 out:
2615 put_task_struct(p);
2616
2617 return err;
2618 }
2619
2620 static int timerslack_ns_open(struct inode *inode, struct file *filp)
2621 {
2622 return single_open(filp, timerslack_ns_show, inode);
2623 }
2624
2625 static const struct file_operations proc_pid_set_timerslack_ns_operations = {
2626 .open = timerslack_ns_open,
2627 .read = seq_read,
2628 .write = timerslack_ns_write,
2629 .llseek = seq_lseek,
2630 .release = single_release,
2631 };
2632
2633 static struct dentry *proc_pident_instantiate(struct dentry *dentry,
2634 struct task_struct *task, const void *ptr)
2635 {
2636 const struct pid_entry *p = ptr;
2637 struct inode *inode;
2638 struct proc_inode *ei;
2639
2640 inode = proc_pid_make_inode(dentry->d_sb, task, p->mode);
2641 if (!inode)
2642 return ERR_PTR(-ENOENT);
2643
2644 ei = PROC_I(inode);
2645 if (S_ISDIR(inode->i_mode))
2646 set_nlink(inode, 2);
2647 if (p->iop)
2648 inode->i_op = p->iop;
2649 if (p->fop)
2650 inode->i_fop = p->fop;
2651 ei->op = p->op;
2652 pid_update_inode(task, inode);
2653 d_set_d_op(dentry, &pid_dentry_operations);
2654 return d_splice_alias(inode, dentry);
2655 }
2656
2657 static struct dentry *proc_pident_lookup(struct inode *dir,
2658 struct dentry *dentry,
2659 const struct pid_entry *p,
2660 const struct pid_entry *end)
2661 {
2662 struct task_struct *task = get_proc_task(dir);
2663 struct dentry *res = ERR_PTR(-ENOENT);
2664
2665 if (!task)
2666 goto out_no_task;
2667
2668
2669
2670
2671
2672 for (; p < end; p++) {
2673 if (p->len != dentry->d_name.len)
2674 continue;
2675 if (!memcmp(dentry->d_name.name, p->name, p->len)) {
2676 res = proc_pident_instantiate(dentry, task, p);
2677 break;
2678 }
2679 }
2680 put_task_struct(task);
2681 out_no_task:
2682 return res;
2683 }
2684
2685 static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
2686 const struct pid_entry *ents, unsigned int nents)
2687 {
2688 struct task_struct *task = get_proc_task(file_inode(file));
2689 const struct pid_entry *p;
2690
2691 if (!task)
2692 return -ENOENT;
2693
2694 if (!dir_emit_dots(file, ctx))
2695 goto out;
2696
2697 if (ctx->pos >= nents + 2)
2698 goto out;
2699
2700 for (p = ents + (ctx->pos - 2); p < ents + nents; p++) {
2701 if (!proc_fill_cache(file, ctx, p->name, p->len,
2702 proc_pident_instantiate, task, p))
2703 break;
2704 ctx->pos++;
2705 }
2706 out:
2707 put_task_struct(task);
2708 return 0;
2709 }
2710
2711 #ifdef CONFIG_SECURITY
2712 static int proc_pid_attr_open(struct inode *inode, struct file *file)
2713 {
2714 file->private_data = NULL;
2715 __mem_open(inode, file, PTRACE_MODE_READ_FSCREDS);
2716 return 0;
2717 }
2718
2719 static ssize_t proc_pid_attr_read(struct file * file, char __user * buf,
2720 size_t count, loff_t *ppos)
2721 {
2722 struct inode * inode = file_inode(file);
2723 char *p = NULL;
2724 ssize_t length;
2725 struct task_struct *task = get_proc_task(inode);
2726
2727 if (!task)
2728 return -ESRCH;
2729
2730 length = security_getprocattr(task, PROC_I(inode)->op.lsm,
2731 (char*)file->f_path.dentry->d_name.name,
2732 &p);
2733 put_task_struct(task);
2734 if (length > 0)
2735 length = simple_read_from_buffer(buf, count, ppos, p, length);
2736 kfree(p);
2737 return length;
2738 }
2739
2740 static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf,
2741 size_t count, loff_t *ppos)
2742 {
2743 struct inode * inode = file_inode(file);
2744 struct task_struct *task;
2745 void *page;
2746 int rv;
2747
2748
2749 if (file->private_data != current->mm)
2750 return -EPERM;
2751
2752 rcu_read_lock();
2753 task = pid_task(proc_pid(inode), PIDTYPE_PID);
2754 if (!task) {
2755 rcu_read_unlock();
2756 return -ESRCH;
2757 }
2758
2759 if (current != task) {
2760 rcu_read_unlock();
2761 return -EACCES;
2762 }
2763
2764 if (current_cred() != current_real_cred()) {
2765 rcu_read_unlock();
2766 return -EBUSY;
2767 }
2768 rcu_read_unlock();
2769
2770 if (count > PAGE_SIZE)
2771 count = PAGE_SIZE;
2772
2773
2774 if (*ppos != 0)
2775 return -EINVAL;
2776
2777 page = memdup_user(buf, count);
2778 if (IS_ERR(page)) {
2779 rv = PTR_ERR(page);
2780 goto out;
2781 }
2782
2783
2784 rv = mutex_lock_interruptible(¤t->signal->cred_guard_mutex);
2785 if (rv < 0)
2786 goto out_free;
2787
2788 rv = security_setprocattr(PROC_I(inode)->op.lsm,
2789 file->f_path.dentry->d_name.name, page,
2790 count);
2791 mutex_unlock(¤t->signal->cred_guard_mutex);
2792 out_free:
2793 kfree(page);
2794 out:
2795 return rv;
2796 }
2797
2798 static const struct file_operations proc_pid_attr_operations = {
2799 .open = proc_pid_attr_open,
2800 .read = proc_pid_attr_read,
2801 .write = proc_pid_attr_write,
2802 .llseek = generic_file_llseek,
2803 .release = mem_release,
2804 };
2805
2806 #define LSM_DIR_OPS(LSM) \
2807 static int proc_##LSM##_attr_dir_iterate(struct file *filp, \
2808 struct dir_context *ctx) \
2809 { \
2810 return proc_pident_readdir(filp, ctx, \
2811 LSM##_attr_dir_stuff, \
2812 ARRAY_SIZE(LSM##_attr_dir_stuff)); \
2813 } \
2814 \
2815 static const struct file_operations proc_##LSM##_attr_dir_ops = { \
2816 .read = generic_read_dir, \
2817 .iterate = proc_##LSM##_attr_dir_iterate, \
2818 .llseek = default_llseek, \
2819 }; \
2820 \
2821 static struct dentry *proc_##LSM##_attr_dir_lookup(struct inode *dir, \
2822 struct dentry *dentry, unsigned int flags) \
2823 { \
2824 return proc_pident_lookup(dir, dentry, \
2825 LSM##_attr_dir_stuff, \
2826 LSM##_attr_dir_stuff + ARRAY_SIZE(LSM##_attr_dir_stuff)); \
2827 } \
2828 \
2829 static const struct inode_operations proc_##LSM##_attr_dir_inode_ops = { \
2830 .lookup = proc_##LSM##_attr_dir_lookup, \
2831 .getattr = pid_getattr, \
2832 .setattr = proc_setattr, \
2833 }
2834
2835 #ifdef CONFIG_SECURITY_SMACK
2836 static const struct pid_entry smack_attr_dir_stuff[] = {
2837 ATTR("smack", "current", 0666),
2838 };
2839 LSM_DIR_OPS(smack);
2840 #endif
2841
2842 #ifdef CONFIG_SECURITY_APPARMOR
2843 static const struct pid_entry apparmor_attr_dir_stuff[] = {
2844 ATTR("apparmor", "current", 0666),
2845 ATTR("apparmor", "prev", 0444),
2846 ATTR("apparmor", "exec", 0666),
2847 };
2848 LSM_DIR_OPS(apparmor);
2849 #endif
2850
2851 static const struct pid_entry attr_dir_stuff[] = {
2852 ATTR(NULL, "current", 0666),
2853 ATTR(NULL, "prev", 0444),
2854 ATTR(NULL, "exec", 0666),
2855 ATTR(NULL, "fscreate", 0666),
2856 ATTR(NULL, "keycreate", 0666),
2857 ATTR(NULL, "sockcreate", 0666),
2858 #ifdef CONFIG_SECURITY_SMACK
2859 DIR("smack", 0555,
2860 proc_smack_attr_dir_inode_ops, proc_smack_attr_dir_ops),
2861 #endif
2862 #ifdef CONFIG_SECURITY_APPARMOR
2863 DIR("apparmor", 0555,
2864 proc_apparmor_attr_dir_inode_ops, proc_apparmor_attr_dir_ops),
2865 #endif
2866 };
2867
2868 static int proc_attr_dir_readdir(struct file *file, struct dir_context *ctx)
2869 {
2870 return proc_pident_readdir(file, ctx,
2871 attr_dir_stuff, ARRAY_SIZE(attr_dir_stuff));
2872 }
2873
2874 static const struct file_operations proc_attr_dir_operations = {
2875 .read = generic_read_dir,
2876 .iterate_shared = proc_attr_dir_readdir,
2877 .llseek = generic_file_llseek,
2878 };
2879
2880 static struct dentry *proc_attr_dir_lookup(struct inode *dir,
2881 struct dentry *dentry, unsigned int flags)
2882 {
2883 return proc_pident_lookup(dir, dentry,
2884 attr_dir_stuff,
2885 attr_dir_stuff + ARRAY_SIZE(attr_dir_stuff));
2886 }
2887
2888 static const struct inode_operations proc_attr_dir_inode_operations = {
2889 .lookup = proc_attr_dir_lookup,
2890 .getattr = pid_getattr,
2891 .setattr = proc_setattr,
2892 };
2893
2894 #endif
2895
2896 #ifdef CONFIG_ELF_CORE
2897 static ssize_t proc_coredump_filter_read(struct file *file, char __user *buf,
2898 size_t count, loff_t *ppos)
2899 {
2900 struct task_struct *task = get_proc_task(file_inode(file));
2901 struct mm_struct *mm;
2902 char buffer[PROC_NUMBUF];
2903 size_t len;
2904 int ret;
2905
2906 if (!task)
2907 return -ESRCH;
2908
2909 ret = 0;
2910 mm = get_task_mm(task);
2911 if (mm) {
2912 len = snprintf(buffer, sizeof(buffer), "%08lx\n",
2913 ((mm->flags & MMF_DUMP_FILTER_MASK) >>
2914 MMF_DUMP_FILTER_SHIFT));
2915 mmput(mm);
2916 ret = simple_read_from_buffer(buf, count, ppos, buffer, len);
2917 }
2918
2919 put_task_struct(task);
2920
2921 return ret;
2922 }
2923
2924 static ssize_t proc_coredump_filter_write(struct file *file,
2925 const char __user *buf,
2926 size_t count,
2927 loff_t *ppos)
2928 {
2929 struct task_struct *task;
2930 struct mm_struct *mm;
2931 unsigned int val;
2932 int ret;
2933 int i;
2934 unsigned long mask;
2935
2936 ret = kstrtouint_from_user(buf, count, 0, &val);
2937 if (ret < 0)
2938 return ret;
2939
2940 ret = -ESRCH;
2941 task = get_proc_task(file_inode(file));
2942 if (!task)
2943 goto out_no_task;
2944
2945 mm = get_task_mm(task);
2946 if (!mm)
2947 goto out_no_mm;
2948 ret = 0;
2949
2950 for (i = 0, mask = 1; i < MMF_DUMP_FILTER_BITS; i++, mask <<= 1) {
2951 if (val & mask)
2952 set_bit(i + MMF_DUMP_FILTER_SHIFT, &mm->flags);
2953 else
2954 clear_bit(i + MMF_DUMP_FILTER_SHIFT, &mm->flags);
2955 }
2956
2957 mmput(mm);
2958 out_no_mm:
2959 put_task_struct(task);
2960 out_no_task:
2961 if (ret < 0)
2962 return ret;
2963 return count;
2964 }
2965
2966 static const struct file_operations proc_coredump_filter_operations = {
2967 .read = proc_coredump_filter_read,
2968 .write = proc_coredump_filter_write,
2969 .llseek = generic_file_llseek,
2970 };
2971 #endif
2972
2973 #ifdef CONFIG_TASK_IO_ACCOUNTING
2974 static int do_io_accounting(struct task_struct *task, struct seq_file *m, int whole)
2975 {
2976 struct task_io_accounting acct = task->ioac;
2977 unsigned long flags;
2978 int result;
2979
2980 result = down_read_killable(&task->signal->exec_update_lock);
2981 if (result)
2982 return result;
2983
2984 if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS)) {
2985 result = -EACCES;
2986 goto out_unlock;
2987 }
2988
2989 if (whole && lock_task_sighand(task, &flags)) {
2990 struct task_struct *t = task;
2991
2992 task_io_accounting_add(&acct, &task->signal->ioac);
2993 while_each_thread(task, t)
2994 task_io_accounting_add(&acct, &t->ioac);
2995
2996 unlock_task_sighand(task, &flags);
2997 }
2998 seq_printf(m,
2999 "rchar: %llu\n"
3000 "wchar: %llu\n"
3001 "syscr: %llu\n"
3002 "syscw: %llu\n"
3003 "read_bytes: %llu\n"
3004 "write_bytes: %llu\n"
3005 "cancelled_write_bytes: %llu\n",
3006 (unsigned long long)acct.rchar,
3007 (unsigned long long)acct.wchar,
3008 (unsigned long long)acct.syscr,
3009 (unsigned long long)acct.syscw,
3010 (unsigned long long)acct.read_bytes,
3011 (unsigned long long)acct.write_bytes,
3012 (unsigned long long)acct.cancelled_write_bytes);
3013 result = 0;
3014
3015 out_unlock:
3016 up_read(&task->signal->exec_update_lock);
3017 return result;
3018 }
3019
3020 static int proc_tid_io_accounting(struct seq_file *m, struct pid_namespace *ns,
3021 struct pid *pid, struct task_struct *task)
3022 {
3023 return do_io_accounting(task, m, 0);
3024 }
3025
3026 static int proc_tgid_io_accounting(struct seq_file *m, struct pid_namespace *ns,
3027 struct pid *pid, struct task_struct *task)
3028 {
3029 return do_io_accounting(task, m, 1);
3030 }
3031 #endif
3032
3033 #ifdef CONFIG_USER_NS
3034 static int proc_id_map_open(struct inode *inode, struct file *file,
3035 const struct seq_operations *seq_ops)
3036 {
3037 struct user_namespace *ns = NULL;
3038 struct task_struct *task;
3039 struct seq_file *seq;
3040 int ret = -EINVAL;
3041
3042 task = get_proc_task(inode);
3043 if (task) {
3044 rcu_read_lock();
3045 ns = get_user_ns(task_cred_xxx(task, user_ns));
3046 rcu_read_unlock();
3047 put_task_struct(task);
3048 }
3049 if (!ns)
3050 goto err;
3051
3052 ret = seq_open(file, seq_ops);
3053 if (ret)
3054 goto err_put_ns;
3055
3056 seq = file->private_data;
3057 seq->private = ns;
3058
3059 return 0;
3060 err_put_ns:
3061 put_user_ns(ns);
3062 err:
3063 return ret;
3064 }
3065
3066 static int proc_id_map_release(struct inode *inode, struct file *file)
3067 {
3068 struct seq_file *seq = file->private_data;
3069 struct user_namespace *ns = seq->private;
3070 put_user_ns(ns);
3071 return seq_release(inode, file);
3072 }
3073
3074 static int proc_uid_map_open(struct inode *inode, struct file *file)
3075 {
3076 return proc_id_map_open(inode, file, &proc_uid_seq_operations);
3077 }
3078
3079 static int proc_gid_map_open(struct inode *inode, struct file *file)
3080 {
3081 return proc_id_map_open(inode, file, &proc_gid_seq_operations);
3082 }
3083
3084 static int proc_projid_map_open(struct inode *inode, struct file *file)
3085 {
3086 return proc_id_map_open(inode, file, &proc_projid_seq_operations);
3087 }
3088
3089 static const struct file_operations proc_uid_map_operations = {
3090 .open = proc_uid_map_open,
3091 .write = proc_uid_map_write,
3092 .read = seq_read,
3093 .llseek = seq_lseek,
3094 .release = proc_id_map_release,
3095 };
3096
3097 static const struct file_operations proc_gid_map_operations = {
3098 .open = proc_gid_map_open,
3099 .write = proc_gid_map_write,
3100 .read = seq_read,
3101 .llseek = seq_lseek,
3102 .release = proc_id_map_release,
3103 };
3104
3105 static const struct file_operations proc_projid_map_operations = {
3106 .open = proc_projid_map_open,
3107 .write = proc_projid_map_write,
3108 .read = seq_read,
3109 .llseek = seq_lseek,
3110 .release = proc_id_map_release,
3111 };
3112
3113 static int proc_setgroups_open(struct inode *inode, struct file *file)
3114 {
3115 struct user_namespace *ns = NULL;
3116 struct task_struct *task;
3117 int ret;
3118
3119 ret = -ESRCH;
3120 task = get_proc_task(inode);
3121 if (task) {
3122 rcu_read_lock();
3123 ns = get_user_ns(task_cred_xxx(task, user_ns));
3124 rcu_read_unlock();
3125 put_task_struct(task);
3126 }
3127 if (!ns)
3128 goto err;
3129
3130 if (file->f_mode & FMODE_WRITE) {
3131 ret = -EACCES;
3132 if (!ns_capable(ns, CAP_SYS_ADMIN))
3133 goto err_put_ns;
3134 }
3135
3136 ret = single_open(file, &proc_setgroups_show, ns);
3137 if (ret)
3138 goto err_put_ns;
3139
3140 return 0;
3141 err_put_ns:
3142 put_user_ns(ns);
3143 err:
3144 return ret;
3145 }
3146
3147 static int proc_setgroups_release(struct inode *inode, struct file *file)
3148 {
3149 struct seq_file *seq = file->private_data;
3150 struct user_namespace *ns = seq->private;
3151 int ret = single_release(inode, file);
3152 put_user_ns(ns);
3153 return ret;
3154 }
3155
3156 static const struct file_operations proc_setgroups_operations = {
3157 .open = proc_setgroups_open,
3158 .write = proc_setgroups_write,
3159 .read = seq_read,
3160 .llseek = seq_lseek,
3161 .release = proc_setgroups_release,
3162 };
3163 #endif
3164
3165 static int proc_pid_personality(struct seq_file *m, struct pid_namespace *ns,
3166 struct pid *pid, struct task_struct *task)
3167 {
3168 int err = lock_trace(task);
3169 if (!err) {
3170 seq_printf(m, "%08x\n", task->personality);
3171 unlock_trace(task);
3172 }
3173 return err;
3174 }
3175
3176 #ifdef CONFIG_LIVEPATCH
3177 static int proc_pid_patch_state(struct seq_file *m, struct pid_namespace *ns,
3178 struct pid *pid, struct task_struct *task)
3179 {
3180 seq_printf(m, "%d\n", task->patch_state);
3181 return 0;
3182 }
3183 #endif
3184
3185 #ifdef CONFIG_KSM
3186 static int proc_pid_ksm_merging_pages(struct seq_file *m, struct pid_namespace *ns,
3187 struct pid *pid, struct task_struct *task)
3188 {
3189 struct mm_struct *mm;
3190
3191 mm = get_task_mm(task);
3192 if (mm) {
3193 seq_printf(m, "%lu\n", mm->ksm_merging_pages);
3194 mmput(mm);
3195 }
3196
3197 return 0;
3198 }
3199 #endif
3200
3201 #ifdef CONFIG_STACKLEAK_METRICS
3202 static int proc_stack_depth(struct seq_file *m, struct pid_namespace *ns,
3203 struct pid *pid, struct task_struct *task)
3204 {
3205 unsigned long prev_depth = THREAD_SIZE -
3206 (task->prev_lowest_stack & (THREAD_SIZE - 1));
3207 unsigned long depth = THREAD_SIZE -
3208 (task->lowest_stack & (THREAD_SIZE - 1));
3209
3210 seq_printf(m, "previous stack depth: %lu\nstack depth: %lu\n",
3211 prev_depth, depth);
3212 return 0;
3213 }
3214 #endif
3215
3216
3217
3218
3219 static const struct file_operations proc_task_operations;
3220 static const struct inode_operations proc_task_inode_operations;
3221
3222 static const struct pid_entry tgid_base_stuff[] = {
3223 DIR("task", S_IRUGO|S_IXUGO, proc_task_inode_operations, proc_task_operations),
3224 DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
3225 DIR("map_files", S_IRUSR|S_IXUSR, proc_map_files_inode_operations, proc_map_files_operations),
3226 DIR("fdinfo", S_IRUGO|S_IXUGO, proc_fdinfo_inode_operations, proc_fdinfo_operations),
3227 DIR("ns", S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations),
3228 #ifdef CONFIG_NET
3229 DIR("net", S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations),
3230 #endif
3231 REG("environ", S_IRUSR, proc_environ_operations),
3232 REG("auxv", S_IRUSR, proc_auxv_operations),
3233 ONE("status", S_IRUGO, proc_pid_status),
3234 ONE("personality", S_IRUSR, proc_pid_personality),
3235 ONE("limits", S_IRUGO, proc_pid_limits),
3236 #ifdef CONFIG_SCHED_DEBUG
3237 REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations),
3238 #endif
3239 #ifdef CONFIG_SCHED_AUTOGROUP
3240 REG("autogroup", S_IRUGO|S_IWUSR, proc_pid_sched_autogroup_operations),
3241 #endif
3242 #ifdef CONFIG_TIME_NS
3243 REG("timens_offsets", S_IRUGO|S_IWUSR, proc_timens_offsets_operations),
3244 #endif
3245 REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
3246 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
3247 ONE("syscall", S_IRUSR, proc_pid_syscall),
3248 #endif
3249 REG("cmdline", S_IRUGO, proc_pid_cmdline_ops),
3250 ONE("stat", S_IRUGO, proc_tgid_stat),
3251 ONE("statm", S_IRUGO, proc_pid_statm),
3252 REG("maps", S_IRUGO, proc_pid_maps_operations),
3253 #ifdef CONFIG_NUMA
3254 REG("numa_maps", S_IRUGO, proc_pid_numa_maps_operations),
3255 #endif
3256 REG("mem", S_IRUSR|S_IWUSR, proc_mem_operations),
3257 LNK("cwd", proc_cwd_link),
3258 LNK("root", proc_root_link),
3259 LNK("exe", proc_exe_link),
3260 REG("mounts", S_IRUGO, proc_mounts_operations),
3261 REG("mountinfo", S_IRUGO, proc_mountinfo_operations),
3262 REG("mountstats", S_IRUSR, proc_mountstats_operations),
3263 #ifdef CONFIG_PROC_PAGE_MONITOR
3264 REG("clear_refs", S_IWUSR, proc_clear_refs_operations),
3265 REG("smaps", S_IRUGO, proc_pid_smaps_operations),
3266 REG("smaps_rollup", S_IRUGO, proc_pid_smaps_rollup_operations),
3267 REG("pagemap", S_IRUSR, proc_pagemap_operations),
3268 #endif
3269 #ifdef CONFIG_SECURITY
3270 DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
3271 #endif
3272 #ifdef CONFIG_KALLSYMS
3273 ONE("wchan", S_IRUGO, proc_pid_wchan),
3274 #endif
3275 #ifdef CONFIG_STACKTRACE
3276 ONE("stack", S_IRUSR, proc_pid_stack),
3277 #endif
3278 #ifdef CONFIG_SCHED_INFO
3279 ONE("schedstat", S_IRUGO, proc_pid_schedstat),
3280 #endif
3281 #ifdef CONFIG_LATENCYTOP
3282 REG("latency", S_IRUGO, proc_lstats_operations),
3283 #endif
3284 #ifdef CONFIG_PROC_PID_CPUSET
3285 ONE("cpuset", S_IRUGO, proc_cpuset_show),
3286 #endif
3287 #ifdef CONFIG_CGROUPS
3288 ONE("cgroup", S_IRUGO, proc_cgroup_show),
3289 #endif
3290 #ifdef CONFIG_PROC_CPU_RESCTRL
3291 ONE("cpu_resctrl_groups", S_IRUGO, proc_resctrl_show),
3292 #endif
3293 ONE("oom_score", S_IRUGO, proc_oom_score),
3294 REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adj_operations),
3295 REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
3296 #ifdef CONFIG_AUDIT
3297 REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
3298 REG("sessionid", S_IRUGO, proc_sessionid_operations),
3299 #endif
3300 #ifdef CONFIG_FAULT_INJECTION
3301 REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations),
3302 REG("fail-nth", 0644, proc_fail_nth_operations),
3303 #endif
3304 #ifdef CONFIG_ELF_CORE
3305 REG("coredump_filter", S_IRUGO|S_IWUSR, proc_coredump_filter_operations),
3306 #endif
3307 #ifdef CONFIG_TASK_IO_ACCOUNTING
3308 ONE("io", S_IRUSR, proc_tgid_io_accounting),
3309 #endif
3310 #ifdef CONFIG_USER_NS
3311 REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations),
3312 REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
3313 REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
3314 REG("setgroups", S_IRUGO|S_IWUSR, proc_setgroups_operations),
3315 #endif
3316 #if defined(CONFIG_CHECKPOINT_RESTORE) && defined(CONFIG_POSIX_TIMERS)
3317 REG("timers", S_IRUGO, proc_timers_operations),
3318 #endif
3319 REG("timerslack_ns", S_IRUGO|S_IWUGO, proc_pid_set_timerslack_ns_operations),
3320 #ifdef CONFIG_LIVEPATCH
3321 ONE("patch_state", S_IRUSR, proc_pid_patch_state),
3322 #endif
3323 #ifdef CONFIG_STACKLEAK_METRICS
3324 ONE("stack_depth", S_IRUGO, proc_stack_depth),
3325 #endif
3326 #ifdef CONFIG_PROC_PID_ARCH_STATUS
3327 ONE("arch_status", S_IRUGO, proc_pid_arch_status),
3328 #endif
3329 #ifdef CONFIG_SECCOMP_CACHE_DEBUG
3330 ONE("seccomp_cache", S_IRUSR, proc_pid_seccomp_cache),
3331 #endif
3332 #ifdef CONFIG_KSM
3333 ONE("ksm_merging_pages", S_IRUSR, proc_pid_ksm_merging_pages),
3334 #endif
3335 };
3336
3337 static int proc_tgid_base_readdir(struct file *file, struct dir_context *ctx)
3338 {
3339 return proc_pident_readdir(file, ctx,
3340 tgid_base_stuff, ARRAY_SIZE(tgid_base_stuff));
3341 }
3342
3343 static const struct file_operations proc_tgid_base_operations = {
3344 .read = generic_read_dir,
3345 .iterate_shared = proc_tgid_base_readdir,
3346 .llseek = generic_file_llseek,
3347 };
3348
3349 struct pid *tgid_pidfd_to_pid(const struct file *file)
3350 {
3351 if (file->f_op != &proc_tgid_base_operations)
3352 return ERR_PTR(-EBADF);
3353
3354 return proc_pid(file_inode(file));
3355 }
3356
3357 static struct dentry *proc_tgid_base_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
3358 {
3359 return proc_pident_lookup(dir, dentry,
3360 tgid_base_stuff,
3361 tgid_base_stuff + ARRAY_SIZE(tgid_base_stuff));
3362 }
3363
3364 static const struct inode_operations proc_tgid_base_inode_operations = {
3365 .lookup = proc_tgid_base_lookup,
3366 .getattr = pid_getattr,
3367 .setattr = proc_setattr,
3368 .permission = proc_pid_permission,
3369 };
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390 void proc_flush_pid(struct pid *pid)
3391 {
3392 proc_invalidate_siblings_dcache(&pid->inodes, &pid->lock);
3393 }
3394
3395 static struct dentry *proc_pid_instantiate(struct dentry * dentry,
3396 struct task_struct *task, const void *ptr)
3397 {
3398 struct inode *inode;
3399
3400 inode = proc_pid_make_base_inode(dentry->d_sb, task,
3401 S_IFDIR | S_IRUGO | S_IXUGO);
3402 if (!inode)
3403 return ERR_PTR(-ENOENT);
3404
3405 inode->i_op = &proc_tgid_base_inode_operations;
3406 inode->i_fop = &proc_tgid_base_operations;
3407 inode->i_flags|=S_IMMUTABLE;
3408
3409 set_nlink(inode, nlink_tgid);
3410 pid_update_inode(task, inode);
3411
3412 d_set_d_op(dentry, &pid_dentry_operations);
3413 return d_splice_alias(inode, dentry);
3414 }
3415
3416 struct dentry *proc_pid_lookup(struct dentry *dentry, unsigned int flags)
3417 {
3418 struct task_struct *task;
3419 unsigned tgid;
3420 struct proc_fs_info *fs_info;
3421 struct pid_namespace *ns;
3422 struct dentry *result = ERR_PTR(-ENOENT);
3423
3424 tgid = name_to_int(&dentry->d_name);
3425 if (tgid == ~0U)
3426 goto out;
3427
3428 fs_info = proc_sb_info(dentry->d_sb);
3429 ns = fs_info->pid_ns;
3430 rcu_read_lock();
3431 task = find_task_by_pid_ns(tgid, ns);
3432 if (task)
3433 get_task_struct(task);
3434 rcu_read_unlock();
3435 if (!task)
3436 goto out;
3437
3438
3439 if (fs_info->hide_pid == HIDEPID_NOT_PTRACEABLE) {
3440 if (!has_pid_permissions(fs_info, task, HIDEPID_NO_ACCESS))
3441 goto out_put_task;
3442 }
3443
3444 result = proc_pid_instantiate(dentry, task, NULL);
3445 out_put_task:
3446 put_task_struct(task);
3447 out:
3448 return result;
3449 }
3450
3451
3452
3453
3454
3455 struct tgid_iter {
3456 unsigned int tgid;
3457 struct task_struct *task;
3458 };
3459 static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter iter)
3460 {
3461 struct pid *pid;
3462
3463 if (iter.task)
3464 put_task_struct(iter.task);
3465 rcu_read_lock();
3466 retry:
3467 iter.task = NULL;
3468 pid = find_ge_pid(iter.tgid, ns);
3469 if (pid) {
3470 iter.tgid = pid_nr_ns(pid, ns);
3471 iter.task = pid_task(pid, PIDTYPE_TGID);
3472 if (!iter.task) {
3473 iter.tgid += 1;
3474 goto retry;
3475 }
3476 get_task_struct(iter.task);
3477 }
3478 rcu_read_unlock();
3479 return iter;
3480 }
3481
3482 #define TGID_OFFSET (FIRST_PROCESS_ENTRY + 2)
3483
3484
3485 int proc_pid_readdir(struct file *file, struct dir_context *ctx)
3486 {
3487 struct tgid_iter iter;
3488 struct proc_fs_info *fs_info = proc_sb_info(file_inode(file)->i_sb);
3489 struct pid_namespace *ns = proc_pid_ns(file_inode(file)->i_sb);
3490 loff_t pos = ctx->pos;
3491
3492 if (pos >= PID_MAX_LIMIT + TGID_OFFSET)
3493 return 0;
3494
3495 if (pos == TGID_OFFSET - 2) {
3496 struct inode *inode = d_inode(fs_info->proc_self);
3497 if (!dir_emit(ctx, "self", 4, inode->i_ino, DT_LNK))
3498 return 0;
3499 ctx->pos = pos = pos + 1;
3500 }
3501 if (pos == TGID_OFFSET - 1) {
3502 struct inode *inode = d_inode(fs_info->proc_thread_self);
3503 if (!dir_emit(ctx, "thread-self", 11, inode->i_ino, DT_LNK))
3504 return 0;
3505 ctx->pos = pos = pos + 1;
3506 }
3507 iter.tgid = pos - TGID_OFFSET;
3508 iter.task = NULL;
3509 for (iter = next_tgid(ns, iter);
3510 iter.task;
3511 iter.tgid += 1, iter = next_tgid(ns, iter)) {
3512 char name[10 + 1];
3513 unsigned int len;
3514
3515 cond_resched();
3516 if (!has_pid_permissions(fs_info, iter.task, HIDEPID_INVISIBLE))
3517 continue;
3518
3519 len = snprintf(name, sizeof(name), "%u", iter.tgid);
3520 ctx->pos = iter.tgid + TGID_OFFSET;
3521 if (!proc_fill_cache(file, ctx, name, len,
3522 proc_pid_instantiate, iter.task, NULL)) {
3523 put_task_struct(iter.task);
3524 return 0;
3525 }
3526 }
3527 ctx->pos = PID_MAX_LIMIT + TGID_OFFSET;
3528 return 0;
3529 }
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543 static int proc_tid_comm_permission(struct user_namespace *mnt_userns,
3544 struct inode *inode, int mask)
3545 {
3546 bool is_same_tgroup;
3547 struct task_struct *task;
3548
3549 task = get_proc_task(inode);
3550 if (!task)
3551 return -ESRCH;
3552 is_same_tgroup = same_thread_group(current, task);
3553 put_task_struct(task);
3554
3555 if (likely(is_same_tgroup && !(mask & MAY_EXEC))) {
3556
3557
3558
3559
3560 return 0;
3561 }
3562
3563 return generic_permission(&init_user_ns, inode, mask);
3564 }
3565
3566 static const struct inode_operations proc_tid_comm_inode_operations = {
3567 .permission = proc_tid_comm_permission,
3568 };
3569
3570
3571
3572
3573 static const struct pid_entry tid_base_stuff[] = {
3574 DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
3575 DIR("fdinfo", S_IRUGO|S_IXUGO, proc_fdinfo_inode_operations, proc_fdinfo_operations),
3576 DIR("ns", S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations),
3577 #ifdef CONFIG_NET
3578 DIR("net", S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations),
3579 #endif
3580 REG("environ", S_IRUSR, proc_environ_operations),
3581 REG("auxv", S_IRUSR, proc_auxv_operations),
3582 ONE("status", S_IRUGO, proc_pid_status),
3583 ONE("personality", S_IRUSR, proc_pid_personality),
3584 ONE("limits", S_IRUGO, proc_pid_limits),
3585 #ifdef CONFIG_SCHED_DEBUG
3586 REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations),
3587 #endif
3588 NOD("comm", S_IFREG|S_IRUGO|S_IWUSR,
3589 &proc_tid_comm_inode_operations,
3590 &proc_pid_set_comm_operations, {}),
3591 #ifdef CONFIG_HAVE_ARCH_TRACEHOOK
3592 ONE("syscall", S_IRUSR, proc_pid_syscall),
3593 #endif
3594 REG("cmdline", S_IRUGO, proc_pid_cmdline_ops),
3595 ONE("stat", S_IRUGO, proc_tid_stat),
3596 ONE("statm", S_IRUGO, proc_pid_statm),
3597 REG("maps", S_IRUGO, proc_pid_maps_operations),
3598 #ifdef CONFIG_PROC_CHILDREN
3599 REG("children", S_IRUGO, proc_tid_children_operations),
3600 #endif
3601 #ifdef CONFIG_NUMA
3602 REG("numa_maps", S_IRUGO, proc_pid_numa_maps_operations),
3603 #endif
3604 REG("mem", S_IRUSR|S_IWUSR, proc_mem_operations),
3605 LNK("cwd", proc_cwd_link),
3606 LNK("root", proc_root_link),
3607 LNK("exe", proc_exe_link),
3608 REG("mounts", S_IRUGO, proc_mounts_operations),
3609 REG("mountinfo", S_IRUGO, proc_mountinfo_operations),
3610 #ifdef CONFIG_PROC_PAGE_MONITOR
3611 REG("clear_refs", S_IWUSR, proc_clear_refs_operations),
3612 REG("smaps", S_IRUGO, proc_pid_smaps_operations),
3613 REG("smaps_rollup", S_IRUGO, proc_pid_smaps_rollup_operations),
3614 REG("pagemap", S_IRUSR, proc_pagemap_operations),
3615 #endif
3616 #ifdef CONFIG_SECURITY
3617 DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
3618 #endif
3619 #ifdef CONFIG_KALLSYMS
3620 ONE("wchan", S_IRUGO, proc_pid_wchan),
3621 #endif
3622 #ifdef CONFIG_STACKTRACE
3623 ONE("stack", S_IRUSR, proc_pid_stack),
3624 #endif
3625 #ifdef CONFIG_SCHED_INFO
3626 ONE("schedstat", S_IRUGO, proc_pid_schedstat),
3627 #endif
3628 #ifdef CONFIG_LATENCYTOP
3629 REG("latency", S_IRUGO, proc_lstats_operations),
3630 #endif
3631 #ifdef CONFIG_PROC_PID_CPUSET
3632 ONE("cpuset", S_IRUGO, proc_cpuset_show),
3633 #endif
3634 #ifdef CONFIG_CGROUPS
3635 ONE("cgroup", S_IRUGO, proc_cgroup_show),
3636 #endif
3637 #ifdef CONFIG_PROC_CPU_RESCTRL
3638 ONE("cpu_resctrl_groups", S_IRUGO, proc_resctrl_show),
3639 #endif
3640 ONE("oom_score", S_IRUGO, proc_oom_score),
3641 REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adj_operations),
3642 REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
3643 #ifdef CONFIG_AUDIT
3644 REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
3645 REG("sessionid", S_IRUGO, proc_sessionid_operations),
3646 #endif
3647 #ifdef CONFIG_FAULT_INJECTION
3648 REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations),
3649 REG("fail-nth", 0644, proc_fail_nth_operations),
3650 #endif
3651 #ifdef CONFIG_TASK_IO_ACCOUNTING
3652 ONE("io", S_IRUSR, proc_tid_io_accounting),
3653 #endif
3654 #ifdef CONFIG_USER_NS
3655 REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations),
3656 REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
3657 REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
3658 REG("setgroups", S_IRUGO|S_IWUSR, proc_setgroups_operations),
3659 #endif
3660 #ifdef CONFIG_LIVEPATCH
3661 ONE("patch_state", S_IRUSR, proc_pid_patch_state),
3662 #endif
3663 #ifdef CONFIG_PROC_PID_ARCH_STATUS
3664 ONE("arch_status", S_IRUGO, proc_pid_arch_status),
3665 #endif
3666 #ifdef CONFIG_SECCOMP_CACHE_DEBUG
3667 ONE("seccomp_cache", S_IRUSR, proc_pid_seccomp_cache),
3668 #endif
3669 #ifdef CONFIG_KSM
3670 ONE("ksm_merging_pages", S_IRUSR, proc_pid_ksm_merging_pages),
3671 #endif
3672 };
3673
3674 static int proc_tid_base_readdir(struct file *file, struct dir_context *ctx)
3675 {
3676 return proc_pident_readdir(file, ctx,
3677 tid_base_stuff, ARRAY_SIZE(tid_base_stuff));
3678 }
3679
3680 static struct dentry *proc_tid_base_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
3681 {
3682 return proc_pident_lookup(dir, dentry,
3683 tid_base_stuff,
3684 tid_base_stuff + ARRAY_SIZE(tid_base_stuff));
3685 }
3686
3687 static const struct file_operations proc_tid_base_operations = {
3688 .read = generic_read_dir,
3689 .iterate_shared = proc_tid_base_readdir,
3690 .llseek = generic_file_llseek,
3691 };
3692
3693 static const struct inode_operations proc_tid_base_inode_operations = {
3694 .lookup = proc_tid_base_lookup,
3695 .getattr = pid_getattr,
3696 .setattr = proc_setattr,
3697 };
3698
3699 static struct dentry *proc_task_instantiate(struct dentry *dentry,
3700 struct task_struct *task, const void *ptr)
3701 {
3702 struct inode *inode;
3703 inode = proc_pid_make_base_inode(dentry->d_sb, task,
3704 S_IFDIR | S_IRUGO | S_IXUGO);
3705 if (!inode)
3706 return ERR_PTR(-ENOENT);
3707
3708 inode->i_op = &proc_tid_base_inode_operations;
3709 inode->i_fop = &proc_tid_base_operations;
3710 inode->i_flags |= S_IMMUTABLE;
3711
3712 set_nlink(inode, nlink_tid);
3713 pid_update_inode(task, inode);
3714
3715 d_set_d_op(dentry, &pid_dentry_operations);
3716 return d_splice_alias(inode, dentry);
3717 }
3718
3719 static struct dentry *proc_task_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags)
3720 {
3721 struct task_struct *task;
3722 struct task_struct *leader = get_proc_task(dir);
3723 unsigned tid;
3724 struct proc_fs_info *fs_info;
3725 struct pid_namespace *ns;
3726 struct dentry *result = ERR_PTR(-ENOENT);
3727
3728 if (!leader)
3729 goto out_no_task;
3730
3731 tid = name_to_int(&dentry->d_name);
3732 if (tid == ~0U)
3733 goto out;
3734
3735 fs_info = proc_sb_info(dentry->d_sb);
3736 ns = fs_info->pid_ns;
3737 rcu_read_lock();
3738 task = find_task_by_pid_ns(tid, ns);
3739 if (task)
3740 get_task_struct(task);
3741 rcu_read_unlock();
3742 if (!task)
3743 goto out;
3744 if (!same_thread_group(leader, task))
3745 goto out_drop_task;
3746
3747 result = proc_task_instantiate(dentry, task, NULL);
3748 out_drop_task:
3749 put_task_struct(task);
3750 out:
3751 put_task_struct(leader);
3752 out_no_task:
3753 return result;
3754 }
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768 static struct task_struct *first_tid(struct pid *pid, int tid, loff_t f_pos,
3769 struct pid_namespace *ns)
3770 {
3771 struct task_struct *pos, *task;
3772 unsigned long nr = f_pos;
3773
3774 if (nr != f_pos)
3775 return NULL;
3776
3777 rcu_read_lock();
3778 task = pid_task(pid, PIDTYPE_PID);
3779 if (!task)
3780 goto fail;
3781
3782
3783 if (tid && nr) {
3784 pos = find_task_by_pid_ns(tid, ns);
3785 if (pos && same_thread_group(pos, task))
3786 goto found;
3787 }
3788
3789
3790 if (nr >= get_nr_threads(task))
3791 goto fail;
3792
3793
3794
3795
3796 pos = task = task->group_leader;
3797 do {
3798 if (!nr--)
3799 goto found;
3800 } while_each_thread(task, pos);
3801 fail:
3802 pos = NULL;
3803 goto out;
3804 found:
3805 get_task_struct(pos);
3806 out:
3807 rcu_read_unlock();
3808 return pos;
3809 }
3810
3811
3812
3813
3814
3815
3816
3817 static struct task_struct *next_tid(struct task_struct *start)
3818 {
3819 struct task_struct *pos = NULL;
3820 rcu_read_lock();
3821 if (pid_alive(start)) {
3822 pos = next_thread(start);
3823 if (thread_group_leader(pos))
3824 pos = NULL;
3825 else
3826 get_task_struct(pos);
3827 }
3828 rcu_read_unlock();
3829 put_task_struct(start);
3830 return pos;
3831 }
3832
3833
3834 static int proc_task_readdir(struct file *file, struct dir_context *ctx)
3835 {
3836 struct inode *inode = file_inode(file);
3837 struct task_struct *task;
3838 struct pid_namespace *ns;
3839 int tid;
3840
3841 if (proc_inode_is_dead(inode))
3842 return -ENOENT;
3843
3844 if (!dir_emit_dots(file, ctx))
3845 return 0;
3846
3847
3848
3849
3850 ns = proc_pid_ns(inode->i_sb);
3851 tid = (int)file->f_version;
3852 file->f_version = 0;
3853 for (task = first_tid(proc_pid(inode), tid, ctx->pos - 2, ns);
3854 task;
3855 task = next_tid(task), ctx->pos++) {
3856 char name[10 + 1];
3857 unsigned int len;
3858
3859 tid = task_pid_nr_ns(task, ns);
3860 if (!tid)
3861 continue;
3862 len = snprintf(name, sizeof(name), "%u", tid);
3863 if (!proc_fill_cache(file, ctx, name, len,
3864 proc_task_instantiate, task, NULL)) {
3865
3866
3867 file->f_version = (u64)tid;
3868 put_task_struct(task);
3869 break;
3870 }
3871 }
3872
3873 return 0;
3874 }
3875
3876 static int proc_task_getattr(struct user_namespace *mnt_userns,
3877 const struct path *path, struct kstat *stat,
3878 u32 request_mask, unsigned int query_flags)
3879 {
3880 struct inode *inode = d_inode(path->dentry);
3881 struct task_struct *p = get_proc_task(inode);
3882 generic_fillattr(&init_user_ns, inode, stat);
3883
3884 if (p) {
3885 stat->nlink += get_nr_threads(p);
3886 put_task_struct(p);
3887 }
3888
3889 return 0;
3890 }
3891
3892 static const struct inode_operations proc_task_inode_operations = {
3893 .lookup = proc_task_lookup,
3894 .getattr = proc_task_getattr,
3895 .setattr = proc_setattr,
3896 .permission = proc_pid_permission,
3897 };
3898
3899 static const struct file_operations proc_task_operations = {
3900 .read = generic_read_dir,
3901 .iterate_shared = proc_task_readdir,
3902 .llseek = generic_file_llseek,
3903 };
3904
3905 void __init set_proc_pid_nlink(void)
3906 {
3907 nlink_tid = pid_entry_nlink(tid_base_stuff, ARRAY_SIZE(tid_base_stuff));
3908 nlink_tgid = pid_entry_nlink(tgid_base_stuff, ARRAY_SIZE(tgid_base_stuff));
3909 }