git: b2cc25c8fb0c - stable/14 - socket: Fix handling of listening sockets in sotoxsocket()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 20 Aug 2024 14:05:30 UTC
The branch stable/14 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=b2cc25c8fb0c0ff71682c28665d11f65bca2cc91 commit b2cc25c8fb0c0ff71682c28665d11f65bca2cc91 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2024-07-09 20:28:12 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2024-08-20 13:22:56 +0000 socket: Fix handling of listening sockets in sotoxsocket() A lock needs to be held to ensure that the socket does not become a listening socket while sotoxsocket() is loading fields from the socket buffers, as the memory backing the socket buffers is repurposed when transitioning to a listening socket. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: Stormshield (cherry picked from commit fc4365853f1c4b572d9fd643ea336508d9a6a0f7) --- sys/kern/uipc_socket.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 479184a87a5e..7801054315ef 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -4264,6 +4264,7 @@ sotoxsocket(struct socket *so, struct xsocket *xso) xso->so_error = so->so_error; xso->so_uid = so->so_cred->cr_uid; xso->so_pgid = so->so_sigio ? so->so_sigio->sio_pgid : 0; + SOCK_LOCK(so); if (SOLISTENING(so)) { xso->so_qlen = so->sol_qlen; xso->so_incqlen = so->sol_incqlen; @@ -4276,6 +4277,7 @@ sotoxsocket(struct socket *so, struct xsocket *xso) sbtoxsockbuf(&so->so_snd, &xso->so_snd); sbtoxsockbuf(&so->so_rcv, &xso->so_rcv); } + SOCK_UNLOCK(so); } struct sockbuf *