On Fri, Aug 01, 2025 at 09:38:38AM +0200, Thomas Weißschuh wrote: > replace_fd() returns either a negative error number or the number of the > new file descriptor. The current code misinterprets any positive file > descriptor number as an error. > > Only check for negative error numbers, so that __receive_sock() is called > correctly for valid file descriptors. > > Fixes: 173817151b15 ("fs: Expand __receive_fd() to accept existing fd") > Fixes: 42eb0d54c08a ("fs: split receive_fd_replace from __receive_fd") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx> > --- > Untested, it stuck out while reading the code. > --- > fs/file.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/file.c b/fs/file.c > index 6d2275c3be9c6967d16c75d1b6521f9b58980926..56c3a045121d8f43a54cf05e6ce1962f896339ac 100644 > --- a/fs/file.c > +++ b/fs/file.c > @@ -1387,7 +1387,7 @@ int receive_fd_replace(int new_fd, struct file *file, unsigned int o_flags) > if (error) > return error; > error = replace_fd(new_fd, file, o_flags); > - if (error) > + if (error < 0) > return error; What in the holy fsck? Why did the seccomp selftests not fail horrendously explode because of that.