Re: [PATCH] ptrace, seccomp: add support for retrieving seccomp flags

From: Tycho Andersen
Date: Tue Sep 19 2017 - 17:55:59 EST


On Tue, Sep 19, 2017 at 02:43:51PM -0700, Kees Cook wrote:
> On Tue, Sep 19, 2017 at 2:09 PM, Tycho Andersen <tycho@xxxxxxxxxx> wrote:
> > Hi Kees,
> >
> > On Tue, Sep 19, 2017 at 01:08:28PM -0700, Kees Cook wrote:
> >> On Tue, Sep 19, 2017 at 10:47 AM, Tycho Andersen <tycho@xxxxxxxxxx> wrote:
> >> > With the new SECCOMP_FILTER_FLAG_LOG, we need to be able to extract these
> >> > flags for checkpoint restore, since they describe the state of a filter.
> >> >
> >> > So, let's add PTRACE_SECCOMP_GET_FLAGS, similar to ..._GET_FILTER, which
> >> > returns the flags of the nth filter.
> >>
> >> Can you split this up into factoring out the nth helper, and then
> >> adding the new get?
> >>
> >> For naming, perhaps "GET_FILTER_FLAGS" instead of "GET_FLAGS" since
> >> there may be seccomp flags in the future, etc.
> >
> > Sure, I'll do both of these.
> >
> >> Is there any sane way to add the flags to the existing GET_FILTER?
> >
> > I looked at this, and I don't think so. Unfortunately, we didn't use
> > any structure for the output, it's just the raw bytes of the filter
> > with the length used as the return value. I suppose we could append
> > the flags after the bytes of the filter, but that seems... very ugly
> > :). Let me know if you want to go that route.
>
> I think if we can make the new GET_FILTER_stuff interface more
> extensible, we should cover any future needs for per-filter content.

Ok, are you interested in something more general than
GET_FILTER_FLAGS? Maybe GET_FILTER_METADATA with uapi struct like:

struct seccomp_metadata {
unsigned int flags;
};

which you call by something like,

struct seccomp_metadata mymeta;

size = ptrace(PTRACE_SECCOMP_GET_FILTER_METADATA, pid, sizeof(mymeta), &mymeta);
if (size < 0) {
/* error */
}
if (size != sizeof(mymeta)) {
/* struct seccomp_metadata sizes are different */
}

?

Tycho