Hypothetical text that matches v2. Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@xxxxxxxxxxxxxxxxxx> --- man2/splice.2 | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/man2/splice.2 b/man2/splice.2 index e5d05a05c..d2c7ac8d5 100644 --- a/man2/splice.2 +++ b/man2/splice.2 @@ -139,10 +139,11 @@ .SH ERRORS .B EAGAIN .B SPLICE_F_NONBLOCK was specified in -.I flags -or one of the file descriptors had been marked as nonblocking -.RB ( O_NONBLOCK ) , -and the operation would block. +.IR flags , +one of the file descriptors had been marked as nonblocking +.RB ( O_NONBLOCK ) +and the operation would block, +or splicing from an untrusted IPC mechanism and no data was available (see HISTORY below). .TP .B EBADF One or both file descriptors are not valid, @@ -192,6 +193,44 @@ .SH HISTORY Since Linux 2.6.31, .\" commit 7c77f0b3f9208c339a4b40737bb2cb0f0319bb8d both arguments may refer to pipes. +.P +Between Linux 4.9 and 6.7, +.\" commit 8924feff66f35fe22ce77aafe3f21eb8e5cff881 +splicing from a non-pipe to a pipe without +.B SPLICE_F_NONBLOCK +would hold the pipe lock and wait for data on the non-pipe. +This isn't an issue for files, but if the non-pipe is a tty, +or an IPC mechanism like a socket or a +.BR fuse (4) +filesystem, this means that a thread attempting any operation (like +.BR open (2)/ read (2)/ write (2)/ close (2)) +on the pipe would enter uninterruptible sleep until data appeared, +which may never happen. +The same applies to splicing from a pipe to a full socket. +.P +Since Linux 6.8, +.\" commit TBD +splicing from ttys is disabled +.RB ( EINVAL ), +reads done when splicing from sockets happen in non-blocking mode +(as-if +.BR MSG_DONTWAIT , +returning +.B EAGAIN +if no data is available), +and splicing from +.BR fuse (4) +filesystems is only allowed if they were mounted by +root in the initial user namespace +(this matches security semantics for normal filesystems). +If a splice implementation is devised that doesn't need to lock the pipe +while waiting for data, this may be reversed in a future version. +Writes when splicing to sockets are also done non-blockingly +(as-if +.BR MSG_DONTWAIT , +returning +.B EAGAIN +if the socket is full). .SH NOTES The three system calls .BR splice (), -- 2.39.2
Attachment:
signature.asc
Description: PGP signature