52 lines
1.6 KiB
Diff
52 lines
1.6 KiB
Diff
|
|
From 9cf721279f6cb0dec09c8752e471f15fb662406b Mon Sep 17 00:00:00 2001
|
||
|
|
From: Petr Tesarik <ptesarik@suse.com>
|
||
|
|
Date: Fri, 13 Mar 2020 15:09:29 +0100
|
||
|
|
Subject: [PATCH] kexec-tools: Reset getopt before falling back to legacy
|
||
|
|
syscall
|
||
|
|
|
||
|
|
The modules may need to parse the arguments again after
|
||
|
|
kexec_file_load(2) failed, but getopt is not reset.
|
||
|
|
|
||
|
|
This change fixes the --initrd option on s390x. Without this patch,
|
||
|
|
it will fail to load the initrd on kernels that do not implement
|
||
|
|
kexec_file_load(2).
|
||
|
|
|
||
|
|
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
|
||
|
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||
|
|
|
||
|
|
diff --git a/kexec/kexec.c b/kexec/kexec.c
|
||
|
|
index 33c1b4b..6601f1f 100644
|
||
|
|
--- a/kexec/kexec.c
|
||
|
|
+++ b/kexec/kexec.c
|
||
|
|
@@ -1538,8 +1538,12 @@ int main(int argc, char *argv[])
|
||
|
|
if (do_unload) {
|
||
|
|
if (do_kexec_file_syscall) {
|
||
|
|
result = kexec_file_unload(kexec_file_flags);
|
||
|
|
- if (result == EFALLBACK && do_kexec_fallback)
|
||
|
|
+ if (result == EFALLBACK && do_kexec_fallback) {
|
||
|
|
+ /* Reset getopt for fallback */
|
||
|
|
+ opterr = 1;
|
||
|
|
+ optind = 1;
|
||
|
|
do_kexec_file_syscall = 0;
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
if (!do_kexec_file_syscall)
|
||
|
|
result = k_unload(kexec_flags);
|
||
|
|
@@ -1548,8 +1552,12 @@ int main(int argc, char *argv[])
|
||
|
|
if (do_kexec_file_syscall) {
|
||
|
|
result = do_kexec_file_load(fileind, argc, argv,
|
||
|
|
kexec_file_flags);
|
||
|
|
- if (result == EFALLBACK && do_kexec_fallback)
|
||
|
|
+ if (result == EFALLBACK && do_kexec_fallback) {
|
||
|
|
+ /* Reset getopt for fallback */
|
||
|
|
+ opterr = 1;
|
||
|
|
+ optind = 1;
|
||
|
|
do_kexec_file_syscall = 0;
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
if (!do_kexec_file_syscall)
|
||
|
|
result = my_load(type, fileind, argc, argv,
|
||
|
|
--
|
||
|
|
1.8.3.1
|
||
|
|
|