lkml.org 
[lkml]   [2003]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH][2.4-rc1] fix side effects of the kmod/ptrace secfix
    On Fri, 25 Apr 2003, Andreas Gietl wrote:
    > > system monitoring stuff this way(I've even heard shutdown is affected)
    >
    > i can confirm that shutdown (halt|reboot) does not work on my 2.4.21-rc1-ac1
    > boxes. (gentoo + redhat).

    Thanks for the info!

    > But your patch does not seem to fix it.

    Very interesting also, the two liner adressed only the well-known problems.
    To fix the other not so well-known side effects, a real cleanup is the way
    to go.

    Can you try the attached cleanup patch instead of the two-liner?

    It's an inital cleanup and should fix the other side effects which
    I described in my mails.

    Bernhard Kaindl

    PS: If either patch is applied correctly, this

    su guest -c 'ps $PPID;wc -m </proc/$PPID/cmdline'

    should give:

    PID TTY STAT TIME COMMAND
    2452 pts/2 S 0:00 su bin -c ps $PPID;wc -m </proc/$PPID/cmdline
    46

    If it does not, access_process_vm is not fixed properly.

    Second, calling this as root:

    strace -fewrite su -c /bin/echo 2>&1 | grep pid

    should give:

    [pid 2599] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
    [pid 2599] write(1, "\n", 1

    If it does not, ptrace_check_attach is not fixed properly.

    (These are only the checks for the well known side
    effects which should be fixed even with the short
    is_dumpable() -> task_dumpable patch.)--- kernel/ptrace.c 2003/04/22 21:14:20 1.1
    +++ kernel/ptrace.c 2003/04/25 06:21:16 1.3
    @@ -21,9 +21,6 @@
    */
    int ptrace_check_attach(struct task_struct *child, int kill)
    {
    - mb();
    - if (!is_dumpable(child))
    - return -EPERM;

    if (!(child->ptrace & PT_PTRACED))
    return -ESRCH;
    @@ -127,8 +124,6 @@ int access_process_vm(struct task_struct
    /* Worry about races with exit() */
    task_lock(tsk);
    mm = tsk->mm;
    - if (!is_dumpable(tsk) || (&init_mm == mm))
    - mm = NULL;
    if (mm)
    atomic_inc(&mm->mm_users);
    task_unlock(tsk);
    --- kernel/sys.c 2003/04/25 06:23:15 1.1
    +++ kernel/sys.c 2003/04/25 06:23:51
    @@ -1252,8 +1252,7 @@ asmlinkage long sys_prctl(int option, un
    error = -EINVAL;
    break;
    }
    - if (is_dumpable(current))
    - current->mm->dumpable = arg2;
    + current->mm->dumpable = arg2;
    break;

    case PR_SET_UNALIGN:
    \
     
     \ /
      Last update: 2005-03-22 13:35    [W:0.028 / U:29.636 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site