Re: [PATCH] exec: do_close_on_exec() before taking exec_update_lock

From: Benjamin Peterson

Date: Tue Sep 08 2026 - 13:06:36 EST




On Mon, Sep 7, 2026, at 14:26, Jann Horn wrote:
> do_close_on_exec() currently happens while holding the exec_update_lock,
> which is used in a lot of places that access process state to
> synchronize access checks.
> I recently added another such use of exec_update_lock, causing a
> regression.
>
> do_close_on_exec() can block waiting for a reply from a filesystem.
> That means a hung filesystem can block codepaths that use
> exec_update_lock; and it also means that a FUSE filesystem which
> attempts to inspect the calling process can deadlock.
>
> To avoid such problems, move do_close_on_exec() before the
> exec_update_lock is taken, but after the FD table has been copied if
> necessary.
>
> I have looked through all the calls between the old and new position of
> the do_close_on_exec() call; there seems to be no file descriptor table
> access in between.
>
> Reported-by: Benjamin Peterson <benjamin@xxxxxxxxxxx>
> Closes:
> https://lore.kernel.org/r/f5e8166a-88be-46c5-8939-1e5227ffe4c2@xxxxxxxxxxxxxxxx
> Fixes: 6650527444da ("proc: protect ptrace_may_access() with
> exec_update_lock (part 1)")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Jann Horn <jannh@xxxxxxxxxx>

Thanks. I confirmed this fixes my regression, so

Tested-by: Benjamin Peterson <benjamin@xxxxxxxxxxx>