Re: [PATCH 1/4] move capable() to capability.h

From: Andrew Morton
Date: Sun Jan 08 2006 - 14:02:06 EST


Tim Schmielau <tim@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> On Sat, 7 Jan 2006, Randy.Dunlap wrote:
>
> ...
> > +#ifdef CONFIG_SECURITY
> > +/* code is in security.c */
> > +extern int capable(int cap);
> > +#else
> > +static inline int capable(int cap)
> > +{
> > + if (cap_raised(current->cap_effective, cap)) {
> > + current->flags |= PF_SUPERPRIV;
> > + return 1;
> > + }
> > + return 0;
> > +}
> > +#endif
>
> I wonder how this can actually work. For dereferencing current, it is not
> enough to include <asm/current.h>. The actual layout of struct task_struct
> needs to be known to the compiler, which is given in <linux/sched.h>.
>
> Maybe you were just lucky with your .config and every file using capable()
> just by chance also included <linux/sched.h>?
>
> (Chances are not bad since currently about every other .c file includes
> sched.h. However, I have patches pending to reduce this number to ~500..1000)
>
> Uninlining capable() might indeed help us here.
>

I mangled Randy's patch so it applies after uninline-capable.patch, so all
is OK.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/