Thread (5 messages) flat view 5 messages, 4 authors, 2018-12-25

Re: [PATCH v2] signal: add procfd_signal() syscall

From: Lai Jiangshan <hidden>
Date: 2018-12-25 05:32:51
Also in: linux-fsdevel, linux-man, lkml

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.

On Fri, Dec 7, 2018 at 3:05 AM Christian Brauner [off-list ref] wrote:
On December 7, 2018 7:56:44 AM GMT+13:00, Florian Weimer [off-list ref] wrote:
quoted
* Andy Lutomirski:
quoted
quoted
I suppose that's fine.  Or alternatively, when thread group support
is
quoted
quoted
added, introduce a flag that applications have to use to enable it,
so
quoted
quoted
that they can probe for support by checking support for the flag.

I wouldn't be opposed to a new system call like this either:

 int procfd_open (pid_t thread_group, pid_t thread_id, unsigned
flags);
quoted
quoted
But I think this is frowned upon on the kernel side.
I have no problem with it, except that I think it shouldn’t return an
fd that can be used for proc filesystem access.
Oh no, my intention was that it would just be used with  *_send_signal
and related functions.
Let's postpone that discussion a little.
I think we don't need a syscall to base this off of pids.
As I said I rather send my revived version of CLONE_NEWFD that would serve the same task.
The same way we could also just add a new open() flag that blocks fs access completely.
I just pitched that idea to Serge a few days back: O_NOCHDIR or similar.
That could even be part of Aleksa's path resolution patchset.
quoted
Thanks,
Florian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help