Skip to contentSkip to conversation

fs/binfmt_elf.c: fix wrong return values

PATCH New WANG Cong 1 participant 1 message May 3, 2008

Subsystems (2)
lore
Share & tools
lore

WANG Cong

author
#0 lore raw

PATCH 1/1 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!

Cc Alexander Viro <[email protected]>
---
 fs/binfmt_elf.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
fs/binfmt_elf.c +2 -2
index 43254e3..10f9642 100644
@@ -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))
Signature · 1 line
1.5.4.1