On Thu, Jun 4, 2015 at 11:03 AM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > On 06/04, Kees Cook wrote: >> >> On Wed, Jun 3, 2015 at 3:09 PM, Tycho Andersen >> > @@ -556,6 +557,11 @@ static int ptrace_setoptions(struct task_struct *child, unsigned long data) >> > if (data & ~(unsigned long)PTRACE_O_MASK) >> > return -EINVAL; >> > >> > +#ifdef CONFIG_CHECKPOINT_RESTORE >> > + if (data & PTRACE_O_SUSPEND_SECCOMP && !may_suspend_seccomp()) >> > + return -EPERM; >> > +#endif >> >> I'd like to avoid seeing any #ifdefs added to the .c files. Using a >> static inline for may_suspend_seccomp() should cause this statement to >> be eliminated by the compiler. > > Agreed, me too, but see below. > >> > @@ -590,6 +590,11 @@ void secure_computing_strict(int this_syscall) >> > { >> > int mode = current->seccomp.mode; >> > >> > +#ifdef CONFIG_CHECKPOINT_RESTORE >> > + if (unlikely(current->ptrace & PT_SUSPEND_SECCOMP)) >> > + return; >> > +#endif >> >> Could PT_SUSPEND_SECCOMP be defined to "0" with not >> CONFIG_CHECKPOINT_RESTORE? Then this wouldn't need ifdefs, and should >> be similarly eliminated by the compiler. > > Yes, but this way we add another ugly ifdef into .h, and if you read > this code it is not clear that this check should be eliminated by gcc. > > I'd suggest > > if (config_enabled(CONFIG_CHECKPOINT_RESTORE) && > unlikely(current->ptrace & PT_SUSPEND_SECCOMP)) > return; Ah! Yes, that makes things nicer. -Kees -- Kees Cook Chrome OS Security -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html