[RFC PATCH 5/6] selftests/liveupdate: Add API to preserve a batch of FDs

From: Samiullah Khawaja

Date: Wed Sep 30 2026 - 20:58:17 EST


Add luo_session_preserve_fds() that can be used to preserve a batch of
FDs using the LIVEUPDATE_SESSION_PRESERVE_FDS ioctl.

Signed-off-by: Samiullah Khawaja <skhawaja@xxxxxxxxxx>
---
.../liveupdate/lib/include/libliveupdate.h | 2 ++
.../selftests/liveupdate/lib/lu_utils.c | 20 +++++++++++++++++++
2 files changed, 22 insertions(+)

diff --git a/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h b/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h
index fa07fed08364..9aaf6f28ef56 100644
--- a/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h
+++ b/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h
@@ -29,6 +29,8 @@ int luo_get_session_name(int session_fd, char *name, size_t name_len);

int luo_ensure_nofile_limit(long min_limit);
int luo_session_preserve_fd(int session_fd, int fd, __u64 token);
+int luo_session_preserve_fds(int session_fd, const int *fds,
+ const __u64 *tokens, __u32 nr, __u32 *failed_idx);
int luo_session_retrieve_fd(int session_fd, __u64 token);

int create_and_preserve_memfd(int session_fd, int token, const char *data);
diff --git a/tools/testing/selftests/liveupdate/lib/lu_utils.c b/tools/testing/selftests/liveupdate/lib/lu_utils.c
index 74d41115c281..1290f27ff004 100644
--- a/tools/testing/selftests/liveupdate/lib/lu_utils.c
+++ b/tools/testing/selftests/liveupdate/lib/lu_utils.c
@@ -93,6 +93,26 @@ int luo_session_preserve_fd(int session_fd, int fd, __u64 token)
return 0;
}

+int luo_session_preserve_fds(int session_fd, const int *fds,
+ const __u64 *tokens, __u32 nr, __u32 *failed_idx)
+{
+ struct liveupdate_session_preserve_fds arg = {
+ .size = sizeof(arg),
+ .nr = nr,
+ .fds = (__u64)(uintptr_t)fds,
+ .tokens = (__u64)(uintptr_t)tokens,
+ };
+ int ret = 0;
+
+ if (ioctl(session_fd, LIVEUPDATE_SESSION_PRESERVE_FDS, &arg))
+ ret = -errno;
+
+ if (failed_idx)
+ *failed_idx = arg.out_failed_index;
+
+ return ret;
+}
+
int luo_session_retrieve_fd(int session_fd, __u64 token)
{
struct liveupdate_session_retrieve_fd arg = {
--
2.56.0.rc1.315.gc6ed9934b7-goog