]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
testsuite: check for ill-formed kcmdline
authorLucas De Marchi <lucas.demarchi@intel.com>
Tue, 10 Mar 2020 08:17:12 +0000 (01:17 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 13 Mar 2020 16:23:58 +0000 (09:23 -0700)
Commit ca3bf5d47cec ("iommu/amd: Introduces ivrs_acpihid kernel parameter")
in the kernel introduced an ill-formed kernel parameter, ivrs_acpihid.
The problem is that it may have a dot on the key side:
"ivrs_acpihid[00:14.5]=AMD0020:0". This could potentially trip our
parser of module options, but right now it's working as intended: the
only thing that happens is that after deciding "ivrs_acpihid[00:14" is a
module name, it will fail the underscores() routine and the option will
be ignored from the kmod pov (not kernel's pov since that driver parsers
the kernel command line by itself).

testsuite/rootfs-pristine/test-modprobe/module-param-kcmdline6/correct.txt [new file with mode: 0644]
testsuite/rootfs-pristine/test-modprobe/module-param-kcmdline6/proc/cmdline [new file with mode: 0644]
testsuite/test-modprobe.c

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-param-kcmdline6/correct.txt b/testsuite/rootfs-pristine/test-modprobe/module-param-kcmdline6/correct.txt
new file mode 100644 (file)
index 0000000..7a087ef
--- /dev/null
@@ -0,0 +1,6 @@
+options psmouse foo=2
+options psmouse bar=1
+options psmouse zinga=test
+
+# End of configuration files. Dumping indexes now:
+
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-param-kcmdline6/proc/cmdline b/testsuite/rootfs-pristine/test-modprobe/module-param-kcmdline6/proc/cmdline
new file mode 100644 (file)
index 0000000..14bbd2e
--- /dev/null
@@ -0,0 +1 @@
+psmouse.foo=2 ivrs_acpihid[14:00.5]=AMD0020:00 psmouse.bar=1 psmouse.zinga=test
index 1cace829827d5b0b006ef801a2a32fdc9c934d03..f908d56fd309b73710078440f24e9c1f8af35adb 100644 (file)
@@ -328,6 +328,31 @@ DEFINE_TEST(modprobe_param_kcmdline5,
        );
 
 
+static noreturn int modprobe_param_kcmdline6(const struct test *t)
+{
+       const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+       const char *const args[] = {
+               progname,
+               "-c",
+               NULL,
+       };
+
+       test_spawn_prog(progname, args);
+       exit(EXIT_FAILURE);
+}
+DEFINE_TEST(modprobe_param_kcmdline6,
+       .description = "check if dots on other parts of kcmdline don't confuse our parser",
+       .config = {
+               [TC_UNAME_R] = "4.4.4",
+               [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline6",
+       },
+       .output = {
+               .out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline6/correct.txt",
+       },
+       .modules_loaded = "",
+       );
+
+
 static noreturn int modprobe_force(const struct test *t)
 {
        const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";