lkml.org 
[lkml]   [2004]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: setproctitle
On Wed, Aug 18, 2004 at 10:28:51AM +0200, DervishD wrote:
> Is there any special reason not to implement setproctitle in the
> kernel? In user space is a bit difficult to implement since 'argv[0]'
> cannot grow beyond the initially allocated space, better said, it can
> grow but only changing the pointer to another place or eating the
> space occupied by the other arguments.
> proftpd has a not-very-polite set_proc_title that misses the
> final NULL, and a couple of other programs out there uses it, too.
> Applications should be free to change theirs proc titles to some
> pretty if they want, shouldn't they?
> In proc/base.c you can read about 'setproctitle(3)', that is, in
> library space (user space), not kernel space, but AFAIK only FreeBSD
> has setproctitle :?

Observe the following, from fs/proc/base.c:

static int proc_pid_cmdline(struct task_struct *task, char * buffer)
{
int res = 0;
unsigned int len;
struct mm_struct *mm = get_task_mm(task);
if (!mm)
goto out;
if (!mm->arg_end)
goto out; /* Shh! No looking before we're done */

len = mm->arg_end - mm->arg_start;

if (len > PAGE_SIZE)
len = PAGE_SIZE;

res = access_process_vm(task, mm->arg_start, buffer, len, 0);

// If the nul at the end of args has been overwritten, then
// assume application is using setproctitle(3).
if (res > 0 && buffer[res-1] != '\0') {
len = strnlen(buffer, res);
if (len < res) {
res = len;
} else {
len = mm->env_end - mm->env_start;
if (len > PAGE_SIZE - res)
len = PAGE_SIZE - res;
res += access_process_vm(task, mm->env_start, buffer+res, len, 0);
res = strnlen(buffer, res);
}
}
mmput(mm);

out:
return res;
}

The command-line arguments are being fetched from the process address
space, i.e. simply editing argv[] in userspace will have the desired
effect. Though this code is butt ugly.


-- wli
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:05    [W:0.117 / U:0.636 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site