* [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE()
@ 2026-05-04 9:50 Andrea Cervesato
2026-05-04 9:51 ` [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro Andrea Cervesato
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Andrea Cervesato @ 2026-05-04 9:50 UTC (permalink / raw)
To: Linux Test Project
- add SAFE_SPLICE()
- update tests to use the new macro
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v3:
- fix commit add correct imports
- Link to v2: https://lore.kernel.org/r/20260504-safe_splice-v2-0-aa7eaa6b5ed7@suse.com
Changes in v2:
- fix compile issues by moving SAFE_SPLICE in lapi/splice.h
- Link to v1: https://lore.kernel.org/r/20260430-safe_splice-v1-0-d1d919ff2a3a@suse.com
---
Andrea Cervesato (2):
lib: Add SAFE_SPLICE() macro
tee01, vmsplice01, af_alg08: Use SAFE_SPLICE()
include/lapi/splice.h | 28 +++++++++++++++++++++++++
testcases/kernel/crypto/af_alg08.c | 9 ++------
testcases/kernel/syscalls/tee/tee01.c | 8 ++-----
testcases/kernel/syscalls/vmsplice/vmsplice01.c | 5 +----
4 files changed, 33 insertions(+), 17 deletions(-)
---
base-commit: 73cfad509db014e5a631bd2298f4e9d8ea3ee1c1
change-id: 20260430-safe_splice-a3d6403f99cd
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro
2026-05-04 9:50 [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato
@ 2026-05-04 9:51 ` Andrea Cervesato
2026-05-04 11:17 ` Cyril Hrubis
2026-05-04 9:51 ` [LTP] [PATCH v3 2/2] tee01, vmsplice01, af_alg08: Use SAFE_SPLICE() Andrea Cervesato
2026-05-04 11:33 ` [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato via ltp
2 siblings, 1 reply; 7+ messages in thread
From: Andrea Cervesato @ 2026-05-04 9:51 UTC (permalink / raw)
To: Linux Test Project
From: Andrea Cervesato <andrea.cervesato@suse.com>
Add new SAFE_SPLIT() in lapi/splice.h.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
include/lapi/splice.h | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/include/lapi/splice.h b/include/lapi/splice.h
index 191b22d2d6397d1efad5e2025be5a2c4370724dc..e346e5cca9f44bd8421c6b99f84cd4646269ac1f 100644
--- a/include/lapi/splice.h
+++ b/include/lapi/splice.h
@@ -7,6 +7,13 @@
#ifndef LAPI_SPLICE_H__
#define LAPI_SPLICE_H__
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+#include <fcntl.h>
+#include <sys/types.h>
+
#include "config.h"
#include "lapi/syscalls.h"
@@ -19,4 +26,25 @@ static inline ssize_t splice(int fd_in, loff_t *off_in, int fd_out,
}
#endif
+static inline ssize_t safe_splice(const char *file, const int lineno,
+ int fd_in, loff_t *off_in,
+ int fd_out, loff_t *off_out,
+ size_t len, unsigned int flags)
+{
+ ssize_t ret;
+
+ ret = splice(fd_in, off_in, fd_out, off_out, len, flags);
+
+ if (ret < 0) {
+ tst_brk_(file, lineno, TBROK | TERRNO,
+ "splice(%d, %d, %zu) failed", fd_in, fd_out, len);
+ }
+
+ return ret;
+}
+
+#define SAFE_SPLICE(fd_in, off_in, fd_out, off_out, len, flags) \
+ safe_splice(__FILE__, __LINE__, (fd_in), (off_in), (fd_out), \
+ (off_out), (len), (flags))
+
#endif /* LAPI_SPLICE_H__ */
--
2.51.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [LTP] [PATCH v3 2/2] tee01, vmsplice01, af_alg08: Use SAFE_SPLICE()
2026-05-04 9:50 [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato
2026-05-04 9:51 ` [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro Andrea Cervesato
@ 2026-05-04 9:51 ` Andrea Cervesato
2026-05-04 11:23 ` Cyril Hrubis
2026-05-04 11:33 ` [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato via ltp
2 siblings, 1 reply; 7+ messages in thread
From: Andrea Cervesato @ 2026-05-04 9:51 UTC (permalink / raw)
To: Linux Test Project
From: Andrea Cervesato <andrea.cervesato@suse.com>
Replace raw splice() calls with SAFE_SPLICE() in tests where splice is
utility plumbing, not the subject of testing.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
testcases/kernel/crypto/af_alg08.c | 9 ++-------
testcases/kernel/syscalls/tee/tee01.c | 8 ++------
testcases/kernel/syscalls/vmsplice/vmsplice01.c | 5 +----
3 files changed, 5 insertions(+), 17 deletions(-)
diff --git a/testcases/kernel/crypto/af_alg08.c b/testcases/kernel/crypto/af_alg08.c
index 7b95984448bdc5afd3b995a98c3d81ef12e37067..5e04b579c1db464fc5b4f33fd4e13a29709bba79 100644
--- a/testcases/kernel/crypto/af_alg08.c
+++ b/testcases/kernel/crypto/af_alg08.c
@@ -96,13 +96,8 @@ static void try_corrupt(void)
SAFE_PIPE(pipefd);
- TEST(splice(file_fd, &off_in, pipefd[1], NULL, OVERWRITE_SIZE, 0));
- if (TST_RET < 0)
- tst_brk(TBROK | TTERRNO, "splice(file -> pipe)");
-
- TEST(splice(pipefd[0], NULL, reqfd, NULL, OVERWRITE_SIZE, 0));
- if (TST_RET < 0)
- tst_brk(TBROK | TTERRNO, "splice(pipe -> AF_ALG)");
+ SAFE_SPLICE(file_fd, &off_in, pipefd[1], NULL, OVERWRITE_SIZE, 0);
+ SAFE_SPLICE(pipefd[0], NULL, reqfd, NULL, OVERWRITE_SIZE, 0);
/* Expected to fail (invalid ciphertext); triggers the scratch write */
TST_EXP_FAIL_SILENT(recv(reqfd, recvbuf, sizeof(recvbuf), 0), EBADMSG);
diff --git a/testcases/kernel/syscalls/tee/tee01.c b/testcases/kernel/syscalls/tee/tee01.c
index d1489d0453f11faab41ab6e8e2dabbb372566f60..436c52a201689e4ffa97f217fd3b1d14e6b6ec36 100644
--- a/testcases/kernel/syscalls/tee/tee01.c
+++ b/testcases/kernel/syscalls/tee/tee01.c
@@ -58,17 +58,13 @@ static void tee_test(void)
SAFE_PIPE(pipe1);
SAFE_PIPE(pipe2);
- ret = splice(fd_in, NULL, pipe1[1], NULL, TEST_BLOCK_SIZE, 0);
- if (ret < 0)
- tst_brk(TBROK | TERRNO, "splice(fd_in, pipe1) failed");
+ SAFE_SPLICE(fd_in, NULL, pipe1[1], NULL, TEST_BLOCK_SIZE, 0);
ret = tee(pipe1[0], pipe2[1], TEST_BLOCK_SIZE, SPLICE_F_NONBLOCK);
if (ret < 0)
tst_brk(TBROK | TERRNO, "tee() failed");
- ret = splice(pipe2[0], NULL, fd_out, NULL, TEST_BLOCK_SIZE, 0);
- if (ret < 0)
- tst_brk(TBROK | TERRNO, "splice(pipe2, fd_out) failed");
+ SAFE_SPLICE(pipe2[0], NULL, fd_out, NULL, TEST_BLOCK_SIZE, 0);
SAFE_CLOSE(pipe2[0]);
SAFE_CLOSE(pipe2[1]);
diff --git a/testcases/kernel/syscalls/vmsplice/vmsplice01.c b/testcases/kernel/syscalls/vmsplice/vmsplice01.c
index 17486179baa2a897c2efbf0d2b4d39273788aadc..64eed8391797fb01b14c548ebcfe390a403da5ec 100644
--- a/testcases/kernel/syscalls/vmsplice/vmsplice01.c
+++ b/testcases/kernel/syscalls/vmsplice/vmsplice01.c
@@ -50,7 +50,6 @@ static void vmsplice_test(void)
{
int pipes[2];
long written;
- int ret;
int fd_out;
struct iovec v;
loff_t offset;
@@ -85,9 +84,7 @@ static void vmsplice_test(void)
}
}
- ret = splice(pipes[0], NULL, fd_out, &offset, written, 0);
- if (ret < 0)
- tst_brk(TBROK | TERRNO, "splice() failed");
+ SAFE_SPLICE(pipes[0], NULL, fd_out, &offset, written, 0);
//printf("offset = %lld\n", (long long)offset);
}
--
2.51.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro
2026-05-04 9:51 ` [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro Andrea Cervesato
@ 2026-05-04 11:17 ` Cyril Hrubis
2026-05-04 11:28 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 7+ messages in thread
From: Cyril Hrubis @ 2026-05-04 11:17 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: Linux Test Project
Hi!
> Add new SAFE_SPLIT() in lapi/splice.h.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> include/lapi/splice.h | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/include/lapi/splice.h b/include/lapi/splice.h
> index 191b22d2d6397d1efad5e2025be5a2c4370724dc..e346e5cca9f44bd8421c6b99f84cd4646269ac1f 100644
> --- a/include/lapi/splice.h
> +++ b/include/lapi/splice.h
> @@ -7,6 +7,13 @@
> #ifndef LAPI_SPLICE_H__
> #define LAPI_SPLICE_H__
>
> +#ifndef _GNU_SOURCE
> +# define _GNU_SOURCE
> +#endif
> +
> +#include <fcntl.h>
> +#include <sys/types.h>
> +
> #include "config.h"
> #include "lapi/syscalls.h"
>
> @@ -19,4 +26,25 @@ static inline ssize_t splice(int fd_in, loff_t *off_in, int fd_out,
> }
> #endif
>
> +static inline ssize_t safe_splice(const char *file, const int lineno,
> + int fd_in, loff_t *off_in,
> + int fd_out, loff_t *off_out,
> + size_t len, unsigned int flags)
> +{
> + ssize_t ret;
> +
> + ret = splice(fd_in, off_in, fd_out, off_out, len, flags);
> +
> + if (ret < 0) {
> + tst_brk_(file, lineno, TBROK | TERRNO,
> + "splice(%d, %d, %zu) failed", fd_in, fd_out, len);
Why don't we print the offsets?
Otherwise:
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
> + }
> +
> + return ret;
> +}
> +
> +#define SAFE_SPLICE(fd_in, off_in, fd_out, off_out, len, flags) \
> + safe_splice(__FILE__, __LINE__, (fd_in), (off_in), (fd_out), \
> + (off_out), (len), (flags))
> +
> #endif /* LAPI_SPLICE_H__ */
>
> --
> 2.51.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [LTP] [PATCH v3 2/2] tee01, vmsplice01, af_alg08: Use SAFE_SPLICE()
2026-05-04 9:51 ` [LTP] [PATCH v3 2/2] tee01, vmsplice01, af_alg08: Use SAFE_SPLICE() Andrea Cervesato
@ 2026-05-04 11:23 ` Cyril Hrubis
0 siblings, 0 replies; 7+ messages in thread
From: Cyril Hrubis @ 2026-05-04 11:23 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: Linux Test Project
Hi!
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro
2026-05-04 11:17 ` Cyril Hrubis
@ 2026-05-04 11:28 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 7+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-04 11:28 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: Linux Test Project
> Why don't we print the offsets?
will fix before merge. thanks
Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE()
2026-05-04 9:50 [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato
2026-05-04 9:51 ` [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro Andrea Cervesato
2026-05-04 9:51 ` [LTP] [PATCH v3 2/2] tee01, vmsplice01, af_alg08: Use SAFE_SPLICE() Andrea Cervesato
@ 2026-05-04 11:33 ` Andrea Cervesato via ltp
2 siblings, 0 replies; 7+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-04 11:33 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: Linux Test Project
Merged, Thanks!
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-05-04 11:33 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-04 9:50 [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato
2026-05-04 9:51 ` [LTP] [PATCH v3 1/2] lib: Add SAFE_SPLICE() macro Andrea Cervesato
2026-05-04 11:17 ` Cyril Hrubis
2026-05-04 11:28 ` Andrea Cervesato via ltp
2026-05-04 9:51 ` [LTP] [PATCH v3 2/2] tee01, vmsplice01, af_alg08: Use SAFE_SPLICE() Andrea Cervesato
2026-05-04 11:23 ` Cyril Hrubis
2026-05-04 11:33 ` [LTP] [PATCH v3 0/2] Introduce SAFE_SPLICE() Andrea Cervesato via ltp
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.