From 7485bf2113972b43a86011f12ef120b65c08b044 Mon Sep 17 00:00:00 2001 From: nbd Date: Mon, 5 Mar 2012 00:12:44 +0000 Subject: [PATCH] kernel: fix vmalloc stack traces triggered by module with an empty init section (mostly happens on x86) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30813 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches-3.2/340-module_alloc_size_check.patch | 20 ++++++++++++++++++++ .../patches-3.3/340-module_alloc_size_check.patch | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 target/linux/generic/patches-3.2/340-module_alloc_size_check.patch create mode 100644 target/linux/generic/patches-3.3/340-module_alloc_size_check.patch diff --git a/target/linux/generic/patches-3.2/340-module_alloc_size_check.patch b/target/linux/generic/patches-3.2/340-module_alloc_size_check.patch new file mode 100644 index 0000000000..6c7e50a0b1 --- /dev/null +++ b/target/linux/generic/patches-3.2/340-module_alloc_size_check.patch @@ -0,0 +1,20 @@ +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2286,12 +2286,15 @@ + + void * __weak module_alloc(unsigned long size) + { +- return size == 0 ? NULL : vmalloc_exec(size); ++ return vmalloc_exec(size); + } + + static void *module_alloc_update_bounds(unsigned long size) + { +- void *ret = module_alloc(size); ++ void *ret = NULL; ++ ++ if (size) ++ ret = module_alloc(size); + + if (ret) { + mutex_lock(&module_mutex); diff --git a/target/linux/generic/patches-3.3/340-module_alloc_size_check.patch b/target/linux/generic/patches-3.3/340-module_alloc_size_check.patch new file mode 100644 index 0000000000..9830bc507c --- /dev/null +++ b/target/linux/generic/patches-3.3/340-module_alloc_size_check.patch @@ -0,0 +1,20 @@ +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2322,12 +2322,15 @@ + + void * __weak module_alloc(unsigned long size) + { +- return size == 0 ? NULL : vmalloc_exec(size); ++ return vmalloc_exec(size); + } + + static void *module_alloc_update_bounds(unsigned long size) + { +- void *ret = module_alloc(size); ++ void *ret = NULL; ++ ++ if (size) ++ ret = module_alloc(size); + + if (ret) { + mutex_lock(&module_mutex); -- 2.11.0