Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

pidfs: drop struct pidfs_exit_info

This is not needed anymore now that we have the new scheme to guarantee
all-or-nothing information exposure.

Link: https://patch.msgid.link/20251028-work-coredump-signal-v1-7-ca449b7b7aa0@kernel.org
Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>

+11 -24
+11 -24
fs/pidfs.c
··· 39 39 path_get(path); 40 40 } 41 41 42 - /* 43 - * Stashes information that userspace needs to access even after the 44 - * process has been reaped. 45 - */ 46 - struct pidfs_exit_info { 47 - __u64 cgroupid; 48 - __s32 exit_code; 49 - __u32 coredump_mask; 50 - }; 51 - 52 42 enum pidfs_attr_mask_bits { 53 43 PIDFS_ATTR_BIT_EXIT = 0, 54 44 }; ··· 46 56 struct pidfs_attr { 47 57 unsigned long attr_mask; 48 58 struct simple_xattrs *xattrs; 49 - struct pidfs_exit_info __pei; 50 - struct pidfs_exit_info *exit_info; 59 + struct /* exit info */ { 60 + __u64 cgroupid; 61 + __s32 exit_code; 62 + }; 63 + __u32 coredump_mask; 51 64 }; 52 65 53 66 static struct rb_root pidfs_ino_tree = RB_ROOT; ··· 306 313 struct pid *pid = pidfd_pid(file); 307 314 size_t usize = _IOC_SIZE(cmd); 308 315 struct pidfd_info kinfo = {}; 309 - struct pidfs_exit_info *exit_info; 310 316 struct user_namespace *user_ns; 311 317 struct pidfs_attr *attr; 312 318 const struct cred *c; ··· 334 342 smp_rmb(); 335 343 kinfo.mask |= PIDFD_INFO_EXIT; 336 344 #ifdef CONFIG_CGROUPS 337 - kinfo.cgroupid = exit_info->cgroupid; 345 + kinfo.cgroupid = attr->cgroupid; 338 346 kinfo.mask |= PIDFD_INFO_CGROUPID; 339 347 #endif 340 - kinfo.exit_code = exit_info->exit_code; 348 + kinfo.exit_code = attr->exit_code; 341 349 } 342 350 } 343 351 344 352 if (mask & PIDFD_INFO_COREDUMP) { 345 - kinfo.coredump_mask = READ_ONCE(attr->__pei.coredump_mask); 353 + kinfo.coredump_mask = READ_ONCE(attr->coredump_mask); 346 354 if (kinfo.coredump_mask) 347 355 kinfo.mask |= PIDFD_INFO_COREDUMP; 348 356 } ··· 621 629 { 622 630 struct pid *pid = task_pid(tsk); 623 631 struct pidfs_attr *attr; 624 - struct pidfs_exit_info *exit_info; 625 632 #ifdef CONFIG_CGROUPS 626 633 struct cgroup *cgrp; 627 634 #endif ··· 648 657 * is put 649 658 */ 650 659 651 - exit_info = &attr->__pei; 652 - 653 660 #ifdef CONFIG_CGROUPS 654 661 rcu_read_lock(); 655 662 cgrp = task_dfl_cgroup(tsk); 656 - exit_info->cgroupid = cgroup_id(cgrp); 663 + attr->cgroupid = cgroup_id(cgrp); 657 664 rcu_read_unlock(); 658 665 #endif 659 - exit_info->exit_code = tsk->exit_code; 666 + attr->exit_code = tsk->exit_code; 660 667 661 668 /* Ensure that PIDFD_GET_INFO sees either all or nothing. */ 662 669 smp_wmb(); ··· 665 676 void pidfs_coredump(const struct coredump_params *cprm) 666 677 { 667 678 struct pid *pid = cprm->pid; 668 - struct pidfs_exit_info *exit_info; 669 679 struct pidfs_attr *attr; 670 680 __u32 coredump_mask = 0; 671 681 ··· 673 685 VFS_WARN_ON_ONCE(!attr); 674 686 VFS_WARN_ON_ONCE(attr == PIDFS_PID_DEAD); 675 687 676 - exit_info = &attr->__pei; 677 688 /* Note how we were coredumped. */ 678 689 coredump_mask = pidfs_coredump_mask(cprm->mm_flags); 679 690 /* Note that we actually did coredump. */ 680 691 coredump_mask |= PIDFD_COREDUMPED; 681 692 /* If coredumping is set to skip we should never end up here. */ 682 693 VFS_WARN_ON_ONCE(coredump_mask & PIDFD_COREDUMP_SKIP); 683 - smp_store_release(&exit_info->coredump_mask, coredump_mask); 694 + smp_store_release(&attr->coredump_mask, coredump_mask); 684 695 } 685 696 #endif 686 697