]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
testsuite: depmod: add module dependency outside cyclic chain
authorMian Yousaf Kaukab <yousaf.kaukab@suse.com>
Tue, 8 Nov 2016 16:45:49 +0000 (17:45 +0100)
committerLucas De Marchi <lucas.demarchi@intel.com>
Wed, 9 Nov 2016 00:28:40 +0000 (22:28 -0200)
Check that depmod do not report modules outside cyclic chain

Two modules f and g are added which do not have any dependency.
modules a and b are made dependent on f and g.

Here is the output of loop dependency check test after adding this
patch:

TESTSUITE: ERR: wrong:
depmod: ERROR: Found 7 modules in dependency cycles!
depmod: ERROR: Cycle detected: mod_loop_d -> mod_loop_e -> mod_loop_d
depmod: ERROR: Cycle detected: mod_loop_b -> mod_loop_c -> mod_loop_a -> mod_loop_b
depmod: ERROR: Cycle detected: mod_loop_b -> mod_loop_c -> mod_loop_a -> mod_loop_g
depmod: ERROR: Cycle detected: mod_loop_b -> mod_loop_c -> mod_loop_a -> mod_loop_f

Buffer overflow occurs in the loop when last two lines are printed.
43 bytes buffer is allocated and 53 bytes are used.

Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@suse.com>
testsuite/module-playground/Makefile
testsuite/module-playground/mod-loop-a.c
testsuite/module-playground/mod-loop-b.c
testsuite/module-playground/mod-loop-f.c [new file with mode: 0644]
testsuite/module-playground/mod-loop-g.c [new file with mode: 0644]
testsuite/module-playground/mod-loop.h
testsuite/populate-modules.sh

index a5f142f96abf654f4a428354e3732d32dc4dc640..bf364a9207fa250df7134915ae80593aa1f27e8b 100644 (file)
@@ -12,13 +12,17 @@ obj-m += mod-foo-c.o
 obj-m += mod-foo.o
 
 # mod-loop: create loops in dependencies:
-# 1) mod-loop-a -> mod-loop-b -> mod-loop-c -> mod-loop-a
+# 1) mod-loop-a  ->  mod-loop-b -> mod-loop-c -> mod-loop-a
+#     |-> mod-loop-f    |-> mod-loop-f
+#     \-> mod-loop-g    \-> mod-loop-g
 # 2) mod-loop-d -> mod-loop-e -> mod-loop-d
 obj-m += mod-loop-a.o
 obj-m += mod-loop-b.o
 obj-m += mod-loop-c.o
 obj-m += mod-loop-d.o
 obj-m += mod-loop-e.o
+obj-m += mod-loop-f.o
+obj-m += mod-loop-g.o
 
 # mod-fake-*: fake the respective modules in kernel with these aliases. Aliases
 # list was taken from 3.5.4
index e1fd0ce6b38ca49ffedbb8de7ef3b08034318c88..e5adb4931274f3c636f70190f365a407ceb60962 100644 (file)
@@ -10,6 +10,8 @@ static int __init test_module_init(void)
 {
        printA();
        printB();
+       printF();
+       printG();
 
        return 0;
 }
index f4490b7aec4e0136bd6140e4d2a843c7f94c411f..26232ea13ac0078591be01049c047685b1903384 100644 (file)
@@ -10,6 +10,8 @@ static int __init test_module_init(void)
 {
        printB();
        printC();
+       printF();
+       printG();
 
        return 0;
 }
diff --git a/testsuite/module-playground/mod-loop-f.c b/testsuite/module-playground/mod-loop-f.c
new file mode 100644 (file)
index 0000000..0abb161
--- /dev/null
@@ -0,0 +1,24 @@
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/printk.h>
+
+#include "mod-loop.h"
+
+static int __init test_module_init(void)
+{
+       printF();
+
+       return 0;
+}
+module_init(test_module_init);
+
+void printF(void)
+{
+       pr_warn("Hello, world F\n");
+}
+EXPORT_SYMBOL(printF);
+
+MODULE_AUTHOR("Lucas De Marchi <lucas.demarchi@intel.com>");
+MODULE_LICENSE("LGPL");
diff --git a/testsuite/module-playground/mod-loop-g.c b/testsuite/module-playground/mod-loop-g.c
new file mode 100644 (file)
index 0000000..0965d76
--- /dev/null
@@ -0,0 +1,24 @@
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/printk.h>
+
+#include "mod-loop.h"
+
+static int __init test_module_init(void)
+{
+       printG();
+
+       return 0;
+}
+module_init(test_module_init);
+
+void printG(void)
+{
+       pr_warn("Hello, world G\n");
+}
+EXPORT_SYMBOL(printG);
+
+MODULE_AUTHOR("Lucas De Marchi <lucas.demarchi@intel.com>");
+MODULE_LICENSE("LGPL");
index 3244ad9829e681a780b870993e1c78180af73e05..4da3e675a77ba86437b533ade9ab9ac8781c6cad 100644 (file)
@@ -5,3 +5,5 @@ void printB(void);
 void printC(void);
 void printD(void);
 void printE(void);
+void printF(void);
+void printG(void);
index 409a6de301b8fe05f3aaa1ee41c575c829dfc252..ba1f842d9a44cd02c8dacc16150af2d78944e525 100755 (executable)
@@ -16,6 +16,8 @@ map=(
     ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-c.ko"]="mod-loop-c.ko"
     ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-d.ko"]="mod-loop-d.ko"
     ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-e.ko"]="mod-loop-e.ko"
+    ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-f.ko"]="mod-loop-f.ko"
+    ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-g.ko"]="mod-loop-g.ko"
     ["test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/foo/"]="mod-foo-b.ko"
     ["test-dependencies/lib/modules/4.0.20-kmod/kernel/"]="mod-foo-c.ko"
     ["test-dependencies/lib/modules/4.0.20-kmod/kernel/lib/"]="mod-foo-a.ko"