aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/hurd-socket-activation.patch
blob: e204a90d3aad598bfaa3f45b6226b4da05d74528 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
From 029ab7d7b38c76ba14c24fcbf526ccef29af9e88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
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 <miles@gnu.org>
 
    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