Messages in this thread Patch in this message | | | Date | Sat, 3 May 2008 22:14:24 +0800 | From | WANG Cong <> | Subject | [Patch] fs/binfmt_elf.c: fix wrong return values |
| |
When strnlen_user() fails, return 0 is suspecious. What's more, the caller returns 0 on success, so that logic is obviously wrong.
I am not sure if returning -EINVAL is good enough. I think it's better than -EFAULT here.
NOTE: This patch is _not_ tested yet!
Signed-off-by: WANG Cong <wangcong@zeuux.org> Cc: Alexander Viro <viro@zeniv.linux.org.uk>
--- fs/binfmt_elf.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 43254e3..10f9642 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -256,7 +256,7 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec, return -EFAULT; len = strnlen_user((void __user *)p, MAX_ARG_STRLEN); if (!len || len > MAX_ARG_STRLEN) - return 0; + return -EINVAL; p += len; } if (__put_user(0, argv)) @@ -268,7 +268,7 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec, return -EFAULT; len = strnlen_user((void __user *)p, MAX_ARG_STRLEN); if (!len || len > MAX_ARG_STRLEN) - return 0; + return -EINVAL; p += len; } if (__put_user(0, envp)) -- 1.5.4.1
| |