Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 May 2025 20:05:42 GMT
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 56a3db77fdfd - main - sendfile: fix CURVNET_SET()/CURVNET_RESTORE()
Message-ID:  <202505062005.546K5g9g015140@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by glebius:

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

commit 56a3db77fdfde014aab5430e24efe10cffa15fe6
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2025-05-06 20:00:45 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2025-05-06 20:00:45 +0000

    sendfile: fix CURVNET_SET()/CURVNET_RESTORE()
    
    Keep it set around the main cycle that works with the socket and restore
    before the cleanup path, cause there are jumps into cleanup that precede
    the main cycle.
    
    Fixes:  9a7d03c7df3536cdb5faf0848c6dab4a5d7bcef8
---
 sys/kern/kern_sendfile.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c
index c428d80e0e1a..cfacfe40b832 100644
--- a/sys/kern/kern_sendfile.c
+++ b/sys/kern/kern_sendfile.c
@@ -787,7 +787,6 @@ vn_sendfile(struct file *fp, int sockfd, struct uio *hdr_uio,
 	error = sendfile_getsock(td, sockfd, &sock_fp, &so);
 	if (error != 0)
 		goto out;
-	CURVNET_SET(so->so_vnet);
 	pr = so->so_proto;
 
 #ifdef MAC
@@ -817,6 +816,7 @@ vn_sendfile(struct file *fp, int sockfd, struct uio *hdr_uio,
 	error = SOCK_IO_SEND_LOCK(so, SBL_WAIT | SBL_NOINTR);
 	if (error != 0)
 		goto out;
+	CURVNET_SET(so->so_vnet);
 #ifdef KERN_TLS
 	tls = ktls_hold(so->so_snd.sb_tls_info);
 #endif
@@ -1225,6 +1225,7 @@ prepend_header:
 	 */
 	if (trl_uio != NULL) {
 		SOCK_IO_SEND_UNLOCK(so);
+		CURVNET_RESTORE();
 		error = kern_writev(td, sockfd, trl_uio);
 		if (error == 0)
 			sbytes += td->td_retval[0];
@@ -1233,6 +1234,7 @@ prepend_header:
 
 done:
 	SOCK_IO_SEND_UNLOCK(so);
+	CURVNET_RESTORE();
 out:
 	/*
 	 * If there was no error we have to clear td->td_retval[0]
@@ -1270,7 +1272,6 @@ out:
 #endif
 	if (error == ERESTART)
 		error = EINTR;
-	CURVNET_RESTORE();
 
 	return (error);
 }



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