Add helper functions to preserve and retrieve file descriptors from an
LUO session. This allows library users to work with FD preservation.

No functional change intended.

Signed-off-by: Vipin Sharma <[email protected]>
Co-developed-by: David Matlack <[email protected]>
Signed-off-by: David Matlack <[email protected]>
Signed-off-by: Vipin Sharma <[email protected]>
---
 .../liveupdate/lib/include/libliveupdate.h    |  3 ++
 .../selftests/liveupdate/lib/liveupdate.c     | 41 +++++++++++++++----
 2 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h 
b/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h
index 4390a2737930..2b04b3256382 100644
--- a/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h
+++ b/tools/testing/selftests/liveupdate/lib/include/libliveupdate.h
@@ -26,6 +26,9 @@ int luo_create_session(int luo_fd, const char *name);
 int luo_retrieve_session(int luo_fd, const char *name);
 int luo_session_finish(int session_fd);
 
+int luo_session_preserve_fd(int session_fd, int fd, __u64 token);
+int luo_session_retrieve_fd(int session_fd, __u64 token);
+
 int create_and_preserve_memfd(int session_fd, int token, const char *data);
 int restore_and_verify_memfd(int session_fd, int token, const char 
*expected_data);
 
diff --git a/tools/testing/selftests/liveupdate/lib/liveupdate.c 
b/tools/testing/selftests/liveupdate/lib/liveupdate.c
index 60121873f685..7bc6707d8bb7 100644
--- a/tools/testing/selftests/liveupdate/lib/liveupdate.c
+++ b/tools/testing/selftests/liveupdate/lib/liveupdate.c
@@ -54,9 +54,35 @@ int luo_retrieve_session(int luo_fd, const char *name)
        return arg.fd;
 }
 
+int luo_session_preserve_fd(int session_fd, int fd, __u64 token)
+{
+       struct liveupdate_session_preserve_fd arg = {
+               .size = sizeof(arg),
+               .fd = fd,
+               .token = token,
+       };
+
+       if (ioctl(session_fd, LIVEUPDATE_SESSION_PRESERVE_FD, &arg) < 0)
+               return -errno;
+
+       return 0;
+}
+
+int luo_session_retrieve_fd(int session_fd, __u64 token)
+{
+       struct liveupdate_session_retrieve_fd arg = {
+               .size = sizeof(arg),
+               .token = token,
+       };
+
+       if (ioctl(session_fd, LIVEUPDATE_SESSION_RETRIEVE_FD, &arg) < 0)
+               return -errno;
+
+       return arg.fd;
+}
+
 int create_and_preserve_memfd(int session_fd, int token, const char *data)
 {
-       struct liveupdate_session_preserve_fd arg = { .size = sizeof(arg) };
        long page_size = sysconf(_SC_PAGE_SIZE);
        void *map = MAP_FAILED;
        int mfd = -1, ret = -1;
@@ -75,9 +101,8 @@ int create_and_preserve_memfd(int session_fd, int token, 
const char *data)
        snprintf(map, page_size, "%s", data);
        munmap(map, page_size);
 
-       arg.fd = mfd;
-       arg.token = token;
-       if (ioctl(session_fd, LIVEUPDATE_SESSION_PRESERVE_FD, &arg) < 0)
+       ret = luo_session_preserve_fd(session_fd, mfd, token);
+       if (ret)
                goto out;
 
        ret = 0;
@@ -92,15 +117,13 @@ int create_and_preserve_memfd(int session_fd, int token, 
const char *data)
 int restore_and_verify_memfd(int session_fd, int token,
                             const char *expected_data)
 {
-       struct liveupdate_session_retrieve_fd arg = { .size = sizeof(arg) };
        long page_size = sysconf(_SC_PAGE_SIZE);
        void *map = MAP_FAILED;
        int mfd = -1, ret = -1;
 
-       arg.token = token;
-       if (ioctl(session_fd, LIVEUPDATE_SESSION_RETRIEVE_FD, &arg) < 0)
-               return -errno;
-       mfd = arg.fd;
+       mfd = luo_session_retrieve_fd(session_fd, token);
+       if (mfd < 0)
+               return mfd;
 
        map = mmap(NULL, page_size, PROT_READ, MAP_SHARED, mfd, 0);
        if (map == MAP_FAILED)
-- 
2.54.0.563.g4f69b47b94-goog


Reply via email to