From 029ab7d7b38c76ba14c24fcbf526ccef29af9e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 8 May 2025 23:11:36 +0200 Subject: pflocal: Do not inherit PFLOCAL_SOCK_NONBLOCK across connect/accept. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, ‘accept’ would return an O_NONBLOCK socket if the listening socket was O_NONBLOCK at the time the connection was made. With this change, ‘accept’ always returns a socket where O_NONBLOCK is cleared. --- pflocal/sock.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pflocal/sock.c b/pflocal/sock.c index 90c618e..6bc061d 100644 --- a/pflocal/sock.c +++ b/pflocal/sock.c @@ -1,6 +1,6 @@ /* Sock functions - Copyright (C) 1995,96,2000,01,02, 2005 Free Software Foundation, Inc. + Copyright (C) 1995,96,2000,01,02, 2005, 2025 Free Software Foundation, Inc. Written by Miles Bader This program is free software; you can redistribute it and/or @@ -167,8 +167,11 @@ sock_clone (struct sock *template, struct sock **sock) if (err) return err; - /* Copy some properties from TEMPLATE. */ - (*sock)->flags = template->flags & ~PFLOCAL_SOCK_CONNECTED; + /* Copy some properties from TEMPLATE. Clear O_NONBLOCK because the socket + returned by 'accept' must not inherit O_NONBLOCK from the parent + socket. */ + (*sock)->flags = + template->flags & ~(PFLOCAL_SOCK_CONNECTED | PFLOCAL_SOCK_NONBLOCK); return 0; } -- cgit v1.1