Re: [PATCH v1 2/2] signal: add procfd_signal() syscall

Christian Brauner
2018-11-19T23:45:31Z

On Tue, Nov 20, 2018 at 07:37:58AM +0800, kbuild test robot wrote:
> Hi Christian,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.20-rc3]
> [cannot apply to next-20181119]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/Christian-Brauner/proc-allow-signaling-processes-via-file-descriptors/20181120-063836
> config: riscv-tinyconfig (attached as .config)
> compiler: riscv64-linux-gcc (GCC) 8.1.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> GCC_VERSION=8.1.0 make.cross ARCH=riscv
>
> All errors (new ones prefixed by >>):
>
> kernel/signal.c: In function '__do_sys_procfd_signal':
> >> kernel/signal.c:3341:7: error: implicit declaration of function 'proc_is_procfd'; did you mean 'clockid_to_fd'? [-Werror=implicit-function-declaration]
> if (!proc_is_procfd(f.file))
> ^~~~~~~~~~~~~~

On my radar and fixed. This happens when CONFIG_PROC_FS unset.

> clockid_to_fd
> cc1: some warnings being treated as errors
>
> vim +3341 kernel/signal.c
>
> 3314
> 3315 /**
> 3316 * sys_procfd_signal - send a signal to a process through a process file
> 3317 * descriptor
> 3318 * @fd: the file descriptor of the process
> 3319 * @sig: signal to be sent
> 3320 * @info: the signal info
> 3321 * @flags: future flags to be passed
> 3322 */
> 3323 SYSCALL_DEFINE4(procfd_signal, int, fd, int, sig, siginfo_t __user *, info,
> 3324 int, flags)
> 3325 {
> 3326 int ret;
> 3327 struct pid *pid;
> 3328 kernel_siginfo_t kinfo;
> 3329 struct fd f;
> 3330
> 3331 /* Enforce flags be set to 0 until we add an extension. */
> 3332 if (flags)
> 3333 return -EINVAL;
> 3334
> 3335 f = fdget_raw(fd);
> 3336 if (!f.file)
> 3337 return -EBADF;
> 3338
> 3339 ret = -EINVAL;
> 3340 /* Is this a process file descriptor? */
> > 3341 if (!proc_is_procfd(f.file))
> 3342 goto err;
> 3343
> 3344 pid = f.file->private_data;
> 3345 if (!pid)
> 3346 goto err;
> 3347
> 3348 if (info) {
> 3349 ret = __copy_siginfo_from_user(sig, &kinfo, info);
> 3350 if (unlikely(ret))
> 3351 goto err;
> 3352 /*
> 3353 * Not even root can pretend to send signals from the kernel.
> 3354 * Nor can they impersonate a kill()/tgkill(), which adds
> 3355 * source info.
> 3356 */
> 3357 ret = -EPERM;
> 3358 if ((kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL) &&
> 3359 (task_pid(current) != pid))
> 3360 goto err;
> 3361 } else {
> 3362 prepare_kill_siginfo(sig, &kinfo);
> 3363 }
> 3364
> 3365 ret = kill_pid_info(sig, &kinfo, pid);
> 3366
> 3367 err:
> 3368 fdput(f);
> 3369 return ret;
> 3370 }
> 3371
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation