Re: [PATCH] pidfd: add ioctl to retrieve pid info

From: kernel test robot
Date: Thu Oct 03 2024 - 23:56:14 EST


Hi,

kernel test robot noticed the following build warnings:

[auto build test WARNING on shuah-kselftest/next]
[also build test WARNING on shuah-kselftest/fixes linus/master v6.12-rc1 next-20241003]
[cannot apply to brauner-vfs/vfs.all]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/luca-boccassi-gmail-com/pidfd-add-ioctl-to-retrieve-pid-info/20241002-223302
base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next
patch link: https://lore.kernel.org/r/20241002142516.110567-1-luca.boccassi%40gmail.com
patch subject: [PATCH] pidfd: add ioctl to retrieve pid info
config: x86_64-randconfig-123-20241004 (https://download.01.org/0day-ci/archive/20241004/202410041128.tLVDbeJB-lkp@xxxxxxxxx/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241004/202410041128.tLVDbeJB-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410041128.tLVDbeJB-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> fs/pidfs.c:121:37: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got struct pidfd_info * @@
fs/pidfs.c:121:37: sparse: expected void const [noderef] __user *from
fs/pidfs.c:121:37: sparse: got struct pidfd_info *

vim +121 fs/pidfs.c

116
117 static long pidfd_info(struct task_struct *task, struct pid *pid, unsigned long arg)
118 {
119 struct pidfd_info uinfo = {}, info = {};
120
> 121 if (copy_from_user(&uinfo, (struct pidfd_info *)arg, sizeof(struct pidfd_info)))
122 return -EFAULT;
123 if (uinfo.size > sizeof(struct pidfd_info))
124 return -E2BIG;
125 if (uinfo.size < sizeof(struct pidfd_info))
126 return -EINVAL; /* First version, no smaller struct possible */
127
128 if (uinfo.request_mask & ~(PIDFD_INFO_PID | PIDFD_INFO_CREDS | PIDFD_INFO_CGROUPID | PIDFD_INFO_SECURITY_CONTEXT))
129 return -EINVAL;
130
131 memcpy(&info, &uinfo, uinfo.size);
132
133 if (uinfo.request_mask & PIDFD_INFO_PID)
134 info.pid = pid_nr_ns(pid, task_active_pid_ns(task));
135
136 if (uinfo.request_mask & PIDFD_INFO_CREDS) {
137 const struct cred *c = get_task_cred(task);
138 if (!c)
139 return -ESRCH;
140
141 info.uid = from_kuid_munged(current_user_ns(), c->uid);
142 info.gid = from_kgid_munged(current_user_ns(), c->gid);
143 }
144
145 if (uinfo.request_mask & PIDFD_INFO_CGROUPID) {
146 struct cgroup *cgrp = task_css_check(task, pids_cgrp_id, 1)->cgroup;
147 if (!cgrp)
148 return -ENODEV;
149
150 info.cgroupid = cgroup_id(cgrp);
151 }
152
153 if (uinfo.request_mask & PIDFD_INFO_SECURITY_CONTEXT) {
154 char *secctx;
155 u32 secid, secctx_len;
156 const struct cred *c = get_task_cred(task);
157 if (!c)
158 return -ESRCH;
159
160 security_cred_getsecid(c, &secid);
161 if (security_secid_to_secctx(secid, &secctx, &secctx_len))
162 return -EFAULT;
163
164 memcpy(info.security_context, secctx, min_t(u32, secctx_len, NAME_MAX-1));
165 }
166
167 if (copy_to_user((void __user *)arg, &info, uinfo.size))
168 return -EFAULT;
169
170 return 0;
171 }
172

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki