]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-install: silently ignore unexpected arguments for 'remove' command
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 19 Jul 2023 01:47:53 +0000 (10:47 +0900)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 19 Jul 2023 05:24:36 +0000 (07:24 +0200)
The shell script version of kernel-install silently ignored unexpected
arguments, but C version refused that. Unfortunately, Fedora's kernel
script specifies kernel file even for 'remove' command. Let's accept
extra arguments and silently ignore them to keep backward compatibility.

Fixes #28448.
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2223794.

src/kernel-install/kernel-install.c
src/kernel-install/test-kernel-install.sh

index 0acd8ebaa815cf958fde8e09f4f7a57c9fcb56f2..c573228991e89c72e1a803877066cdcf09f1809b 100644 (file)
@@ -1041,9 +1041,13 @@ static int verb_remove(int argc, char *argv[], void *userdata) {
         Context *c = ASSERT_PTR(userdata);
         int r;
 
-        assert(argc == 2);
+        assert(argc >= 2);
         assert(argv);
 
+        if (argc > 2)
+                log_debug("Too many arguments specified. 'kernel-install remove' takes only kernel version. "
+                          "Ignoring residual arguments.");
+
         c->action = ACTION_REMOVE;
 
         r = context_set_version(c, argv[1]);
@@ -1220,7 +1224,7 @@ static int parse_argv(int argc, char *argv[], Context *c) {
 static int run(int argc, char* argv[]) {
         static const Verb verbs[] = {
                 { "add",         3,        VERB_ANY, 0,            verb_add            },
-                { "remove",      2,        2,        0,            verb_remove         },
+                { "remove",      2,        VERB_ANY, 0,            verb_remove         },
                 { "inspect",     1,        2,        VERB_DEFAULT, verb_inspect        },
                 {}
         };
index b7b7eae7e1d0032f4cf7fa2a36df5dab86cc5b7c..aa0881a6e07e4ea52ef154abf2e2fed8fd0753a2 100755 (executable)
@@ -71,6 +71,18 @@ test ! -e "$entry"
 test ! -e "$BOOT_ROOT/the-token/1.1.1/linux"
 test ! -e "$BOOT_ROOT/the-token/1.1.1/initrd"
 
+# Test again with too many arguments for 'remove' command. See #28448.
+"$kernel_install" -v add 1.1.1 "$D/sources/linux" "$D/sources/initrd"
+
+test -f "$entry"
+test -f "$BOOT_ROOT/the-token/1.1.1/linux"
+test -f "$BOOT_ROOT/the-token/1.1.1/initrd"
+
+"$kernel_install" -v remove 1.1.1 hoge foo bar
+test ! -e "$entry"
+test ! -e "$BOOT_ROOT/the-token/1.1.1/linux"
+test ! -e "$BOOT_ROOT/the-token/1.1.1/initrd"
+
 # Invoke kernel-install as installkernel
 ln -s --relative -v "$kernel_install" "$D/sources/installkernel"
 "$D/sources/installkernel" -v 1.1.2 "$D/sources/linux" System.map /somedirignored