proc: fixup empty ARGV case for /proc/$PID/cmdline
PATCH 1/1 proc: fixup empty ARGV case for /proc/$PID/cmdline
/proc/*/cmdline code checks if it should look at ENVP area by checking last byte of ARGV area:
rv = access_remote_vm(mm, arg_end - 1, &c, 1, 0); if (rv <= 0) goto out_free_page;
If ARGV is somehow made empty (by doing execve(..., NULL, ...) or manually setting ->arg_start and ->arg_end to equal values), the decision will be based on byte which doesn't even belong to ARGV/ENVP.
So, quickly check if ARGV area is empty and report 0 to match previous behaviour.
Signed-off-by Alexey Dobriyan <[email protected]>
---
fs/proc/base.c | 5 +++++ 1 file changed, 5 insertions(+)
fs/proc/base.c +5 -0
@@ -243,6 +243,11 @@ static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf, len1 = arg_end - arg_start; len2 = env_end - env_start; +/* Empty ARGV. */ +if (len1 ==0 ) { + rv =0 ; + goto out_free_page; + }/* * Inherently racy -- command line shares address space * with code and data.