2015-02-16 11:23:49

by Kirill A. Shutemov

[permalink] [raw]
Subject: [PATCH] module: do not print allocation-fail warning on bogus user buffer size

init_module(2) passes user-specified buffer length directly to
vmalloc(). It makes warn_alloc_failed() to print out a lot of info into
dmesg if user specified insane size, like -1.

Let's silence the warning. It doesn't add much value to -ENOMEM return
code. Without the patch the syscall is prohibitive noisy for testing
with trinity.

Signed-off-by: Kirill A. Shutemov <[email protected]>
Cc: Dave Jones <[email protected]>
Cc: Sasha Levin <[email protected]>
---
kernel/module.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/module.c b/kernel/module.c
index b34813f725e9..f63e5e8f3385 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2494,7 +2494,8 @@ static int copy_module_from_user(const void __user *umod, unsigned long len,
return err;

/* Suck in entire file: we'll want most of it. */
- info->hdr = vmalloc(info->len);
+ info->hdr = __vmalloc(info->len,
+ GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN, PAGE_KERNEL);
if (!info->hdr)
return -ENOMEM;

--
2.1.4


2015-02-16 23:56:18

by Rusty Russell

[permalink] [raw]
Subject: Re: [PATCH] module: do not print allocation-fail warning on bogus user buffer size

"Kirill A. Shutemov" <[email protected]> writes:
> init_module(2) passes user-specified buffer length directly to
> vmalloc(). It makes warn_alloc_failed() to print out a lot of info into
> dmesg if user specified insane size, like -1.
>
> Let's silence the warning. It doesn't add much value to -ENOMEM return
> code. Without the patch the syscall is prohibitive noisy for testing
> with trinity.

Heh, we used to have an explicit length check because vmalloc would
BUG(). So I guess this is progress...

Applied thanks,
Rusty.