Messages in this thread |  | | | Date | Tue, 13 Jul 2010 17:30:49 -0700 | | From | Kees Cook <> | | Subject | Re: [PATCH] Yama: turn process ancestry check into function |
| |
On Wed, Jul 14, 2010 at 09:19:09AM +0900, Tetsuo Handa wrote: > Kees Cook wrote: > > +static int task_is_descendant(struct task_struct *parent, > > + struct task_struct *child) > > +{ > > + int rc = 0; > > + struct task_struct *walker = child; > > + > > + if (!parent || !child) > > + return 0; > > parent (== current) is !NULL and > child (in original code) is !NULL. > You can remove this check unless you are planning to call > this function from other places.
I'd like the flexibility to call it with NULLs. But yes, at present, it never will be NULL.
> > + if (mode == PTRACE_MODE_ATTACH && > > + ptrace_scope && > > + !task_is_descendant(current, child) && > > + !capable(CAP_SYS_PTRACE)) > > + rc = -EPERM; > > I don't know how heavy capable(CAP_SYS_PTRACE) is. > But checking !capable(CAP_SYS_PTRACE) before > !task_is_descendant(current, child) might be lighter.
That's the order I had before, but in looking at some of the other code, it seemed like moving it to the end made more logical sense. Since checking PTRACE attach isn't a common or time-sensitive operation, I figured trying to tune it wasn't critical.
-Kees
-- Kees Cook Ubuntu Security Team
|  |