Re: [PATCH v2] signal: add procfd_signal() syscall
From: Aleksa Sarai <hidden>
Date: 2018-12-25 12:08:19
Also in:
linux-fsdevel, linux-man, lkml
On 2018-12-25, Lai Jiangshan [off-list ref] wrote:
On Tue, Dec 25, 2018 at 1:32 PM Lai Jiangshan [off-list ref] wrote:quoted
Is it possible to avoid adding any syscall? Since holding /proc/pid/reg_file can also hold the pid. With this guarantee, /proc/pid/uuid (universally unique identifier ) can be introduced to identify tasks, the kernel generates a uuid for every task when created. save_pid_uuid_pair_for_later_kill(int pid) { /* save via /proc/$pid/uuid */ /* don't need to keep any fd after save */ } safe_kill(pid, uuid, sig) { fd = open(/proc/$pid/uuid); /* also hold the pid until close() if open() successes */ if (open successes and read uuid from fd and if it equals to uuid) kill(pid, sig) close(fd) } All things needed to be done is to implement /proc/pid/uuid. And if pid can't be recycled within 1 ticket, or the user can ensure it. The user can use starttime(in /proc/pid/stat) instead. save_pid_starttime_pair_for_later_kill(int pid) { /* save via /proc/$pid/stat */ /* don't need to keep any fd after save or keep it for 1 ticket at most */ } safe_kill(pid, starttime, sig) { fd = open(/proc/$pid/stat); /* also hold the pid until close() if open() successes */ if (open successes and read starttime from fd and if it equals to starttime) kill(pid, sig) close(fd) } In this case, zero LOC is added in the kernel. All of it depends on the guarantee that holding /proc/pid/reg_file also holds the pid, one of which I haven't checked carefully either.Oh, Sorry, I was wrong, the pid isn't reserved even when the fd is kept in the user space. And I'm sorry that I had replied to an "old" email thread.
Don't worry, this was a common point of confusion during this (and sister) threads. All the fd ensures is that access through that fd will give you -ESRCH if the process is gone (and if the PID is reused it will still give you -ESRCH). -- Aleksa Sarai Senior Software Engineer (Containers) SUSE Linux GmbH <https://www.cyphar.com/>
Attachments
- signature.asc [application/pgp-signature] 833 bytes