selftests: liveupdate: add test for double preservation
Verify that a file can only be preserved once across all active sessions. Attempting to preserve it a second time, whether in the same or a different session, should fail with EBUSY. Link: https://lore.kernel.org/20260326163943.574070-4-pasha.tatashin@soleen.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Cc: David Matlack <dmatlack@google.com> Cc: Pratyush Yadav <pratyush@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Christian Brauner <brauner@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>master
parent
bc3a5763f4
commit
e3e613a33e
|
|
@ -345,4 +345,45 @@ TEST_F(liveupdate_device, preserve_unsupported_fd)
|
|||
ASSERT_EQ(close(session_fd), 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test Case: Prevent Double Preservation
|
||||
*
|
||||
* Verifies that a file (memfd) can only be preserved once across all active
|
||||
* sessions. Attempting to preserve it a second time, whether in the same or
|
||||
* a different session, should fail with EBUSY.
|
||||
*/
|
||||
TEST_F(liveupdate_device, prevent_double_preservation)
|
||||
{
|
||||
int session_fd1, session_fd2, mem_fd;
|
||||
int ret;
|
||||
|
||||
self->fd1 = open(LIVEUPDATE_DEV, O_RDWR);
|
||||
if (self->fd1 < 0 && errno == ENOENT)
|
||||
SKIP(return, "%s does not exist", LIVEUPDATE_DEV);
|
||||
ASSERT_GE(self->fd1, 0);
|
||||
|
||||
session_fd1 = create_session(self->fd1, "double-preserve-session-1");
|
||||
ASSERT_GE(session_fd1, 0);
|
||||
session_fd2 = create_session(self->fd1, "double-preserve-session-2");
|
||||
ASSERT_GE(session_fd2, 0);
|
||||
|
||||
mem_fd = memfd_create("test-memfd", 0);
|
||||
ASSERT_GE(mem_fd, 0);
|
||||
|
||||
/* First preservation should succeed */
|
||||
ASSERT_EQ(preserve_fd(session_fd1, mem_fd, 0x1111), 0);
|
||||
|
||||
/* Second preservation in a different session should fail with EBUSY */
|
||||
ret = preserve_fd(session_fd2, mem_fd, 0x2222);
|
||||
EXPECT_EQ(ret, -EBUSY);
|
||||
|
||||
/* Second preservation in the same session (different token) should fail with EBUSY */
|
||||
ret = preserve_fd(session_fd1, mem_fd, 0x3333);
|
||||
EXPECT_EQ(ret, -EBUSY);
|
||||
|
||||
ASSERT_EQ(close(mem_fd), 0);
|
||||
ASSERT_EQ(close(session_fd1), 0);
|
||||
ASSERT_EQ(close(session_fd2), 0);
|
||||
}
|
||||
|
||||
TEST_HARNESS_MAIN
|
||||
|
|
|
|||
Loading…
Reference in New Issue