Index: sys/kern/uipc_socket.c =================================================================== RCS file: /mount/openbsd/cvs/src/sys/kern/uipc_socket.c,v diff -u -p -u -p -r1.347 uipc_socket.c --- sys/kern/uipc_socket.c 19 Dec 2024 22:11:35 -0000 1.347 +++ sys/kern/uipc_socket.c 25 Dec 2024 11:51:21 -0000 @@ -927,9 +927,11 @@ soreceive(struct socket *so, struct mbuf flags = 0; if (flags & MSG_OOB) { m = m_get(M_WAIT, MT_DATA); - solock(so); + if (dosolock) + solock_shared(so); error = pru_rcvoob(so, m, flags & MSG_PEEK); - sounlock(so); + if (dosolock) + sounlock_shared(so); if (error) goto bad; do { Index: sys/netinet/in_proto.c =================================================================== RCS file: /mount/openbsd/cvs/src/sys/netinet/in_proto.c,v diff -u -p -u -p -r1.117 in_proto.c --- sys/netinet/in_proto.c 19 Dec 2024 22:10:35 -0000 1.117 +++ sys/netinet/in_proto.c 25 Dec 2024 11:51:21 -0000 @@ -198,7 +198,7 @@ const struct protosw inetsw[] = { .pr_type = SOCK_STREAM, .pr_domain = &inetdomain, .pr_protocol = IPPROTO_TCP, - .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE|PR_MPSOCKET, .pr_input = tcp_input, .pr_ctlinput = tcp_ctlinput, .pr_ctloutput = tcp_ctloutput, Index: sys/netinet6/in6_proto.c =================================================================== RCS file: /mount/openbsd/cvs/src/sys/netinet6/in6_proto.c,v diff -u -p -u -p -r1.121 in6_proto.c --- sys/netinet6/in6_proto.c 19 Dec 2024 22:10:35 -0000 1.121 +++ sys/netinet6/in6_proto.c 25 Dec 2024 11:51:21 -0000 @@ -148,7 +148,7 @@ const struct protosw inet6sw[] = { .pr_type = SOCK_STREAM, .pr_domain = &inet6domain, .pr_protocol = IPPROTO_TCP, - .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS|PR_SPLICE|PR_MPSOCKET, .pr_input = tcp_input, .pr_ctlinput = tcp6_ctlinput, .pr_ctloutput = tcp_ctloutput,