mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
kho: remove abort functionality and support state refresh
Previously, KHO required a dedicated kho_abort() function to clean up state before kho_finalize() could be called again. This was necessary to handle complex unwind paths when using notifiers. With the shift to direct memory preservation, the explicit abort step is no longer strictly necessary. Remove kho_abort() and refactor kho_finalize() to handle re-entry. If kho_finalize() is called while KHO is already finalized, it will now automatically clean up the previous memory map and state before generating a new one. This allows the KHO state to be updated/refreshed simply by triggering finalize again. Update debugfs to return -EINVAL if userspace attempts to write 0 to the finalize attribute, as explicit abort is no longer supported. Link: https://lkml.kernel.org/r/20251114190002.3311679-10-pasha.tatashin@soleen.com Suggested-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reviewed-by: Pratyush Yadav <pratyush@kernel.org> Cc: Alexander Graf <graf@amazon.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Baoquan He <bhe@redhat.com> Cc: Coiby Xu <coxu@redhat.com> Cc: Dave Vasilevsky <dave@vasilevsky.ca> Cc: Eric Biggers <ebiggers@google.com> Cc: Kees Cook <kees@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
efa3a9775a
commit
9a4301f715
3 changed files with 5 additions and 19 deletions
|
|
@ -1232,21 +1232,6 @@ void kho_restore_free(void *mem)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(kho_restore_free);
|
||||
|
||||
int kho_abort(void)
|
||||
{
|
||||
if (!kho_enable)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
guard(mutex)(&kho_out.lock);
|
||||
if (!kho_out.finalized)
|
||||
return -ENOENT;
|
||||
|
||||
kho_update_memory_map(NULL);
|
||||
kho_out.finalized = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __kho_finalize(void)
|
||||
{
|
||||
void *root = kho_out.fdt;
|
||||
|
|
@ -1297,8 +1282,10 @@ int kho_finalize(void)
|
|||
return -EOPNOTSUPP;
|
||||
|
||||
guard(mutex)(&kho_out.lock);
|
||||
if (kho_out.finalized)
|
||||
return -EEXIST;
|
||||
if (kho_out.finalized) {
|
||||
kho_update_memory_map(NULL);
|
||||
kho_out.finalized = false;
|
||||
}
|
||||
|
||||
ret = __kho_finalize();
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ static int kho_out_finalize_set(void *data, u64 val)
|
|||
if (val)
|
||||
return kho_finalize();
|
||||
else
|
||||
return kho_abort();
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
DEFINE_DEBUGFS_ATTRIBUTE(kho_out_finalize_fops, kho_out_finalize_get,
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ extern unsigned int kho_scratch_cnt;
|
|||
|
||||
bool kho_finalized(void);
|
||||
int kho_finalize(void);
|
||||
int kho_abort(void);
|
||||
|
||||
#ifdef CONFIG_KEXEC_HANDOVER_DEBUGFS
|
||||
int kho_debugfs_init(void);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue