All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Ferber <aferber@techfak.uni-bielefeld.de>
To: Danek Duvall <duvall@emufarm.org>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>,
	linux-kernel@vger.kernel.org
Subject: Re: root-owned /proc/pid files for threaded apps?
Date: Fri, 8 Mar 2002 19:59:39 +0100	[thread overview]
Message-ID: <20020308195939.A6295@devcon.net> (raw)
In-Reply-To: <20020307060110.GA303@lorien.emufarm.org> <E16iyBW-0002HP-00@the-village.bc.nu> <20020308100632.GA192@lorien.emufarm.org>
In-Reply-To: <20020308100632.GA192@lorien.emufarm.org>; from duvall@emufarm.org on Fri, Mar 08, 2002 at 02:06:32AM -0800

On Fri, Mar 08, 2002 at 02:06:32AM -0800, Danek Duvall wrote:
> 
> > > I just upgraded from 2.4.8-pre3-ac2 to 2.4.19-pre2-ac2, and found that
> > > for threaded programs like mozilla and xmms, files in /proc/<pid> are
> > > owned by root, even if the process belongs to another user.  I
> > > particularly wanted to be able to read /proc/<pid>/environ, but I can't.
> Ok, I found the responsible hunk, though I haven't any idea why it would
> make a difference:
> 
> 	diff -durp linux-2.4.18-pre7-ac2/kernel/kmod.c linux-2.4.18-pre7-ac3/kernel/kmod.c
> 	--- linux-2.4.18-pre7-ac2/kernel/kmod.c Tue Jul 17 18:23:50 2001
> 	+++ linux-2.4.18-pre7-ac3/kernel/kmod.c Thu Mar  7 23:05:34 2002
> 	@@ -111,15 +111,8 @@ int exec_usermodehelper(char *program_pa
> 			if (curtask->files->fd[i]) close(i);
> 		}
> 
> 	-       /* Drop the "current user" thing */
> 	-       {
> 	-               struct user_struct *user = curtask->user;
> 	-               curtask->user = INIT_USER;
> 	-               atomic_inc(&INIT_USER->__count);
> 	-               atomic_inc(&INIT_USER->processes);
> 	-               atomic_dec(&user->processes);
> 	-               free_uid(user);
> 	-       }
> 	+       /* Become root */
> 	+       set_user(0, 1);
> 
> 		/* Give kmod all effective privileges.. */
> 		curtask->euid = curtask->fsuid = 0;

The problem arises when a threaded process calls request_module().
request_module() calls kernel_thread(), which does a clone(CLONE_VM).
The created kernel thread in turn executes exec_usermodehelper, this
calls set_user() with dumpclear=1, which leads to set_user() marking
the current task as not dumpable.

The problem is, that current->mm of the kernel thread is shared (from
the clone(CLONE_VM)) with the task doing the request_module() (and in
turn with all other threads of the process). As the dumpable flag
happens to be a property of the tasks mm, set_user also marks the
process (and all threads) as not dumpable.

Then see the following piece of code in proc_pid_make_inode()
(fs/proc/base.c):

        inode->i_uid = 0;
        inode->i_gid = 0;
        if (ino == PROC_PID_INO || task_dumpable(task)) {
                inode->i_uid = task->euid;
                inode->i_gid = task->egid;
        }

set_user() just marked the tasks mm as not dumpable, so the files in
/proc/<pid> (where ino != PROC_PID_INO) get UID 0.

BTW, the problem should also occur with _every_ process running into a
request_module().

Danek, can you please try changing the second argument to set_user()
into 0, ie.

        /* Become root */
        set_user(0, 0);

Apart from not setting current as not dumpable (which wasn't done by
the old code anyway), this should not change anything.

Andreas
-- 
       Andreas Ferber - dev/consulting GmbH - Bielefeld, FRG
     ---------------------------------------------------------
         +49 521 1365800 - af@devcon.net - www.devcon.net

  parent reply	other threads:[~2002-03-08 19:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-03-07  6:01 root-owned /proc/pid files for threaded apps? Danek Duvall
2002-03-07  7:43 ` Danek Duvall
2002-03-07 13:43 ` Alan Cox
2002-03-08 10:06   ` Danek Duvall
2002-03-08 13:33     ` Alan Cox
2002-03-08 18:59     ` Andreas Ferber [this message]
2002-03-08 20:31       ` Danek Duvall
2002-03-08 21:29         ` Andreas Ferber
2002-03-08 21:41           ` Danek Duvall
2002-03-08 22:30             ` Andreas Ferber
2002-03-09  3:09               ` Danek Duvall
2002-03-10 20:37                 ` Andreas Ferber
2002-03-08 21:47           ` J Sloan
2002-03-08 21:59             ` Danek Duvall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020308195939.A6295@devcon.net \
    --to=aferber@techfak.uni-bielefeld.de \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=duvall@emufarm.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.