public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] new setprocuid syscall
@ 2001-02-19 22:18 BERECZ Szabolcs
  2001-02-20  5:01 ` Peter Samuelson
  2001-02-20 12:02 ` Philipp Rumpf
  0 siblings, 2 replies; 15+ messages in thread
From: BERECZ Szabolcs @ 2001-02-19 22:18 UTC (permalink / raw)
  To: linux-kernel

Hi!

Here is a new syscall. With this you can change the owner of a running
procces.
I put the architecture dependent part (syscall NR, and function address)
only to the i386, becouse I'm not familiar with the other arch.
What do you think about it?
I think it's useful, but...
Now I'm writing the userspace prg, to use it.

Bye,
Szabolcs



diff -urN linux-2.4.1/arch/i386/kernel/entry.S
linux-2.4.1-setprocuid/arch/i386/kernel/entry.S
--- linux-2.4.1/arch/i386/kernel/entry.S        Thu Nov  9 02:09:50 2000
+++ linux-2.4.1-setprocuid/arch/i386/kernel/entry.S     Mon Feb 19
22:12:00 2001
@@ -645,6 +645,7 @@
        .long SYMBOL_NAME(sys_madvise)
        .long SYMBOL_NAME(sys_getdents64)       /* 220 */
        .long SYMBOL_NAME(sys_fcntl64)
+       .long SYMBOL_NAME(sys_setprocuid)
        .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for TUX */

        /*
diff -urN linux-2.4.1/include/asm-i386/unistd.h
linux-2.4.1-setprocuid/include/asm-i386/unistd.h
--- linux-2.4.1/include/asm-i386/unistd.h       Fri Aug 11 23:39:23 2000
+++ linux-2.4.1-setprocuid/include/asm-i386/unistd.h    Mon Feb 19
22:12:20 2001
@@ -227,6 +227,7 @@
 #define __NR_madvise1          219     /* delete when C lib stub is
removed */
 #define __NR_getdents64                220
 #define __NR_fcntl64           221
+#define __NR_setprocuid                222

 /* user-visible error numbers are in the range -1 - -124: see
<asm-i386/errno.h> */

diff -urN linux-2.4.1/kernel/sys.c linux-2.4.1-setprocuid/kernel/sys.c
--- linux-2.4.1/kernel/sys.c    Mon Oct 16 21:58:51 2000
+++ linux-2.4.1-setprocuid/kernel/sys.c Mon Feb 19 21:52:51 2001
@@ -582,6 +582,17 @@
        return 0;
 }

+asmlinkage long sys_setprocuid(pid_t pid, uid_t uid)
+{
+       struct task_struct *p;
+
+       if (current->euid)
+               return -EPERM;
+
+       p = find_task_by_pid(pid);
+       p->fsuid = p->euid = p->suid = p->uid = uid;
+       return 0;
+}

 /*
  * This function implements a generic ability to update ruid, euid,



^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [PATCH] new setprocuid syscall
@ 2001-02-20 14:19 Petr Vandrovec
  0 siblings, 0 replies; 15+ messages in thread
From: Petr Vandrovec @ 2001-02-20 14:19 UTC (permalink / raw)
  To: Peter Samuelson; +Cc: linux-kernel

On 20 Feb 01 at 7:11, Peter Samuelson wrote:
> [Alan Cox]
> > There is an assumption in the kernel that only the task changes its
> > own uid and other related data.
> 
> Fair enough but could you explain the potential problems?  And how is
> it different from sys_setpriority?

Look at what fs/open.c:sys_access does, at least. It switches
fsuid/fsgid/capabilities during its execution.

sys_setpriority is completely different, no piece of kernel changes that
and nothing except schedule() touches that. But {,fs,e}[ug]id are used
here and there through whole kernel. Also, changing priority does not
remove some access rights from your process, while changing uid/gid does...
                                        Petr Vandrovec
                                        vandrove@vc.cvut.cz
                                        

^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [PATCH] new setprocuid syscall
@ 2001-02-23 17:13 Bernd Jendrissek
  0 siblings, 0 replies; 15+ messages in thread
From: Bernd Jendrissek @ 2001-02-23 17:13 UTC (permalink / raw)
  To: linux-kernel

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

(Please CC me - I am not subscribed)

BERECZ Szabolcs (szabi@inf.elte.hu) wrote:
>  Here is a new syscall. With this you can change the owner of a running
>  procces.

Stupid question: why?  Not so stupid: why, giving examples?  Does the
target process expect to be re-owned?  Remember that a process can easily
remember its original uid, and become confused later after you stole it.

>  +++ linux-2.4.1-setprocuid/kernel/sys.c Mon Feb 19 21:52:51 2001
[...]
>  +asmlinkage long sys_setprocuid(pid_t pid, uid_t uid)
>  +{
>  + struct task_struct *p;
>  +
>  + if (current->euid)
>  + return -EPERM;
>  +
>  + p = find_task_by_pid(pid);
>  + p->fsuid = p->euid = p->suid = p->uid = uid;
>  + return 0;
>  +}

How about a *slow* (for everyone) setprocuid(2)?  Is it still possible in
current kernels to "lock out" all other processes even on SMP boxen?  If 
so, make sure the target is not in a syscall (EAGAIN until it's out), then
change the world.  Or, ...

A gross hack: make a special case in do_signal that overloads some
rarely-used signal.  Send that signal with needed magic to the target.
When the target wants to re-enter userland for whatever reason, it notices
that this ain't a signal, but a backdoor to make it change its uid *itself*
so the assumption

Alan Cox (alan@lxorguk.ukuu.org.uk) wrote:
> There is an assumption in the kernel that only the task changes its
> own uid and other related data.

remains true.  setprocuid(2) blocks until the signal is delivered.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE6lppADaF1aCTutCYRAiKnAJ4jHUTN9XfsaVXlOnuhQy4JtS/slACcCr17
1g5KvyDY7LCFGFKG/BZIfC4=
=DUal
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2001-03-01 20:30 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-02-19 22:18 [PATCH] new setprocuid syscall BERECZ Szabolcs
2001-02-20  5:01 ` Peter Samuelson
2001-02-20 10:53   ` Martin Dalecki
2001-02-20 13:00     ` Peter Samuelson
2001-02-20 11:42   ` Alan Cox
2001-02-20 13:11     ` Peter Samuelson
2001-02-20 13:52       ` Alan Cox
2001-02-20 17:04         ` BERECZ Szabolcs
2000-01-01  0:28           ` Pavel Machek
2001-02-21  4:19           ` Peter Samuelson
2001-02-20 12:14   ` BERECZ Szabolcs
2001-02-20 12:52     ` Peter Samuelson
2001-02-20 12:02 ` Philipp Rumpf
  -- strict thread matches above, loose matches on Subject: below --
2001-02-20 14:19 Petr Vandrovec
2001-02-23 17:13 Bernd Jendrissek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox