Fix strlen_user usage in module.c
PATCH 1/1 Fix strlen_user usage in module.c
Spotted by Andi Kleen. strlen_user *is* documented, I just made assumptions.
Name: Fix strlen_user usage
Author: Rusty Russell
Status: Trivial
D: strlen_user returns 0 on error, not an error number, and otherwise
D: returns the length including the NUL byte. Found by Andi Kleen.
kernel/module.c +6 -6
@@ -1096,17 +1096,17 @@ static struct module *load_module(void * mod = (void *)sechdrs[modindex].sh_addr;/* Now copy in args */ - err =strlen_user (uargs); -if (err <0 ) + arglen =strlen_user (uargs); +if (!arglen) { + err = -EFAULT ; goto free_hdr; - arglen = err; - - args =kmalloc (arglen+1 ,GFP_KERNEL ); + } + args =kmalloc (arglen,GFP_KERNEL );if (!args) { err = -ENOMEM ; goto free_hdr; } -if (copy_from_user (args, uargs, arglen+1 ) !=0 ) { +if (copy_from_user (args, uargs, arglen) !=0 ) { err = -EFAULT ; goto free_mod; }
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.