Commit f1a77e51 authored by Olaf Kirch's avatar Olaf Kirch Committed by Linus Torvalds

[PATCH] /proc/PID/cmdline truncates arguments early

We received a bug report that /proc/PID/cmdline only shows argv[0] if the
total length of all arguments exceeds PAGE_SIZE.  The problem is that
proc_pid_cmdline checks for the presence of a NUL byte at the end of the
args list, and assumes that the application did a setproctitle if there's
any other character.

OTOH proc_pid_cmdline will read just the first PAGE_SIZE worth of arguments
at most, and if you have more arguments, it's quite likely that there won't
be a NUL byte at offset PAGE_SIZE-1.

The attached patch fixes this.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 41202280
...@@ -352,7 +352,7 @@ static int proc_pid_cmdline(struct task_struct *task, char * buffer) ...@@ -352,7 +352,7 @@ static int proc_pid_cmdline(struct task_struct *task, char * buffer)
// If the nul at the end of args has been overwritten, then // If the nul at the end of args has been overwritten, then
// assume application is using setproctitle(3). // assume application is using setproctitle(3).
if (res > 0 && buffer[res-1] != '\0') { if (res > 0 && buffer[res-1] != '\0' && len < PAGE_SIZE) {
len = strnlen(buffer, res); len = strnlen(buffer, res);
if (len < res) { if (len < res) {
res = len; res = len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment