Commit f653ff7a authored by Pasha Tatashin's avatar Pasha Tatashin Committed by Andrew Morton
Browse files

tests/liveupdate: add in-kernel liveupdate test

Introduce an in-kernel test module to validate the core logic of the Live
Update Orchestrator's File-Lifecycle-Bound feature.  This provides a
low-level, controlled environment to test FLB registration and callback
invocation without requiring userspace interaction or actual kexec
reboots.

The test is enabled by the CONFIG_LIVEUPDATE_TEST Kconfig option.

Link: https://lkml.kernel.org/r/20251218155752.3045808-6-pasha.tatashin@soleen.com


Signed-off-by: default avatarPasha Tatashin <pasha.tatashin@soleen.com>
Cc: Alexander Graf <graf@amazon.com>
Cc: David Gow <davidgow@google.com>
Cc: David Matlack <dmatlack@google.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Kees Cook <kees@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Pratyush Yadav <pratyush@kernel.org>
Cc: Samiullah Khawaja <skhawaja@google.com>
Cc: Tamir Duberstein <tamird@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent cab056f2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -14652,6 +14652,7 @@ F: include/linux/liveupdate.h
F:	include/linux/liveupdate/
F:	include/uapi/linux/liveupdate.h
F:	kernel/liveupdate/
F:	lib/tests/liveupdate.c
F:	mm/memfd_luo.c
F:	tools/testing/selftests/liveupdate/
+5 −0
Original line number Diff line number Diff line
@@ -239,4 +239,9 @@ struct luo_flb_ser {
	u64 count;
} __packed;

/* Kernel Live Update Test ABI */
#ifdef CONFIG_LIVEUPDATE_TEST
#define LIVEUPDATE_TEST_FLB_COMPATIBLE(i)	"liveupdate-test-flb-v" #i
#endif

#endif /* _LINUX_KHO_ABI_LUO_H */
+7 −1
Original line number Diff line number Diff line
@@ -864,6 +864,8 @@ int liveupdate_register_file_handler(struct liveupdate_file_handler *fh)
	list_add_tail(&ACCESS_PRIVATE(fh, list), &luo_file_handler_list);
	luo_session_resume();

	liveupdate_test_register(fh);

	return 0;

err_resume:
@@ -895,8 +897,10 @@ int liveupdate_unregister_file_handler(struct liveupdate_file_handler *fh)
	if (!liveupdate_enabled())
		return -EOPNOTSUPP;

	liveupdate_test_unregister(fh);

	if (!luo_session_quiesce())
		return -EBUSY;
		goto err_register;

	if (!list_empty(&ACCESS_PRIVATE(fh, flb_list)))
		goto err_resume;
@@ -909,5 +913,7 @@ int liveupdate_unregister_file_handler(struct liveupdate_file_handler *fh)

err_resume:
	luo_session_resume();
err_register:
	liveupdate_test_register(fh);
	return err;
}
+8 −0
Original line number Diff line number Diff line
@@ -107,4 +107,12 @@ int __init luo_flb_setup_outgoing(void *fdt);
int __init luo_flb_setup_incoming(void *fdt);
void luo_flb_serialize(void);

#ifdef CONFIG_LIVEUPDATE_TEST
void liveupdate_test_register(struct liveupdate_file_handler *fh);
void liveupdate_test_unregister(struct liveupdate_file_handler *fh);
#else
static inline void liveupdate_test_register(struct liveupdate_file_handler *fh) { }
static inline void liveupdate_test_unregister(struct liveupdate_file_handler *fh) { }
#endif

#endif /* _LINUX_LUO_INTERNAL_H */
+23 −0
Original line number Diff line number Diff line
@@ -2825,6 +2825,29 @@ config LINEAR_RANGES_TEST

	  If unsure, say N.

config LIVEUPDATE_TEST
	bool "Live Update Kernel Test"
	default n
	depends on LIVEUPDATE
	help
	  Enable a built-in kernel test module for the Live Update
	  Orchestrator.

	  This module validates the File-Lifecycle-Bound subsystem by
	  registering a set of mock FLB objects with any real file handlers
	  that support live update (such as the memfd handler).

	  When live update operations are performed, this test module will
	  output messages to the kernel log (dmesg), confirming that its
	  registration and various callback functions (preserve, retrieve,
	  finish, etc.) are being invoked correctly.

	  This is a debugging and regression testing tool for developers
	  working on the Live Update subsystem. It should not be enabled in
	  production kernels.

	  If unsure, say N

config CMDLINE_KUNIT_TEST
	tristate "KUnit test for cmdline API" if !KUNIT_ALL_TESTS
	depends on KUNIT
Loading