The branch main has been updated by tuexen:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=3326ab87cc22cb70a41e13aefd8684ff0feed01f

commit 3326ab87cc22cb70a41e13aefd8684ff0feed01f
Author:     Michael Tuexen <tue...@freebsd.org>
AuthorDate: 2024-10-07 14:46:41 +0000
Commit:     Michael Tuexen <tue...@freebsd.org>
CommitDate: 2024-10-07 14:46:41 +0000

    getsockopt: improve locking for SOL_SOCKET level socket options
    
    Ensure SOLISTENING() is done inside SOCK_LOCK()/SOCK_UNLOCK()
    for getsockopt() handling of SOL_SOCKET-level socket options.
    
    Reviewed by:            markj, rscheff
    MFC after:              1 week
    Sponsored by:           Netflix, Inc.
    Differential Revision:  https://reviews.freebsd.org/D46881
---
 sys/kern/uipc_socket.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 189e8ca5b498..a139a9d1f301 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -4117,23 +4117,31 @@ integer:
                        goto integer;
 
                case SO_SNDBUF:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_sbsnd_hiwat :
                            so->so_snd.sb_hiwat;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_RCVBUF:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_sbrcv_hiwat :
                            so->so_rcv.sb_hiwat;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_SNDLOWAT:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_sbsnd_lowat :
                            so->so_snd.sb_lowat;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_RCVLOWAT:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_sbrcv_lowat :
                            so->so_rcv.sb_lowat;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_SNDTIMEO:
@@ -4190,15 +4198,21 @@ integer:
                        break;
 
                case SO_LISTENQLIMIT:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_qlimit : 0;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_LISTENQLEN:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_qlen : 0;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_LISTENINCQLEN:
+                       SOCK_LOCK(so);
                        optval = SOLISTENING(so) ? so->sol_incqlen : 0;
+                       SOCK_UNLOCK(so);
                        goto integer;
 
                case SO_TS_CLOCK:

Reply via email to