diff options
author | Yauheni Kaliuta <yauheni.kaliuta@redhat.com> | 2017-02-22 11:41:58 +0200 |
---|---|---|
committer | Lucas De Marchi <lucas.demarchi@intel.com> | 2017-02-22 04:50:22 -0800 |
commit | 9be03c52ccae073745f46e857296f2c21be10e03 (patch) | |
tree | 44221480121ab032c07e9c14781abb1f468eb070 | |
parent | 31dd40a6b8fd66127496fc0772b6dbe0a3e5b823 (diff) | |
download | kmod-9be03c52ccae073745f46e857296f2c21be10e03.tar.gz kmod-9be03c52ccae073745f46e857296f2c21be10e03.zip |
testsuite: depmod: check netsted loops reporting
The patch adds nested loops configuration for the loop test:
mod-loop-h -> mod-loop-i -> mod-loop-j -> mod-loop-k
^ | |
--------------------------- |
| |
-------------------------------------------
making 2 loops with common edges:
mod-loop-h -> mod-loop-i -> mod-loop-j -> mod-loop-h
mod-loop-h -> mod-loop-i -> mod-loop-j -> mod-loop-k -> mod-loop-h
The actual output for the loops is:
depmod: ERROR: Cycle detected: mod_loop_h -> mod_loop_h
depmod: ERROR: Cycle detected: mod_loop_i -> mod_loop_j -> mod_loop_k -> mod_loop_h -> mod_loop_i
(the order in the second doesn't matter, but the first one is
incorrect)
Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | testsuite/module-playground/Makefile | 7 | ||||
-rw-r--r-- | testsuite/module-playground/cache/mod-loop-h.ko | bin | 0 -> 197808 bytes | |||
-rw-r--r-- | testsuite/module-playground/cache/mod-loop-i.ko | bin | 0 -> 197808 bytes | |||
-rw-r--r-- | testsuite/module-playground/cache/mod-loop-j.ko | bin | 0 -> 197968 bytes | |||
-rw-r--r-- | testsuite/module-playground/cache/mod-loop-k.ko | bin | 0 -> 197808 bytes | |||
-rw-r--r-- | testsuite/module-playground/mod-loop-h.c | 25 | ||||
-rw-r--r-- | testsuite/module-playground/mod-loop-i.c | 25 | ||||
-rw-r--r-- | testsuite/module-playground/mod-loop-j.c | 26 | ||||
-rw-r--r-- | testsuite/module-playground/mod-loop-k.c | 25 | ||||
-rw-r--r-- | testsuite/module-playground/mod-loop.h | 4 | ||||
-rwxr-xr-x | testsuite/populate-modules.sh | 4 | ||||
-rw-r--r-- | testsuite/rootfs-pristine/test-depmod/detect-loop/correct.txt | 6 |
13 files changed, 124 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am index 981a1af..76262bb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -287,6 +287,10 @@ EXTRA_DIST += \ testsuite/module-playground/mod-loop-e.c \ testsuite/module-playground/mod-loop-f.c \ testsuite/module-playground/mod-loop-g.c \ + testsuite/module-playground/mod-loop-h.c \ + testsuite/module-playground/mod-loop-i.c \ + testsuite/module-playground/mod-loop-j.c \ + testsuite/module-playground/mod-loop-k.c \ testsuite/module-playground/mod-loop.h \ testsuite/module-playground/mod-simple.c \ testsuite/module-playground/mod-simple-i386.ko \ diff --git a/testsuite/module-playground/Makefile b/testsuite/module-playground/Makefile index bf364a9..e6045b0 100644 --- a/testsuite/module-playground/Makefile +++ b/testsuite/module-playground/Makefile @@ -16,6 +16,9 @@ obj-m += mod-foo.o # |-> mod-loop-f |-> mod-loop-f # \-> mod-loop-g \-> mod-loop-g # 2) mod-loop-d -> mod-loop-e -> mod-loop-d +# 3.1) mod-loop-h -> mod-loop-i -> mod-loop-j -> mod-loop-h +# 3.2) mod-loop-h -> mod-loop-i -> mod-loop-j -> mod-loop-k -> mod-loop-h + obj-m += mod-loop-a.o obj-m += mod-loop-b.o obj-m += mod-loop-c.o @@ -23,6 +26,10 @@ obj-m += mod-loop-d.o obj-m += mod-loop-e.o obj-m += mod-loop-f.o obj-m += mod-loop-g.o +obj-m += mod-loop-h.o +obj-m += mod-loop-i.o +obj-m += mod-loop-j.o +obj-m += mod-loop-k.o # mod-fake-*: fake the respective modules in kernel with these aliases. Aliases # list was taken from 3.5.4 diff --git a/testsuite/module-playground/cache/mod-loop-h.ko b/testsuite/module-playground/cache/mod-loop-h.ko Binary files differnew file mode 100644 index 0000000..cbd81e5 --- /dev/null +++ b/testsuite/module-playground/cache/mod-loop-h.ko diff --git a/testsuite/module-playground/cache/mod-loop-i.ko b/testsuite/module-playground/cache/mod-loop-i.ko Binary files differnew file mode 100644 index 0000000..045bc4f --- /dev/null +++ b/testsuite/module-playground/cache/mod-loop-i.ko diff --git a/testsuite/module-playground/cache/mod-loop-j.ko b/testsuite/module-playground/cache/mod-loop-j.ko Binary files differnew file mode 100644 index 0000000..067aa4b --- /dev/null +++ b/testsuite/module-playground/cache/mod-loop-j.ko diff --git a/testsuite/module-playground/cache/mod-loop-k.ko b/testsuite/module-playground/cache/mod-loop-k.ko Binary files differnew file mode 100644 index 0000000..2cc16d1 --- /dev/null +++ b/testsuite/module-playground/cache/mod-loop-k.ko diff --git a/testsuite/module-playground/mod-loop-h.c b/testsuite/module-playground/mod-loop-h.c new file mode 100644 index 0000000..6f457e2 --- /dev/null +++ b/testsuite/module-playground/mod-loop-h.c @@ -0,0 +1,25 @@ +#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) +{ + printH(); + printI(); + + return 0; +} +module_init(test_module_init); + +void printH(void) +{ + pr_warn("Hello, world H\n"); +} +EXPORT_SYMBOL(printH); + +MODULE_AUTHOR("Lucas De Marchi <lucas.demarchi@intel.com>"); +MODULE_LICENSE("LGPL"); diff --git a/testsuite/module-playground/mod-loop-i.c b/testsuite/module-playground/mod-loop-i.c new file mode 100644 index 0000000..6456217 --- /dev/null +++ b/testsuite/module-playground/mod-loop-i.c @@ -0,0 +1,25 @@ +#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) +{ + printI(); + printJ(); + + return 0; +} +module_init(test_module_init); + +void printI(void) +{ + pr_warn("Hello, world I\n"); +} +EXPORT_SYMBOL(printI); + +MODULE_AUTHOR("Lucas De Marchi <lucas.demarchi@intel.com>"); +MODULE_LICENSE("LGPL"); diff --git a/testsuite/module-playground/mod-loop-j.c b/testsuite/module-playground/mod-loop-j.c new file mode 100644 index 0000000..facc81f --- /dev/null +++ b/testsuite/module-playground/mod-loop-j.c @@ -0,0 +1,26 @@ +#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) +{ + printJ(); + printH(); + printK(); + + return 0; +} +module_init(test_module_init); + +void printJ(void) +{ + pr_warn("Hello, world J\n"); +} +EXPORT_SYMBOL(printJ); + +MODULE_AUTHOR("Lucas De Marchi <lucas.demarchi@intel.com>"); +MODULE_LICENSE("LGPL"); diff --git a/testsuite/module-playground/mod-loop-k.c b/testsuite/module-playground/mod-loop-k.c new file mode 100644 index 0000000..49386cc --- /dev/null +++ b/testsuite/module-playground/mod-loop-k.c @@ -0,0 +1,25 @@ +#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) +{ + printK(); + printH(); + + return 0; +} +module_init(test_module_init); + +void printK(void) +{ + pr_warn("Hello, world K\n"); +} +EXPORT_SYMBOL(printK); + +MODULE_AUTHOR("Lucas De Marchi <lucas.demarchi@intel.com>"); +MODULE_LICENSE("LGPL"); diff --git a/testsuite/module-playground/mod-loop.h b/testsuite/module-playground/mod-loop.h index 4da3e67..b9f5e82 100644 --- a/testsuite/module-playground/mod-loop.h +++ b/testsuite/module-playground/mod-loop.h @@ -7,3 +7,7 @@ void printD(void); void printE(void); void printF(void); void printG(void); +void printH(void); +void printI(void); +void printJ(void); +void printK(void); diff --git a/testsuite/populate-modules.sh b/testsuite/populate-modules.sh index ba1f842..a7e5036 100755 --- a/testsuite/populate-modules.sh +++ b/testsuite/populate-modules.sh @@ -18,6 +18,10 @@ map=( ["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-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-h.ko"]="mod-loop-h.ko" + ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-i.ko"]="mod-loop-i.ko" + ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-j.ko"]="mod-loop-j.ko" + ["test-depmod/detect-loop/lib/modules/4.4.4/kernel/mod-loop-k.ko"]="mod-loop-k.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" diff --git a/testsuite/rootfs-pristine/test-depmod/detect-loop/correct.txt b/testsuite/rootfs-pristine/test-depmod/detect-loop/correct.txt index 01ecb89..ff28545 100644 --- a/testsuite/rootfs-pristine/test-depmod/detect-loop/correct.txt +++ b/testsuite/rootfs-pristine/test-depmod/detect-loop/correct.txt @@ -1,3 +1,5 @@ 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: Found 5 modules in dependency cycles! +depmod: ERROR: Cycle detected: mod_loop_i -> mod_loop_j -> mod_loop_k -> mod_loop_h -> mod_loop_i +depmod: ERROR: Cycle detected: mod_loop_i -> mod_loop_j -> mod_loop_h -> mod_loop_i +depmod: ERROR: Cycle detected: mod_loop_c -> mod_loop_a -> mod_loop_b -> mod_loop_c +depmod: ERROR: Found 9 modules in dependency cycles! |