Lines Matching +full:de +full:- +full:serialized

1 // SPDX-License-Identifier: GPL-2.0
9 * 1999, Al Viro. Rewritten. Now it covers the whole per-process part.
11 * we allocate and fill in-core inodes upon lookup. They don't even
18 * 17-Jan-2005
25 * Embedded Linux Lab - 10LE Instituto Nokia de Tecnologia - INdT
35 * 21-Feb-2005
36 * Embedded Linux Lab - 10LE Instituto Nokia de Tecnologia - INdT
40 * 10-Mar-2005
41 * 10LE Instituto Nokia de Tecnologia - INdT:
61 #include <linux/generic-radix-tree.h>
95 #include <linux/posix-timers.h>
141 return -EINVAL; in early_proc_mem_force_override()
165 .len = sizeof(NAME) - 1, \
210 int result = -ENOENT; in get_task_root()
213 if (task->fs) { in get_task_root()
214 get_fs_root(task->fs, root); in get_task_root()
224 int result = -ENOENT; in proc_cwd_link()
228 if (task->fs) { in proc_cwd_link()
229 get_fs_pwd(task->fs, path); in proc_cwd_link()
241 int result = -ENOENT; in proc_root_link()
266 return -ENOMEM; in get_mm_proctitle()
278 len -= pos; in get_mm_proctitle()
281 len -= copy_to_user(buf, page+pos, len); in get_mm_proctitle()
283 len = -EFAULT; in get_mm_proctitle()
299 if (!mm->env_end) in get_mm_cmdline()
302 spin_lock(&mm->arg_lock); in get_mm_cmdline()
303 arg_start = mm->arg_start; in get_mm_cmdline()
304 arg_end = mm->arg_end; in get_mm_cmdline()
305 env_start = mm->env_start; in get_mm_cmdline()
306 env_end = mm->env_end; in get_mm_cmdline()
307 spin_unlock(&mm->arg_lock); in get_mm_cmdline()
319 len = env_end - arg_start; in get_mm_cmdline()
325 if (count > len - pos) in get_mm_cmdline()
326 count = len - pos; in get_mm_cmdline()
337 if (access_remote_vm(mm, arg_end-1, &c, 1, FOLL_ANON) == 1 && c) in get_mm_cmdline()
341 * For the non-setproctitle() case we limit things strictly in get_mm_cmdline()
347 if (count > arg_end - pos) in get_mm_cmdline()
348 count = arg_end - pos; in get_mm_cmdline()
352 return -ENOMEM; in get_mm_cmdline()
362 got -= copy_to_user(buf, page, got); in get_mm_cmdline()
365 len = -EFAULT; in get_mm_cmdline()
371 count -= got; in get_mm_cmdline()
403 return -ESRCH; in proc_pid_cmdline_read()
418 * Provides a wchan file via kallsyms in a proper one-value-per-file format.
444 int err = down_read_killable(&task->signal->exec_update_lock); in lock_trace()
448 up_read(&task->signal->exec_update_lock); in lock_trace()
449 return -EPERM; in lock_trace()
456 up_read(&task->signal->exec_update_lock); in unlock_trace()
480 if (!file_ns_capable(m->file, &init_user_ns, CAP_SYS_ADMIN)) in proc_pid_stack()
481 return -EACCES; in proc_pid_stack()
486 return -ENOMEM; in proc_pid_stack()
518 (unsigned long long)task->se.sum_exec_runtime, in proc_pid_schedstat()
519 (unsigned long long)task->sched_info.run_delay, in proc_pid_schedstat()
520 task->sched_info.pcount); in proc_pid_schedstat()
530 struct inode *inode = m->private; in lstats_show_proc()
534 return -ESRCH; in lstats_show_proc()
537 struct latency_record *lr = &task->latency_record[i]; in lstats_show_proc()
538 if (lr->backtrace[0]) { in lstats_show_proc()
541 lr->count, lr->time, lr->max); in lstats_show_proc()
543 unsigned long bt = lr->backtrace[q]; in lstats_show_proc()
568 return -ESRCH; in lstats_write()
641 memcpy(rlim, task->signal->rlim, sizeof(struct rlimit) * RLIM_NLIMITS); in proc_pid_limits()
654 seq_printf(m, "%-25s %-20s ", in proc_pid_limits()
657 seq_printf(m, "%-25s %-20lu ", in proc_pid_limits()
661 seq_printf(m, "%-20s ", "unlimited"); in proc_pid_limits()
663 seq_printf(m, "%-20lu ", rlim[i].rlim_max); in proc_pid_limits()
666 seq_printf(m, "%-10s\n", lnames[i].unit); in proc_pid_limits()
730 if (attr->ia_valid & ATTR_MODE) in proc_setattr()
731 return -EPERM; in proc_setattr()
754 if (fs_info->hide_pid == HIDEPID_NOT_PTRACEABLE) in has_pid_permissions()
757 if (fs_info->hide_pid < hide_pid_min) in has_pid_permissions()
759 if (in_group_p(fs_info->pid_gid)) in has_pid_permissions()
768 struct proc_fs_info *fs_info = proc_sb_info(inode->i_sb); in proc_pid_permission()
774 return -ESRCH; in proc_pid_permission()
779 if (fs_info->hide_pid == HIDEPID_INVISIBLE) { in proc_pid_permission()
786 return -ENOENT; in proc_pid_permission()
789 return -EPERM; in proc_pid_permission()
802 struct inode *inode = m->private; in proc_single_show()
803 struct pid_namespace *ns = proc_pid_ns(inode->i_sb); in proc_single_show()
810 return -ESRCH; in proc_single_show()
812 ret = PROC_I(inode)->op.proc_show(m, ns, pid, task); in proc_single_show()
837 return ERR_PTR(-ESRCH); in proc_mem_open()
843 return mm == ERR_PTR(-ESRCH) ? NULL : mm; in proc_mem_open()
860 file->private_data = mm; in __mem_open()
866 if (WARN_ON_ONCE(!(file->f_op->fop_flags & FOP_UNSIGNED_OFFSET))) in mem_open()
867 return -EINVAL; in mem_open()
882 ptrace_active = READ_ONCE(task->ptrace) && in proc_mem_foll_force()
883 READ_ONCE(task->mm) == mm && in proc_mem_foll_force()
884 READ_ONCE(task->parent) == current; in proc_mem_foll_force()
896 struct mm_struct *mm = file->private_data; in mem_rw()
907 return -ENOMEM; in mem_rw()
921 copied = -EFAULT; in mem_rw()
928 copied = -EIO; in mem_rw()
933 copied = -EFAULT; in mem_rw()
940 count -= this_len; in mem_rw()
966 file->f_pos = offset; in mem_lseek()
969 file->f_pos += offset; in mem_lseek()
972 return -EINVAL; in mem_lseek()
975 return file->f_pos; in mem_lseek()
980 struct mm_struct *mm = file->private_data; in mem_release()
1006 struct mm_struct *mm = file->private_data; in environ_read()
1010 if (!mm || !mm->env_end) in environ_read()
1015 return -ENOMEM; in environ_read()
1021 spin_lock(&mm->arg_lock); in environ_read()
1022 env_start = mm->env_start; in environ_read()
1023 env_end = mm->env_end; in environ_read()
1024 spin_unlock(&mm->arg_lock); in environ_read()
1030 if (src >= (env_end - env_start)) in environ_read()
1033 this_len = env_end - (env_start + src); in environ_read()
1046 ret = -EFAULT; in environ_read()
1053 count -= retval; in environ_read()
1078 struct mm_struct *mm = file->private_data; in auxv_read()
1085 } while (mm->saved_auxv[nwords - 2] != 0); /* AT_NULL */ in auxv_read()
1086 return simple_read_from_buffer(buf, count, ppos, mm->saved_auxv, in auxv_read()
1087 nwords * sizeof(mm->saved_auxv[0])); in auxv_read()
1106 return -ESRCH; in oom_adj_read()
1107 if (task->signal->oom_score_adj == OOM_SCORE_ADJ_MAX) in oom_adj_read()
1110 oom_adj = (task->signal->oom_score_adj * -OOM_DISABLE) / in oom_adj_read()
1127 return -ESRCH; in __set_oom_adj()
1131 if (oom_adj < task->signal->oom_score_adj && in __set_oom_adj()
1133 err = -EACCES; in __set_oom_adj()
1141 current->comm, task_pid_nr(current), task_pid_nr(task), in __set_oom_adj()
1144 if ((short)oom_adj < task->signal->oom_score_adj_min && in __set_oom_adj()
1146 err = -EACCES; in __set_oom_adj()
1156 if (!task->vfork_done) { in __set_oom_adj()
1160 if (test_bit(MMF_MULTIPROCESS, &p->mm->flags)) { in __set_oom_adj()
1161 mm = p->mm; in __set_oom_adj()
1168 task->signal->oom_score_adj = oom_adj; in __set_oom_adj()
1170 task->signal->oom_score_adj_min = (short)oom_adj; in __set_oom_adj()
1182 if (p->flags & PF_KTHREAD || is_global_init(p)) in __set_oom_adj()
1186 if (!p->vfork_done && process_shares_mm(p, mm)) { in __set_oom_adj()
1187 p->signal->oom_score_adj = oom_adj; in __set_oom_adj()
1189 p->signal->oom_score_adj_min = (short)oom_adj; in __set_oom_adj()
1219 if (count > sizeof(buffer) - 1) in oom_adj_write()
1220 count = sizeof(buffer) - 1; in oom_adj_write()
1222 err = -EFAULT; in oom_adj_write()
1231 err = -EINVAL; in oom_adj_write()
1242 oom_adj = (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE; in oom_adj_write()
1264 return -ESRCH; in oom_score_adj_read()
1265 oom_score_adj = task->signal->oom_score_adj; in oom_score_adj_read()
1278 if (count > sizeof(buffer) - 1) in oom_score_adj_write()
1279 count = sizeof(buffer) - 1; in oom_score_adj_write()
1281 err = -EFAULT; in oom_score_adj_write()
1290 err = -EINVAL; in oom_score_adj_write()
1316 return -ESRCH; in proc_loginuid_read()
1318 from_kuid(file->f_cred->user_ns, in proc_loginuid_read()
1333 if (current->flags & PF_KTHREAD) in proc_loginuid_write()
1334 return -EPERM; in proc_loginuid_write()
1339 return -EPERM; in proc_loginuid_write()
1345 return -EINVAL; in proc_loginuid_write()
1356 kloginuid = make_kuid(file->f_cred->user_ns, loginuid); in proc_loginuid_write()
1358 return -EINVAL; in proc_loginuid_write()
1382 return -ESRCH; in proc_sessionid_read()
1405 return -ESRCH; in proc_fault_inject_read()
1406 make_it_fail = task->make_it_fail; in proc_fault_inject_read()
1423 return -EPERM; in proc_fault_inject_write()
1425 if (count > sizeof(buffer) - 1) in proc_fault_inject_write()
1426 count = sizeof(buffer) - 1; in proc_fault_inject_write()
1428 return -EFAULT; in proc_fault_inject_write()
1433 return -EINVAL; in proc_fault_inject_write()
1437 return -ESRCH; in proc_fault_inject_write()
1438 task->make_it_fail = make_it_fail; in proc_fault_inject_write()
1463 return -ESRCH; in proc_fail_nth_write()
1464 task->fail_nth = n; in proc_fail_nth_write()
1479 return -ESRCH; in proc_fail_nth_read()
1480 len = snprintf(numbuf, sizeof(numbuf), "%u\n", task->fail_nth); in proc_fail_nth_read()
1494 * Print out various scheduling related per-task fields:
1498 struct inode *inode = m->private; in sched_show()
1499 struct pid_namespace *ns = proc_pid_ns(inode->i_sb); in sched_show()
1504 return -ESRCH; in sched_show()
1521 return -ESRCH; in sched_write()
1550 struct inode *inode = m->private; in sched_autogroup_show()
1555 return -ESRCH; in sched_autogroup_show()
1573 if (count > sizeof(buffer) - 1) in sched_autogroup_write()
1574 count = sizeof(buffer) - 1; in sched_autogroup_write()
1576 return -EFAULT; in sched_autogroup_write()
1584 return -ESRCH; in sched_autogroup_write()
1601 struct seq_file *m = filp->private_data; in sched_autogroup_open()
1603 m->private = inode; in sched_autogroup_open()
1623 p = get_proc_task(file_inode(m->file)); in timens_offsets_show()
1625 return -ESRCH; in timens_offsets_show()
1644 return -EINVAL; in timens_offsets_write()
1652 ret = -EINVAL; in timens_offsets_write()
1669 &off->val.tv_sec, &off->val.tv_nsec); in timens_offsets_write()
1670 if (err != 3 || off->val.tv_nsec >= NSEC_PER_SEC) in timens_offsets_write()
1673 clock[sizeof(clock) - 1] = 0; in timens_offsets_write()
1676 off->clockid = CLOCK_MONOTONIC; in timens_offsets_write()
1679 off->clockid = CLOCK_BOOTTIME; in timens_offsets_write()
1686 count = next_line - kbuf; in timens_offsets_write()
1691 ret = -ESRCH; in timens_offsets_write()
1726 const size_t maxlen = sizeof(buffer) - 1; in comm_write()
1729 return -EFAULT; in comm_write()
1733 return -ESRCH; in comm_write()
1740 count = -EINVAL; in comm_write()
1749 struct inode *inode = m->private; in comm_show()
1754 return -ESRCH; in comm_show()
1784 return -ENOENT; in proc_exe_link()
1788 *exe_path = exe_file->f_path; in proc_exe_link()
1789 path_get(&exe_file->f_path); in proc_exe_link()
1793 return -ENOENT; in proc_exe_link()
1801 int error = -EACCES; in proc_pid_get_link()
1804 return ERR_PTR(-ECHILD); in proc_pid_get_link()
1810 error = PROC_I(inode)->op.proc_get_link(dentry, &path); in proc_pid_get_link()
1826 return -ENOMEM; in do_proc_readlink()
1832 len = tmp + PATH_MAX - 1 - pathname; in do_proc_readlink()
1837 len = -EFAULT; in do_proc_readlink()
1845 int error = -EACCES; in proc_pid_readlink()
1853 error = PROC_I(inode)->op.proc_get_link(dentry, &path); in proc_pid_readlink()
1882 if (unlikely(task->flags & PF_KTHREAD)) { in task_dump_owner()
1891 uid = cred->euid; in task_dump_owner()
1892 gid = cred->egid; in task_dump_owner()
1906 mm = task->mm; in task_dump_owner()
1907 /* Make non-dumpable tasks owned by some root */ in task_dump_owner()
1910 struct user_namespace *user_ns = mm->user_ns; in task_dump_owner()
1932 struct pid *pid = ei->pid; in proc_pid_evict_inode()
1934 if (S_ISDIR(ei->vfs_inode.i_mode)) { in proc_pid_evict_inode()
1935 spin_lock(&pid->lock); in proc_pid_evict_inode()
1936 hlist_del_init_rcu(&ei->sibling_inodes); in proc_pid_evict_inode()
1937 spin_unlock(&pid->lock); in proc_pid_evict_inode()
1956 inode->i_mode = mode; in proc_pid_make_inode()
1957 inode->i_ino = get_next_ino(); in proc_pid_make_inode()
1959 inode->i_op = &proc_def_inode_operations; in proc_pid_make_inode()
1969 ei->pid = pid; in proc_pid_make_inode()
1971 task_dump_owner(task, 0, &inode->i_uid, &inode->i_gid); in proc_pid_make_inode()
1983 * Generating an inode and adding it into @pid->inodes, so that task will
1986 * This helper is used for creating dir-type entries under '/proc' and
2007 pid = ei->pid; in proc_pid_make_base_inode()
2008 spin_lock(&pid->lock); in proc_pid_make_base_inode()
2009 hlist_add_head_rcu(&ei->sibling_inodes, &pid->inodes); in proc_pid_make_base_inode()
2010 spin_unlock(&pid->lock); in proc_pid_make_base_inode()
2018 struct inode *inode = d_inode(path->dentry); in pid_getattr()
2019 struct proc_fs_info *fs_info = proc_sb_info(inode->i_sb); in pid_getattr()
2024 stat->uid = GLOBAL_ROOT_UID; in pid_getattr()
2025 stat->gid = GLOBAL_ROOT_GID; in pid_getattr()
2035 return -ENOENT; in pid_getattr()
2037 task_dump_owner(task, inode->i_mode, &stat->uid, &stat->gid); in pid_getattr()
2050 task_dump_owner(task, inode->i_mode, &inode->i_uid, &inode->i_gid); in pid_update_inode()
2052 inode->i_mode &= ~(S_ISUID | S_ISGID); in pid_update_inode()
2085 return !proc_pid(inode)->tasks[PIDTYPE_PID].first; in proc_inode_is_dead()
2121 struct dentry *child, *dir = file->f_path.dentry; in proc_fill_cache()
2146 ino = inode->i_ino; in proc_fill_cache()
2147 type = inode->i_mode >> 12; in proc_fill_cache()
2154 * dname_to_vma_addr - maps a dentry name into two unsigned longs
2160 const char *str = dentry->d_name.name; in dname_to_vma_addr()
2164 if (str[0] == '0' && str[1] != '-') in dname_to_vma_addr()
2165 return -EINVAL; in dname_to_vma_addr()
2168 return -EINVAL; in dname_to_vma_addr()
2170 return -EINVAL; in dname_to_vma_addr()
2173 if (*str != '-') in dname_to_vma_addr()
2174 return -EINVAL; in dname_to_vma_addr()
2178 return -EINVAL; in dname_to_vma_addr()
2181 return -EINVAL; in dname_to_vma_addr()
2183 return -EINVAL; in dname_to_vma_addr()
2187 return -EINVAL; in dname_to_vma_addr()
2206 return -ECHILD; in map_files_d_revalidate()
2229 task_dump_owner(task, 0, &inode->i_uid, &inode->i_gid); in map_files_d_revalidate()
2255 rc = -ENOENT; in map_files_get_link()
2273 rc = -ENOENT; in map_files_get_link()
2275 if (vma && vma->vm_file) { in map_files_get_link()
2276 *path = *file_user_path(vma->vm_file); in map_files_get_link()
2305 return ERR_PTR(-EPERM); in proc_map_files_get_link()
2327 inode = proc_pid_make_inode(dentry->d_sb, task, S_IFLNK | in proc_map_files_instantiate()
2331 return ERR_PTR(-ENOENT); in proc_map_files_instantiate()
2334 ei->op.proc_get_link = map_files_get_link; in proc_map_files_instantiate()
2336 inode->i_op = &proc_map_files_link_inode_operations; in proc_map_files_instantiate()
2337 inode->i_size = 64; in proc_map_files_instantiate()
2352 result = ERR_PTR(-ENOENT); in proc_map_files_lookup()
2357 result = ERR_PTR(-EACCES); in proc_map_files_lookup()
2361 result = ERR_PTR(-ENOENT); in proc_map_files_lookup()
2369 result = ERR_PTR(-EINTR); in proc_map_files_lookup()
2373 result = ERR_PTR(-ENOENT); in proc_map_files_lookup()
2378 if (vma->vm_file) in proc_map_files_lookup()
2380 (void *)(unsigned long)vma->vm_file->f_mode); in proc_map_files_lookup()
2412 ret = -ENOENT; in proc_map_files_readdir()
2417 ret = -EACCES; in proc_map_files_readdir()
2450 if (!vma->vm_file) in proc_map_files_readdir()
2452 if (++pos <= ctx->pos) in proc_map_files_readdir()
2457 ret = -ENOMEM; in proc_map_files_readdir()
2463 p->start = vma->vm_start; in proc_map_files_readdir()
2464 p->end = vma->vm_end; in proc_map_files_readdir()
2465 p->mode = vma->vm_file->f_mode; in proc_map_files_readdir()
2471 char buf[4 * sizeof(long) + 2]; /* max: %lx-%lx\0 */ in proc_map_files_readdir()
2475 len = snprintf(buf, sizeof(buf), "%lx-%lx", p->start, p->end); in proc_map_files_readdir()
2480 (void *)(unsigned long)p->mode)) in proc_map_files_readdir()
2482 ctx->pos++; in proc_map_files_readdir()
2509 struct timers_private *tp = m->private; in timers_start()
2511 tp->task = get_pid_task(tp->pid, PIDTYPE_PID); in timers_start()
2512 if (!tp->task) in timers_start()
2513 return ERR_PTR(-ESRCH); in timers_start()
2515 tp->sighand = lock_task_sighand(tp->task, &tp->flags); in timers_start()
2516 if (!tp->sighand) in timers_start()
2517 return ERR_PTR(-ESRCH); in timers_start()
2519 return seq_hlist_start(&tp->task->signal->posix_timers, *pos); in timers_start()
2524 struct timers_private *tp = m->private; in timers_next()
2525 return seq_hlist_next(v, &tp->task->signal->posix_timers, pos); in timers_next()
2530 struct timers_private *tp = m->private; in timers_stop()
2532 if (tp->sighand) { in timers_stop()
2533 unlock_task_sighand(tp->task, &tp->flags); in timers_stop()
2534 tp->sighand = NULL; in timers_stop()
2537 if (tp->task) { in timers_stop()
2538 put_task_struct(tp->task); in timers_stop()
2539 tp->task = NULL; in timers_stop()
2546 struct timers_private *tp = m->private; in show_timer()
2555 notify = timer->it_sigev_notify; in show_timer()
2557 seq_printf(m, "ID: %d\n", timer->it_id); in show_timer()
2559 timer->sigq.info.si_signo, in show_timer()
2560 timer->sigq.info.si_value.sival_ptr); in show_timer()
2564 pid_nr_ns(timer->it_pid, tp->ns)); in show_timer()
2565 seq_printf(m, "ClockID: %d\n", timer->it_clock); in show_timer()
2584 return -ENOMEM; in proc_timers_open()
2586 tp->pid = proc_pid(inode); in proc_timers_open()
2587 tp->ns = proc_pid_ns(inode->i_sb); in proc_timers_open()
2613 return -ESRCH; in timerslack_ns_write()
2617 if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) { in timerslack_ns_write()
2619 count = -EPERM; in timerslack_ns_write()
2635 slack_ns = p->default_timer_slack_ns; in timerslack_ns_write()
2636 p->timer_slack_ns = slack_ns; in timerslack_ns_write()
2647 struct inode *inode = m->private; in timerslack_ns_show()
2653 return -ESRCH; in timerslack_ns_show()
2657 if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) { in timerslack_ns_show()
2659 err = -EPERM; in timerslack_ns_show()
2670 seq_printf(m, "%llu\n", p->timer_slack_ns); in timerslack_ns_show()
2699 inode = proc_pid_make_inode(dentry->d_sb, task, p->mode); in proc_pident_instantiate()
2701 return ERR_PTR(-ENOENT); in proc_pident_instantiate()
2704 if (S_ISDIR(inode->i_mode)) in proc_pident_instantiate()
2706 if (p->iop) in proc_pident_instantiate()
2707 inode->i_op = p->iop; in proc_pident_instantiate()
2708 if (p->fop) in proc_pident_instantiate()
2709 inode->i_fop = p->fop; in proc_pident_instantiate()
2710 ei->op = p->op; in proc_pident_instantiate()
2722 struct dentry *res = ERR_PTR(-ENOENT); in proc_pident_lookup()
2732 if (p->len != dentry->d_name.len) in proc_pident_lookup()
2734 if (!memcmp(dentry->d_name.name, p->name, p->len)) { in proc_pident_lookup()
2751 return -ENOENT; in proc_pident_readdir()
2756 if (ctx->pos >= nents + 2) in proc_pident_readdir()
2759 for (p = ents + (ctx->pos - 2); p < ents + nents; p++) { in proc_pident_readdir()
2760 if (!proc_fill_cache(file, ctx, p->name, p->len, in proc_pident_readdir()
2763 ctx->pos++; in proc_pident_readdir()
2773 file->private_data = NULL; in proc_pid_attr_open()
2787 return -ESRCH; in proc_pid_attr_read()
2789 length = security_getprocattr(task, PROC_I(inode)->op.lsmid, in proc_pid_attr_read()
2790 file->f_path.dentry->d_name.name, in proc_pid_attr_read()
2808 if (file->private_data != current->mm) in proc_pid_attr_write()
2809 return -EPERM; in proc_pid_attr_write()
2815 return -ESRCH; in proc_pid_attr_write()
2820 return -EACCES; in proc_pid_attr_write()
2825 return -EBUSY; in proc_pid_attr_write()
2834 return -EINVAL; in proc_pid_attr_write()
2843 rv = mutex_lock_interruptible(&current->signal->cred_guard_mutex); in proc_pid_attr_write()
2847 rv = security_setprocattr(PROC_I(inode)->op.lsmid, in proc_pid_attr_write()
2848 file->f_path.dentry->d_name.name, page, in proc_pid_attr_write()
2850 mutex_unlock(&current->signal->cred_guard_mutex); in proc_pid_attr_write()
2966 return -ESRCH; in proc_coredump_filter_read()
2972 ((mm->flags & MMF_DUMP_FILTER_MASK) >> in proc_coredump_filter_read()
2999 ret = -ESRCH; in proc_coredump_filter_write()
3011 set_bit(i + MMF_DUMP_FILTER_SHIFT, &mm->flags); in proc_coredump_filter_write()
3013 clear_bit(i + MMF_DUMP_FILTER_SHIFT, &mm->flags); in proc_coredump_filter_write()
3038 result = down_read_killable(&task->signal->exec_update_lock); in do_io_accounting()
3043 result = -EACCES; in do_io_accounting()
3048 struct signal_struct *sig = task->signal; in do_io_accounting()
3056 flags = read_seqbegin_or_lock_irqsave(&sig->stats_lock, &seq); in do_io_accounting()
3058 acct = sig->ioac; in do_io_accounting()
3060 task_io_accounting_add(&acct, &t->ioac); in do_io_accounting()
3062 } while (need_seqretry(&sig->stats_lock, seq)); in do_io_accounting()
3063 done_seqretry_irqrestore(&sig->stats_lock, seq, flags); in do_io_accounting()
3066 acct = task->ioac; in do_io_accounting()
3087 up_read(&task->signal->exec_update_lock); in do_io_accounting()
3111 int ret = -EINVAL; in proc_id_map_open()
3127 seq = file->private_data; in proc_id_map_open()
3128 seq->private = ns; in proc_id_map_open()
3139 struct seq_file *seq = file->private_data; in proc_id_map_release()
3140 struct user_namespace *ns = seq->private; in proc_id_map_release()
3190 ret = -ESRCH; in proc_setgroups_open()
3201 if (file->f_mode & FMODE_WRITE) { in proc_setgroups_open()
3202 ret = -EACCES; in proc_setgroups_open()
3220 struct seq_file *seq = file->private_data; in proc_setgroups_release()
3221 struct user_namespace *ns = seq->private; in proc_setgroups_release()
3241 seq_printf(m, "%08x\n", task->personality); in proc_pid_personality()
3251 seq_printf(m, "%d\n", task->patch_state); in proc_pid_patch_state()
3264 seq_printf(m, "%lu\n", mm->ksm_merging_pages); in proc_pid_ksm_merging_pages()
3278 seq_printf(m, "ksm_rmap_items %lu\n", mm->ksm_rmap_items); in proc_pid_ksm_stat()
3280 seq_printf(m, "ksm_merging_pages %lu\n", mm->ksm_merging_pages); in proc_pid_ksm_stat()
3283 test_bit(MMF_VM_MERGE_ANY, &mm->flags) ? "yes" : "no"); in proc_pid_ksm_stat()
3303 unsigned long prev_depth = THREAD_SIZE - in proc_stack_depth()
3304 (task->prev_lowest_stack & (THREAD_SIZE - 1)); in proc_stack_depth()
3305 unsigned long depth = THREAD_SIZE - in proc_stack_depth()
3306 (task->lowest_stack & (THREAD_SIZE - 1)); in proc_stack_depth()
3399 REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations),
3400 REG("fail-nth", 0644, proc_fail_nth_operations),
3450 if (file->f_op != &proc_tgid_base_operations) in tgid_pidfd_to_pid()
3451 return ERR_PTR(-EBADF); in tgid_pidfd_to_pid()
3471 * proc_flush_pid - Remove dcache entries for @pid from the /proc dcache.
3491 proc_invalidate_siblings_dcache(&pid->inodes, &pid->lock); in proc_flush_pid()
3499 inode = proc_pid_make_base_inode(dentry->d_sb, task, in proc_pid_instantiate()
3502 return ERR_PTR(-ENOENT); in proc_pid_instantiate()
3504 inode->i_op = &proc_tgid_base_inode_operations; in proc_pid_instantiate()
3505 inode->i_fop = &proc_tgid_base_operations; in proc_pid_instantiate()
3506 inode->i_flags|=S_IMMUTABLE; in proc_pid_instantiate()
3521 struct dentry *result = ERR_PTR(-ENOENT); in proc_pid_lookup()
3523 tgid = name_to_int(&dentry->d_name); in proc_pid_lookup()
3527 fs_info = proc_sb_info(dentry->d_sb); in proc_pid_lookup()
3528 ns = fs_info->pid_ns; in proc_pid_lookup()
3538 if (fs_info->hide_pid == HIDEPID_NOT_PTRACEABLE) { in proc_pid_lookup()
3583 /* for the /proc/ directory itself, after non-process stuff has been done */
3587 struct proc_fs_info *fs_info = proc_sb_info(file_inode(file)->i_sb); in proc_pid_readdir()
3588 struct pid_namespace *ns = proc_pid_ns(file_inode(file)->i_sb); in proc_pid_readdir()
3589 loff_t pos = ctx->pos; in proc_pid_readdir()
3594 if (pos == TGID_OFFSET - 2) { in proc_pid_readdir()
3595 struct inode *inode = d_inode(fs_info->proc_self); in proc_pid_readdir()
3596 if (!dir_emit(ctx, "self", 4, inode->i_ino, DT_LNK)) in proc_pid_readdir()
3598 ctx->pos = pos = pos + 1; in proc_pid_readdir()
3600 if (pos == TGID_OFFSET - 1) { in proc_pid_readdir()
3601 struct inode *inode = d_inode(fs_info->proc_thread_self); in proc_pid_readdir()
3602 if (!dir_emit(ctx, "thread-self", 11, inode->i_ino, DT_LNK)) in proc_pid_readdir()
3604 ctx->pos = pos = pos + 1; in proc_pid_readdir()
3606 iter.tgid = pos - TGID_OFFSET; in proc_pid_readdir()
3619 ctx->pos = iter.tgid + TGID_OFFSET; in proc_pid_readdir()
3626 ctx->pos = PID_MAX_LIMIT + TGID_OFFSET; in proc_pid_readdir()
3650 return -ESRCH; in proc_tid_comm_permission()
3748 REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations),
3749 REG("fail-nth", 0644, proc_fail_nth_operations),
3804 inode = proc_pid_make_base_inode(dentry->d_sb, task, in proc_task_instantiate()
3807 return ERR_PTR(-ENOENT); in proc_task_instantiate()
3809 inode->i_op = &proc_tid_base_inode_operations; in proc_task_instantiate()
3810 inode->i_fop = &proc_tid_base_operations; in proc_task_instantiate()
3811 inode->i_flags |= S_IMMUTABLE; in proc_task_instantiate()
3827 struct dentry *result = ERR_PTR(-ENOENT); in proc_task_lookup()
3832 tid = name_to_int(&dentry->d_name); in proc_task_lookup()
3836 fs_info = proc_sb_info(dentry->d_sb); in proc_task_lookup()
3837 ns = fs_info->pid_ns; in proc_task_lookup()
3898 if (!nr--) in first_tid()
3940 return -ENOENT; in proc_task_readdir()
3948 ns = proc_pid_ns(inode->i_sb); in proc_task_readdir()
3949 tid = (int)(intptr_t)file->private_data; in proc_task_readdir()
3950 file->private_data = NULL; in proc_task_readdir()
3951 for (task = first_tid(proc_pid(inode), tid, ctx->pos - 2, ns); in proc_task_readdir()
3953 task = next_tid(task), ctx->pos++) { in proc_task_readdir()
3965 file->private_data = (void *)(intptr_t)tid; in proc_task_readdir()
3978 struct inode *inode = d_inode(path->dentry); in proc_task_getattr()
3983 stat->nlink += get_nr_threads(p); in proc_task_getattr()
3991 * proc_task_readdir() set @file->private_data to a positive integer
3999 u64 cookie = (u64)(intptr_t)file->private_data; in proc_dir_llseek()
4004 file->private_data = (void *)(intptr_t)cookie; /* serialized by f_pos_lock */ in proc_dir_llseek()