git: 3b7aa842e27d - main - sendfile: mark it explicitly as a TCP only feature

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Mon, 08 Apr 2024 20:29:43 UTC
The branch main has been updated by glebius:

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

commit 3b7aa842e27dcf07181f161b1abde0067ed51e97
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2024-04-08 20:16:51 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2024-04-08 20:16:51 +0000

    sendfile: mark it explicitly as a TCP only feature
    
    Back in 2015 when it turned non-blocking, it was working with PF_UNIX
    and it may still work.  However, the usefullness of such application
    of sendfile(2) is questionable.  Disable the feature while unix/stream
    is under refactoring.
    
    Relnotes:       yes
---
 sys/kern/kern_sendfile.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c
index 323e7fcde07b..071c2fbbd436 100644
--- a/sys/kern/kern_sendfile.c
+++ b/sys/kern/kern_sendfile.c
@@ -649,20 +649,16 @@ sendfile_getsock(struct thread *td, int s, struct file **sock_fp,
 	*sock_fp = NULL;
 	*so = NULL;
 
-	/*
-	 * The socket must be a stream socket and connected.
-	 */
 	error = getsock(td, s, &cap_send_rights, sock_fp);
 	if (error != 0)
 		return (error);
 	*so = (*sock_fp)->f_data;
-	if ((*so)->so_type != SOCK_STREAM)
-		return (EINVAL);
 	/*
-	 * SCTP one-to-one style sockets currently don't work with
-	 * sendfile(). So indicate EINVAL for now.
+	 * sendfile(2) should be supported for every SOCK_STREAM socket.
+	 * However, the support of PF_UNIX/SOCK_STREAM is temporarily degraded
+	 * and IPPROTO_SCTP isn't supported, yet.
 	 */
-	if ((*so)->so_proto->pr_protocol == IPPROTO_SCTP)
+	if ((*so)->so_proto->pr_protocol != IPPROTO_TCP)
 		return (EINVAL);
 	return (0);
 }