On 9/4/25 8:54 AM, Al Viro wrote:
On Thu, Sep 04, 2025 at 08:26:30AM -0600, Tom Hromatka wrote:
This snippet addresses the double irq issue. I also added a check to make sure that task != current. (A user shouldn't do that but who knows what they'll actually do.)
if (task == current) { put_task_struct(task); return -EINVAL; } spin_lock_irq(¤t->sighand->siglock); spin_lock(&task->sighand->siglock);
What do you expect to happen if two tasks do that to each other at the same time?
As written, they'll deadlock sooner or later :(.
But that should be easy to fix by adding two checks prior to grabbing locks: 1. Check that the source has 1 or more seccomp filters 2. Check that the target has 0 seccomp filters.
This would ensure that for the same two processes, there's only one way the locks could be grabbed.
Or, for that matter, if task has been spawned by current with CLONE_VM | CLONE_SIGHAND?
Don't know right off hand. I'll look into it.
Thanks for the help!
Tom