Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Sep 2023 20:41:27 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: d7ee24d0d5ae - releng/14.0 - sockets: re-check socket state after call to pr_rcvd()
Message-ID:  <202309282041.38SKfRca002952@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch releng/14.0 has been updated by markj:

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

commit d7ee24d0d5aed1180e9f65058c3a5ff45a52210e
Author:     Greg Becker <becker.greg@att.net>
AuthorDate: 2023-09-09 23:38:24 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2023-09-28 20:41:09 +0000

    sockets: re-check socket state after call to pr_rcvd()
    
    Socket state may have changed after dropping the receive
    buffer lock in order to call pr_rcvd().  If the buffer is
    empty, re-check the state after reaquiring the lock and
    skip calling sbwait() if the socket is in error or the
    peer has closed.
    
    Approved by:    re (gjb)
    PR:             212716
    Reviewed by:    markj, glebius
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D41783
    
    (cherry picked from commit f44102411e1b16363e91a074c9c403069c550e4d)
    (cherry picked from commit caaea455773898bee9a0c59466a84256192e0980)
---
 sys/kern/uipc_socket.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index ffd5e06c34b7..3c7e5c4cb4bb 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -2429,6 +2429,10 @@ dontblock:
 				VNET_SO_ASSERT(so);
 				pr->pr_rcvd(so, flags);
 				SOCKBUF_LOCK(&so->so_rcv);
+				if (__predict_false(so->so_rcv.sb_mb == NULL &&
+				    (so->so_error || so->so_rerror ||
+				    so->so_rcv.sb_state & SBS_CANTRCVMORE)))
+					break;
 			}
 			SBLASTRECORDCHK(&so->so_rcv);
 			SBLASTMBUFCHK(&so->so_rcv);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202309282041.38SKfRca002952>