* [PATCH] Add prctl to modify current->comm
@ 2004-09-07 14:27 Andi Kleen
2004-09-07 17:12 ` Alan Cox
0 siblings, 1 reply; 3+ messages in thread
From: Andi Kleen @ 2004-09-07 14:27 UTC (permalink / raw)
To: akpm, linux-kernel; +Cc: bastian
This patch adds a prctl to modify current->comm as shown in /proc.
This feature was requested by KDE developers. In KDE most programs
are started by forking from a kdeinit program that already has the
libraries loaded and some other state.
Problem is to give these forked programs the proper name.
It already writes the command line in the environment (as seen in ps),
but top uses a different field in /proc/pid/status that reports
current->comm. And that was always "kdeinit" instead of the
real command name. So you ended up with lots of kdeinits
in your top listing, which was not very useful.
This patch adds a new prctl PR_SET_NAME to allow a program to change its
comm field.
I considered the potential security issues of a program obscuring
itself with this interface, but I don't think it matters much
because a program can already obscure itself when the admin uses
ps instead of top. In case of a KDE desktop calling everything
kdeinit is much more obfuscation than the alternative.
diff -u linux-2.6.8-5/kernel/sys.c-o linux-2.6.8-5/kernel/sys.c
--- linux-2.6.8-5/kernel/sys.c-o 2004-08-14 07:36:16.000000000 +0200
+++ linux-2.6.8-5/kernel/sys.c 2004-09-07 11:34:07.000000000 +0200
@@ -1660,6 +1660,13 @@
}
current->keep_capabilities = arg2;
break;
+ case PR_SET_NAME: {
+ struct task_struct *me = current;
+ me->comm[sizeof(me->comm)-1] = 0;
+ if (strncpy_from_user(me->comm, (char *)arg2, sizeof(me->comm)-1) < 0)
+ return -EFAULT;
+ return 0;
+ }
default:
error = -EINVAL;
break;
diff -u linux-2.6.8-5/include/linux/prctl.h-o linux-2.6.8-5/include/linux/prctl.h
--- linux-2.6.8-5/include/linux/prctl.h-o 2004-08-14 07:37:14.000000000 +0200
+++ linux-2.6.8-5/include/linux/prctl.h 2004-09-07 11:35:02.000000000 +0200
@@ -49,5 +49,6 @@
# define PR_TIMING_TIMESTAMP 1 /* Accurate timestamp based
process timing */
+#define PR_SET_NAME 15 /* Set process name. */
#endif /* _LINUX_PRCTL_H */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Add prctl to modify current->comm
2004-09-07 14:27 [PATCH] Add prctl to modify current->comm Andi Kleen
@ 2004-09-07 17:12 ` Alan Cox
2004-09-07 21:16 ` Andi Kleen
0 siblings, 1 reply; 3+ messages in thread
From: Alan Cox @ 2004-09-07 17:12 UTC (permalink / raw)
To: Andi Kleen; +Cc: akpm, Linux Kernel Mailing List, bastian
On Maw, 2004-09-07 at 15:27, Andi Kleen wrote:
> I considered the potential security issues of a program obscuring
> itself with this interface, but I don't think it matters much
> because a program can already obscure itself when the admin uses
> ps instead of top. In case of a KDE desktop calling everything
> kdeinit is much more obfuscation than the alternative.
Actually its a lot simpler than that. I long ago as a student wrong a
shell which simply did ln [binarytorun] banana; execve(.."banana", ...)
So I agree its not security related. You just need to fix the
implementation
> + case PR_SET_NAME: {
> + struct task_struct *me = current;
> + me->comm[sizeof(me->comm)-1] = 0;
> + if (strncpy_from_user(me->comm, (char *)arg2, sizeof(me->comm)-1) < 0)
> + return -EFAULT;
> + return 0;
> + }
If the strncpy_from_user faults the state of current->comm is undefined.
This strikes me as bad design.
Alan
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Add prctl to modify current->comm
2004-09-07 17:12 ` Alan Cox
@ 2004-09-07 21:16 ` Andi Kleen
0 siblings, 0 replies; 3+ messages in thread
From: Andi Kleen @ 2004-09-07 21:16 UTC (permalink / raw)
To: Alan Cox; +Cc: Andi Kleen, akpm, Linux Kernel Mailing List, bastian
On Tue, Sep 07, 2004 at 06:12:48PM +0100, Alan Cox wrote:
> > + case PR_SET_NAME: {
> > + struct task_struct *me = current;
> > + me->comm[sizeof(me->comm)-1] = 0;
> > + if (strncpy_from_user(me->comm, (char *)arg2, sizeof(me->comm)-1) < 0)
> > + return -EFAULT;
> > + return 0;
> > + }
>
> If the strncpy_from_user faults the state of current->comm is undefined.
I didn't see it as a big issue because the result will be 0 terminated
anyways.
> This strikes me as bad design.
Here's is a new patch with this fixed.
-Andi
--------------------------------------------------------------------
Allow a program to change its current->comm
Useful for KDE & kdeinit.
diff -u linux-2.6.8-5/kernel/sys.c-o linux-2.6.8-5/kernel/sys.c
--- linux-2.6.8-5/kernel/sys.c-o 2004-08-14 07:36:16.000000000 +0200
+++ linux-2.6.8-5/kernel/sys.c 2004-09-07 23:09:56.000000000 +0200
@@ -1660,6 +1660,15 @@
}
current->keep_capabilities = arg2;
break;
+ case PR_SET_NAME: {
+ struct task_struct *me = current;
+ unsigned char ncomm[sizeof(me->comm)];
+ ncomm[sizeof(me->comm)-1] = 0;
+ if (strncpy_from_user(ncomm, (char *)arg2, sizeof(me->comm)-1) < 0)
+ return -EFAULT;
+ memcpy(me->comm, ncomm, sizeof(me->comm));
+ return 0;
+ }
default:
error = -EINVAL;
break;
diff -u linux-2.6.8-5/include/linux/prctl.h-o linux-2.6.8-5/include/linux/prctl.h
--- linux-2.6.8-5/include/linux/prctl.h-o 2004-08-14 07:37:14.000000000 +0200
+++ linux-2.6.8-5/include/linux/prctl.h 2004-09-07 23:09:44.000000000 +0200
@@ -49,5 +49,6 @@
# define PR_TIMING_TIMESTAMP 1 /* Accurate timestamp based
process timing */
+#define PR_SET_NAME 15 /* Set process name. */
#endif /* _LINUX_PRCTL_H */
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-09-07 21:24 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-09-07 14:27 [PATCH] Add prctl to modify current->comm Andi Kleen
2004-09-07 17:12 ` Alan Cox
2004-09-07 21:16 ` Andi Kleen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome