Index | Thread | Search

From:
Alexander Bluhm <bluhm@openbsd.org>
Subject:
socket shutdown shared net lock
To:
tech@openbsd.org
Date:
Mon, 17 Mar 2025 21:32:37 +0100

Download raw body.

Thread
Hi,

Socket shutdown(2) needs only shared net lock.  TCP uses per socket
lock for struct tcpcb.  tcp_usrclosed(), tcp_close(), soisdisconnected()
are already MP safe.  All other internet protocols call only
socantsendmore().

ok?

bluhm

Index: kern/uipc_socket.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_socket.c,v
diff -u -p -r1.374 uipc_socket.c
--- kern/uipc_socket.c	17 Feb 2025 08:56:33 -0000	1.374
+++ kern/uipc_socket.c	17 Mar 2025 00:04:41 -0000
@@ -1252,9 +1252,9 @@ soshutdown(struct socket *so, int how)
 		sorflush(so);
 		/* FALLTHROUGH */
 	case SHUT_WR:
-		solock(so);
+		solock_shared(so);
 		error = pru_shutdown(so);
-		sounlock(so);
+		sounlock_shared(so);
 		break;
 	default:
 		error = EINVAL;