]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
kexec_core: Fix error code path in the KEXEC_JUMP flow
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 10 Jul 2025 13:10:41 +0000 (15:10 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 15 Jul 2025 12:56:37 +0000 (14:56 +0200)
If dpm_suspend_start() fails, dpm_resume_end() must be called to
recover devices whose suspend callbacks have been called, but this
does not happen in the KEXEC_JUMP flow's error path due to a confused
goto target label.

Address this by using the correct target label in the goto statement in
question and drop the Resume_console label that is not used any more.

Fixes: 2965faa5e03d ("kexec: split kexec_load syscall from kexec core code")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Baoquan He <bhe@redhat.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://patch.msgid.link/2396879.ElGaqSPkdT@rjwysocki.net
[ rjw: Drop unused label and amend the changelog ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
kernel/kexec_core.c

index 3a9a9f240dbc9653db29c7cc2a6209e8bb70b394..5543695952982b8f98d035bd8ddf0bbf4638cd1e 100644 (file)
@@ -1080,7 +1080,7 @@ int kernel_kexec(void)
                console_suspend_all();
                error = dpm_suspend_start(PMSG_FREEZE);
                if (error)
-                       goto Resume_console;
+                       goto Resume_devices;
                /*
                 * dpm_suspend_end() must be called after dpm_suspend_start()
                 * to complete the transition, like in the hibernation flows
@@ -1135,7 +1135,6 @@ int kernel_kexec(void)
                dpm_resume_start(PMSG_RESTORE);
  Resume_devices:
                dpm_resume_end(PMSG_RESTORE);
- Resume_console:
                pm_restore_gfp_mask();
                console_resume_all();
                thaw_processes();