From: Veli-Pekka Peltola <veli-pekka.peltola@bluegiga.com>
To: linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org, linux-mips@linux-mips.org,
Russell King <linux@arm.linux.org.uk>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
x86@kernel.org
Subject: Re: [PATCH v2] mm: module_alloc: check if size is 0
Date: Mon, 19 Mar 2012 17:36:00 +0200 [thread overview]
Message-ID: <4F675260.2010205@bluegiga.com> (raw)
In-Reply-To: <1331125768-25454-1-git-send-email-veli-pekka.peltola@bluegiga.com>
Hi,
On 03/07/2012 03:09 PM, Veli-Pekka Peltola wrote:
> After commit de7d2b567d040e3b67fe7121945982f14343213d (mm/vmalloc.c: report
> more vmalloc failures) users will get a warning if vmalloc_node_range() is
> called with size 0. This happens if module's init size equals to 0. This
> patch changes ARM, MIPS and x86 module_alloc() to return NULL before calling
> vmalloc_node_range() that would also return NULL and print a warning.
>
> Signed-off-by: Veli-Pekka Peltola<veli-pekka.peltola@bluegiga.com>
> Cc: Russell King<linux@arm.linux.org.uk>
> Cc: Thomas Gleixner<tglx@linutronix.de>
> Cc: Ingo Molnar<mingo@redhat.com>
> Cc: "H. Peter Anvin"<hpa@zytor.com>
> Cc: x86@kernel.org
> ---
> I found this with ARM but after checking out various implementations of
> module_alloc() I thought it would be better to fix all at once.
>
> One way to replicate the warning:
> compile kernel with CONFIG_KALLSYMS=n
> insmod a module without init, I used usb-common.ko
>
> Changes since v1:
> - changed style as hpa suggested
>
> arch/arm/kernel/module.c | 2 ++
> arch/mips/kernel/module.c | 2 ++
> arch/x86/kernel/module.c | 2 +-
> 3 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
> index 1e9be5d..17648e2 100644
> --- a/arch/arm/kernel/module.c
> +++ b/arch/arm/kernel/module.c
> @@ -39,6 +39,8 @@
> #ifdef CONFIG_MMU
> void *module_alloc(unsigned long size)
> {
> + if (!size)
> + return NULL;
> return __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
> GFP_KERNEL, PAGE_KERNEL_EXEC, -1,
> __builtin_return_address(0));
> diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c
> index a5066b1..1a51de1 100644
> --- a/arch/mips/kernel/module.c
> +++ b/arch/mips/kernel/module.c
> @@ -47,6 +47,8 @@ static DEFINE_SPINLOCK(dbe_lock);
> #ifdef MODULE_START
> void *module_alloc(unsigned long size)
> {
> + if (!size)
> + return NULL;
> return __vmalloc_node_range(size, 1, MODULE_START, MODULE_END,
> GFP_KERNEL, PAGE_KERNEL, -1,
> __builtin_return_address(0));
> diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
> index 925179f..fd44d69 100644
> --- a/arch/x86/kernel/module.c
> +++ b/arch/x86/kernel/module.c
> @@ -38,7 +38,7 @@
>
> void *module_alloc(unsigned long size)
> {
> - if (PAGE_ALIGN(size)> MODULES_LEN)
> + if (!size || PAGE_ALIGN(size)> MODULES_LEN)
> return NULL;
> return __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
> GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC,
Any comments on this? Should I split all architectures to separate patches?
I just tested 3.3 on ARM and x86, both printed a warning and call trace
without this patch.
--
Veli-Pekka Peltola
WARNING: multiple messages have this Message-ID (diff)
From: veli-pekka.peltola@bluegiga.com (Veli-Pekka Peltola)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] mm: module_alloc: check if size is 0
Date: Mon, 19 Mar 2012 17:36:00 +0200 [thread overview]
Message-ID: <4F675260.2010205@bluegiga.com> (raw)
In-Reply-To: <1331125768-25454-1-git-send-email-veli-pekka.peltola@bluegiga.com>
Hi,
On 03/07/2012 03:09 PM, Veli-Pekka Peltola wrote:
> After commit de7d2b567d040e3b67fe7121945982f14343213d (mm/vmalloc.c: report
> more vmalloc failures) users will get a warning if vmalloc_node_range() is
> called with size 0. This happens if module's init size equals to 0. This
> patch changes ARM, MIPS and x86 module_alloc() to return NULL before calling
> vmalloc_node_range() that would also return NULL and print a warning.
>
> Signed-off-by: Veli-Pekka Peltola<veli-pekka.peltola@bluegiga.com>
> Cc: Russell King<linux@arm.linux.org.uk>
> Cc: Thomas Gleixner<tglx@linutronix.de>
> Cc: Ingo Molnar<mingo@redhat.com>
> Cc: "H. Peter Anvin"<hpa@zytor.com>
> Cc: x86 at kernel.org
> ---
> I found this with ARM but after checking out various implementations of
> module_alloc() I thought it would be better to fix all at once.
>
> One way to replicate the warning:
> compile kernel with CONFIG_KALLSYMS=n
> insmod a module without init, I used usb-common.ko
>
> Changes since v1:
> - changed style as hpa suggested
>
> arch/arm/kernel/module.c | 2 ++
> arch/mips/kernel/module.c | 2 ++
> arch/x86/kernel/module.c | 2 +-
> 3 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
> index 1e9be5d..17648e2 100644
> --- a/arch/arm/kernel/module.c
> +++ b/arch/arm/kernel/module.c
> @@ -39,6 +39,8 @@
> #ifdef CONFIG_MMU
> void *module_alloc(unsigned long size)
> {
> + if (!size)
> + return NULL;
> return __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
> GFP_KERNEL, PAGE_KERNEL_EXEC, -1,
> __builtin_return_address(0));
> diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c
> index a5066b1..1a51de1 100644
> --- a/arch/mips/kernel/module.c
> +++ b/arch/mips/kernel/module.c
> @@ -47,6 +47,8 @@ static DEFINE_SPINLOCK(dbe_lock);
> #ifdef MODULE_START
> void *module_alloc(unsigned long size)
> {
> + if (!size)
> + return NULL;
> return __vmalloc_node_range(size, 1, MODULE_START, MODULE_END,
> GFP_KERNEL, PAGE_KERNEL, -1,
> __builtin_return_address(0));
> diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
> index 925179f..fd44d69 100644
> --- a/arch/x86/kernel/module.c
> +++ b/arch/x86/kernel/module.c
> @@ -38,7 +38,7 @@
>
> void *module_alloc(unsigned long size)
> {
> - if (PAGE_ALIGN(size)> MODULES_LEN)
> + if (!size || PAGE_ALIGN(size)> MODULES_LEN)
> return NULL;
> return __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
> GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC,
Any comments on this? Should I split all architectures to separate patches?
I just tested 3.3 on ARM and x86, both printed a warning and call trace
without this patch.
--
Veli-Pekka Peltola
next prev parent reply other threads:[~2012-03-19 15:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-01 19:45 [PATCH] mm: module_alloc: check if size is 0 Veli-Pekka Peltola
2012-03-01 19:45 ` Veli-Pekka Peltola
2012-03-01 20:46 ` H. Peter Anvin
2012-03-01 20:46 ` H. Peter Anvin
2012-03-07 13:09 ` [PATCH v2] " Veli-Pekka Peltola
2012-03-07 13:09 ` Veli-Pekka Peltola
2012-03-19 15:36 ` Veli-Pekka Peltola [this message]
2012-03-19 15:36 ` Veli-Pekka Peltola
2013-06-27 9:39 ` Ralf Baechle
2013-06-27 9:39 ` Ralf Baechle
2013-06-27 22:23 ` Andrew Morton
2013-06-27 22:23 ` Andrew Morton
2013-06-27 22:46 ` Joe Perches
2013-06-27 22:46 ` Joe Perches
2013-07-01 3:18 ` Rusty Russell
2013-07-01 3:18 ` Rusty Russell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F675260.2010205@bluegiga.com \
--to=veli-pekka.peltola@bluegiga.com \
--cc=hpa@zytor.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux@arm.linux.org.uk \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.