diff options
| author | Alexey Dobriyan <[email protected]> | 2015-06-25 15:00:54 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2015-06-25 17:00:37 -0700 | 
| commit | c2c0bb44620dece7ec97e28167e32c343da22867 (patch) | |
| tree | b5241c0292ac868eec2c5589cdbffed224fd09b0 /fs/proc/array.c | |
| parent | 4a00e9df293d010acbea118b9521e08cb85016c6 (diff) | |
proc: fix PAGE_SIZE limit of /proc/$PID/cmdline
/proc/$PID/cmdline truncates output at PAGE_SIZE. It is easy to see with
	$ cat /proc/self/cmdline $(seq 1037) 2>/dev/null
However, command line size was never limited to PAGE_SIZE but to 128 KB
and relatively recently limitation was removed altogether.
People noticed and ask questions:
http://stackoverflow.com/questions/199130/how-do-i-increase-the-proc-pid-cmdline-4096-byte-limit
seq file interface is not OK, because it kmalloc's for whole output and
open + read(, 1) + sleep will pin arbitrary amounts of kernel memory.  To
not do that, limit must be imposed which is incompatible with arbitrary
sized command lines.
I apologize for hairy code, but this it direct consequence of command line
layout in memory and hacks to support things like "init [3]".
The loops are "unrolled" otherwise it is either macros which hide control
flow or functions with 7-8 arguments with equal line count.
There should be real setproctitle(2) or something.
[[email protected]: fix a billion min() warnings]
Signed-off-by: Alexey Dobriyan <[email protected]>
Tested-by: Jarod Wilson <[email protected]>
Acked-by: Jarod Wilson <[email protected]>
Cc: Cyrill Gorcunov <[email protected]>
Cc: Jan Stancek <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'fs/proc/array.c')
0 files changed, 0 insertions, 0 deletions