All of lore.kernel.org
 help / color / mirror / Atom feed
* av_decision on audit callback
@ 2015-10-02 18:48 Roberts, William C
  2015-10-02 18:54 ` Stephen Smalley
  0 siblings, 1 reply; 8+ messages in thread
From: Roberts, William C @ 2015-10-02 18:48 UTC (permalink / raw)
  To: seandroid-list, selinux; +Cc: Stephen Smalley, Daniel Cashman

[-- Attachment #1: Type: text/plain, Size: 1058 bytes --]

I would like to be able to gather the result of permissive mode per domain from a check_access() call for the userspace object managers on Android.

>From what I can tell check_access() calls avc_has_perm with a NULL 5th argument. That argument is for the struct avc_entry_ref.

That structure has a pointer to an opaque type, avc_entry. Which contains struct av_decision.

Which contains flags that have a permissive flag:

struct av_decision {
        access_vector_t allowed;
        access_vector_t decided;
        access_vector_t auditallow;
        access_vector_t auditdeny;
        unsigned int seqno;
        unsigned int flags;
};

/* Definitions of av_decision.flags */
#define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001

It looks like if check_access just passes this structure and then avc_has_perm() when it calls avc_audit, it could supply the av_decision structure to the avc_suppl_audit() call. We could then have an audit2 callback that takes this parameter.

Is this mostly right, seem sane? Better way to do this?



[-- Attachment #2: Type: text/html, Size: 5858 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: av_decision on audit callback
  2015-10-02 18:48 av_decision on audit callback Roberts, William C
@ 2015-10-02 18:54 ` Stephen Smalley
  2015-10-02 19:12   ` Stephen Smalley
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Smalley @ 2015-10-02 18:54 UTC (permalink / raw)
  To: Roberts, William C, seandroid-list, selinux

On 10/02/2015 02:48 PM, Roberts, William C wrote:
> I would like to be able to gather the result of permissive mode per
> domain from a check_access() call for the userspace object managers on
> Android.
>
>  From what I can tell check_access() calls avc_has_perm with a NULL 5th
> argument. That argument is for the struct avc_entry_ref.
>
> That structure has a pointer to an opaque type, avc_entry. Which
> contains struct av_decision.
>
> Which contains flags that have a permissive flag:
>
> struct av_decision {
>
>          access_vector_t allowed;
>
>          access_vector_t decided;
>
>          access_vector_t auditallow;
>
>          access_vector_t auditdeny;
>
>          unsigned int seqno;
>
>          unsigned int flags;
>
> };
>
> /* Definitions of av_decision.flags */
>
> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
>
> It looks like if check_access just passes this structure and then
> avc_has_perm() when it calls avc_audit, it could supply the av_decision
> structure to the avc_suppl_audit() call. We could then have an audit2
> callback that takes this parameter.
>
> Is this mostly right, seem sane? Better way to do this?

It doesn't need to be exposed at that level; the libselinux avc_audit() 
routine can log it, similar to what is done in the kernel.  It already 
has the av_decision structure available to it.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: av_decision on audit callback
  2015-10-02 18:54 ` Stephen Smalley
@ 2015-10-02 19:12   ` Stephen Smalley
  2015-10-02 20:07     ` Roberts, William C
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Smalley @ 2015-10-02 19:12 UTC (permalink / raw)
  To: Roberts, William C, seandroid-list, selinux

On 10/02/2015 02:54 PM, Stephen Smalley wrote:
> On 10/02/2015 02:48 PM, Roberts, William C wrote:
>> I would like to be able to gather the result of permissive mode per
>> domain from a check_access() call for the userspace object managers on
>> Android.
>>
>>  From what I can tell check_access() calls avc_has_perm with a NULL 5th
>> argument. That argument is for the struct avc_entry_ref.
>>
>> That structure has a pointer to an opaque type, avc_entry. Which
>> contains struct av_decision.
>>
>> Which contains flags that have a permissive flag:
>>
>> struct av_decision {
>>
>>          access_vector_t allowed;
>>
>>          access_vector_t decided;
>>
>>          access_vector_t auditallow;
>>
>>          access_vector_t auditdeny;
>>
>>          unsigned int seqno;
>>
>>          unsigned int flags;
>>
>> };
>>
>> /* Definitions of av_decision.flags */
>>
>> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
>>
>> It looks like if check_access just passes this structure and then
>> avc_has_perm() when it calls avc_audit, it could supply the av_decision
>> structure to the avc_suppl_audit() call. We could then have an audit2
>> callback that takes this parameter.
>>
>> Is this mostly right, seem sane? Better way to do this?
>
> It doesn't need to be exposed at that level; the libselinux avc_audit()
> routine can log it, similar to what is done in the kernel.  It already
> has the av_decision structure available to it.

To clarify, anything directly known to the AVC, like the permissive 
flag, can be directly logged by it.  The audit callback is for logging 
auxiliary audit information not known to the AVC (the pid of the client 
process being a good example).

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: av_decision on audit callback
  2015-10-02 19:12   ` Stephen Smalley
@ 2015-10-02 20:07     ` Roberts, William C
  2015-10-02 20:13       ` Stephen Smalley
  0 siblings, 1 reply; 8+ messages in thread
From: Roberts, William C @ 2015-10-02 20:07 UTC (permalink / raw)
  To: Stephen Smalley, seandroid-list, selinux



> -----Original Message-----
> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
> Sent: Friday, October 2, 2015 12:12 PM
> To: Roberts, William C; seandroid-list@tycho.nsa.gov; selinux@tycho.nsa.gov
> Subject: Re: av_decision on audit callback
> 
> On 10/02/2015 02:54 PM, Stephen Smalley wrote:
> > On 10/02/2015 02:48 PM, Roberts, William C wrote:
> >> I would like to be able to gather the result of permissive mode per
> >> domain from a check_access() call for the userspace object managers
> >> on Android.
> >>
> >>  From what I can tell check_access() calls avc_has_perm with a NULL
> >> 5th argument. That argument is for the struct avc_entry_ref.
> >>
> >> That structure has a pointer to an opaque type, avc_entry. Which
> >> contains struct av_decision.
> >>
> >> Which contains flags that have a permissive flag:
> >>
> >> struct av_decision {
> >>
> >>          access_vector_t allowed;
> >>
> >>          access_vector_t decided;
> >>
> >>          access_vector_t auditallow;
> >>
> >>          access_vector_t auditdeny;
> >>
> >>          unsigned int seqno;
> >>
> >>          unsigned int flags;
> >>
> >> };
> >>
> >> /* Definitions of av_decision.flags */
> >>
> >> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
> >>
> >> It looks like if check_access just passes this structure and then
> >> avc_has_perm() when it calls avc_audit, it could supply the
> >> av_decision structure to the avc_suppl_audit() call. We could then
> >> have an audit2 callback that takes this parameter.
> >>
> >> Is this mostly right, seem sane? Better way to do this?
> >
> > It doesn't need to be exposed at that level; the libselinux
> > avc_audit() routine can log it, similar to what is done in the kernel.
> > It already has the av_decision structure available to it.
> 
> To clarify, anything directly known to the AVC, like the permissive flag, can be
> directly logged by it.  The audit callback is for logging auxiliary audit information
> not known to the AVC (the pid of the client process being a good example).

I was wondering if we could just dump permissive=0|1 from the AVC logging routine, but that
would affect everyone.  I guess then you would be ok with that? Does order matter with
the fields wrt parsing? I don't want to break any desktop tooling I am aware of, would we upstream
this change as well?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: av_decision on audit callback
  2015-10-02 20:07     ` Roberts, William C
@ 2015-10-02 20:13       ` Stephen Smalley
  2015-10-02 20:22         ` Roberts, William C
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Smalley @ 2015-10-02 20:13 UTC (permalink / raw)
  To: Roberts, William C, seandroid-list, selinux

On 10/02/2015 04:07 PM, Roberts, William C wrote:
>
>
>> -----Original Message-----
>> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
>> Sent: Friday, October 2, 2015 12:12 PM
>> To: Roberts, William C; seandroid-list@tycho.nsa.gov; selinux@tycho.nsa.gov
>> Subject: Re: av_decision on audit callback
>>
>> On 10/02/2015 02:54 PM, Stephen Smalley wrote:
>>> On 10/02/2015 02:48 PM, Roberts, William C wrote:
>>>> I would like to be able to gather the result of permissive mode per
>>>> domain from a check_access() call for the userspace object managers
>>>> on Android.
>>>>
>>>>   From what I can tell check_access() calls avc_has_perm with a NULL
>>>> 5th argument. That argument is for the struct avc_entry_ref.
>>>>
>>>> That structure has a pointer to an opaque type, avc_entry. Which
>>>> contains struct av_decision.
>>>>
>>>> Which contains flags that have a permissive flag:
>>>>
>>>> struct av_decision {
>>>>
>>>>           access_vector_t allowed;
>>>>
>>>>           access_vector_t decided;
>>>>
>>>>           access_vector_t auditallow;
>>>>
>>>>           access_vector_t auditdeny;
>>>>
>>>>           unsigned int seqno;
>>>>
>>>>           unsigned int flags;
>>>>
>>>> };
>>>>
>>>> /* Definitions of av_decision.flags */
>>>>
>>>> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
>>>>
>>>> It looks like if check_access just passes this structure and then
>>>> avc_has_perm() when it calls avc_audit, it could supply the
>>>> av_decision structure to the avc_suppl_audit() call. We could then
>>>> have an audit2 callback that takes this parameter.
>>>>
>>>> Is this mostly right, seem sane? Better way to do this?
>>>
>>> It doesn't need to be exposed at that level; the libselinux
>>> avc_audit() routine can log it, similar to what is done in the kernel.
>>> It already has the av_decision structure available to it.
>>
>> To clarify, anything directly known to the AVC, like the permissive flag, can be
>> directly logged by it.  The audit callback is for logging auxiliary audit information
>> not known to the AVC (the pid of the client process being a good example).
>
> I was wondering if we could just dump permissive=0|1 from the AVC logging routine, but that
> would affect everyone.  I guess then you would be ok with that? Does order matter with
> the fields wrt parsing? I don't want to break any desktop tooling I am aware of, would we upstream
> this change as well?

Just put it at the end (i.e. log_append() after the avc_dump_query() 
call), like we do in the kernel.  Shouldn't be a problem.  Technically 
order shouldn't matter but safer to just append it to the current fields.

Yes, we'd upstream it.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: av_decision on audit callback
  2015-10-02 20:13       ` Stephen Smalley
@ 2015-10-02 20:22         ` Roberts, William C
  2015-10-02 20:26           ` Stephen Smalley
  0 siblings, 1 reply; 8+ messages in thread
From: Roberts, William C @ 2015-10-02 20:22 UTC (permalink / raw)
  To: Stephen Smalley, seandroid-list, selinux



> -----Original Message-----
> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
> Sent: Friday, October 2, 2015 1:13 PM
> To: Roberts, William C; seandroid-list@tycho.nsa.gov; selinux@tycho.nsa.gov
> Subject: Re: av_decision on audit callback
> 
> On 10/02/2015 04:07 PM, Roberts, William C wrote:
> >
> >
> >> -----Original Message-----
> >> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
> >> Sent: Friday, October 2, 2015 12:12 PM
> >> To: Roberts, William C; seandroid-list@tycho.nsa.gov;
> >> selinux@tycho.nsa.gov
> >> Subject: Re: av_decision on audit callback
> >>
> >> On 10/02/2015 02:54 PM, Stephen Smalley wrote:
> >>> On 10/02/2015 02:48 PM, Roberts, William C wrote:
> >>>> I would like to be able to gather the result of permissive mode per
> >>>> domain from a check_access() call for the userspace object managers
> >>>> on Android.
> >>>>
> >>>>   From what I can tell check_access() calls avc_has_perm with a
> >>>> NULL 5th argument. That argument is for the struct avc_entry_ref.
> >>>>
> >>>> That structure has a pointer to an opaque type, avc_entry. Which
> >>>> contains struct av_decision.
> >>>>
> >>>> Which contains flags that have a permissive flag:
> >>>>
> >>>> struct av_decision {
> >>>>
> >>>>           access_vector_t allowed;
> >>>>
> >>>>           access_vector_t decided;
> >>>>
> >>>>           access_vector_t auditallow;
> >>>>
> >>>>           access_vector_t auditdeny;
> >>>>
> >>>>           unsigned int seqno;
> >>>>
> >>>>           unsigned int flags;
> >>>>
> >>>> };
> >>>>
> >>>> /* Definitions of av_decision.flags */
> >>>>
> >>>> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
> >>>>
> >>>> It looks like if check_access just passes this structure and then
> >>>> avc_has_perm() when it calls avc_audit, it could supply the
> >>>> av_decision structure to the avc_suppl_audit() call. We could then
> >>>> have an audit2 callback that takes this parameter.
> >>>>
> >>>> Is this mostly right, seem sane? Better way to do this?
> >>>
> >>> It doesn't need to be exposed at that level; the libselinux
> >>> avc_audit() routine can log it, similar to what is done in the kernel.
> >>> It already has the av_decision structure available to it.
> >>
> >> To clarify, anything directly known to the AVC, like the permissive
> >> flag, can be directly logged by it.  The audit callback is for
> >> logging auxiliary audit information not known to the AVC (the pid of the client
> process being a good example).
> >
> > I was wondering if we could just dump permissive=0|1 from the AVC
> > logging routine, but that would affect everyone.  I guess then you
> > would be ok with that? Does order matter with the fields wrt parsing?
> > I don't want to break any desktop tooling I am aware of, would we upstream
> this change as well?
> 
> Just put it at the end (i.e. log_append() after the avc_dump_query() call), like we
> do in the kernel.  Shouldn't be a problem.  Technically order shouldn't matter but
> safer to just append it to the current fields.
> 
> Yes, we'd upstream it.
> 
Done. Ill post back with a patch on android-review. And once merged there I can send one to the
Mailing list or you can cherry-pick. Are you ok with that?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: av_decision on audit callback
  2015-10-02 20:22         ` Roberts, William C
@ 2015-10-02 20:26           ` Stephen Smalley
  2015-10-02 20:29             ` Roberts, William C
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Smalley @ 2015-10-02 20:26 UTC (permalink / raw)
  To: Roberts, William C, seandroid-list, selinux

On 10/02/2015 04:22 PM, Roberts, William C wrote:
>
>
>> -----Original Message-----
>> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
>> Sent: Friday, October 2, 2015 1:13 PM
>> To: Roberts, William C; seandroid-list@tycho.nsa.gov; selinux@tycho.nsa.gov
>> Subject: Re: av_decision on audit callback
>>
>> On 10/02/2015 04:07 PM, Roberts, William C wrote:
>>>
>>>
>>>> -----Original Message-----
>>>> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
>>>> Sent: Friday, October 2, 2015 12:12 PM
>>>> To: Roberts, William C; seandroid-list@tycho.nsa.gov;
>>>> selinux@tycho.nsa.gov
>>>> Subject: Re: av_decision on audit callback
>>>>
>>>> On 10/02/2015 02:54 PM, Stephen Smalley wrote:
>>>>> On 10/02/2015 02:48 PM, Roberts, William C wrote:
>>>>>> I would like to be able to gather the result of permissive mode per
>>>>>> domain from a check_access() call for the userspace object managers
>>>>>> on Android.
>>>>>>
>>>>>>    From what I can tell check_access() calls avc_has_perm with a
>>>>>> NULL 5th argument. That argument is for the struct avc_entry_ref.
>>>>>>
>>>>>> That structure has a pointer to an opaque type, avc_entry. Which
>>>>>> contains struct av_decision.
>>>>>>
>>>>>> Which contains flags that have a permissive flag:
>>>>>>
>>>>>> struct av_decision {
>>>>>>
>>>>>>            access_vector_t allowed;
>>>>>>
>>>>>>            access_vector_t decided;
>>>>>>
>>>>>>            access_vector_t auditallow;
>>>>>>
>>>>>>            access_vector_t auditdeny;
>>>>>>
>>>>>>            unsigned int seqno;
>>>>>>
>>>>>>            unsigned int flags;
>>>>>>
>>>>>> };
>>>>>>
>>>>>> /* Definitions of av_decision.flags */
>>>>>>
>>>>>> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
>>>>>>
>>>>>> It looks like if check_access just passes this structure and then
>>>>>> avc_has_perm() when it calls avc_audit, it could supply the
>>>>>> av_decision structure to the avc_suppl_audit() call. We could then
>>>>>> have an audit2 callback that takes this parameter.
>>>>>>
>>>>>> Is this mostly right, seem sane? Better way to do this?
>>>>>
>>>>> It doesn't need to be exposed at that level; the libselinux
>>>>> avc_audit() routine can log it, similar to what is done in the kernel.
>>>>> It already has the av_decision structure available to it.
>>>>
>>>> To clarify, anything directly known to the AVC, like the permissive
>>>> flag, can be directly logged by it.  The audit callback is for
>>>> logging auxiliary audit information not known to the AVC (the pid of the client
>> process being a good example).
>>>
>>> I was wondering if we could just dump permissive=0|1 from the AVC
>>> logging routine, but that would affect everyone.  I guess then you
>>> would be ok with that? Does order matter with the fields wrt parsing?
>>> I don't want to break any desktop tooling I am aware of, would we upstream
>> this change as well?
>>
>> Just put it at the end (i.e. log_append() after the avc_dump_query() call), like we
>> do in the kernel.  Shouldn't be a problem.  Technically order shouldn't matter but
>> safer to just append it to the current fields.
>>
>> Yes, we'd upstream it.
>>
> Done. Ill post back with a patch on android-review. And once merged there I can send one to the
> Mailing list or you can cherry-pick. Are you ok with that?

Yes.  As with the kernel, only add permissive= to avc: denied messages, 
not avc: granted ones.  See the kernel logic (but note that the code and 
data structures aren't the same as the libselinux AVC anymore).

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: av_decision on audit callback
  2015-10-02 20:26           ` Stephen Smalley
@ 2015-10-02 20:29             ` Roberts, William C
  0 siblings, 0 replies; 8+ messages in thread
From: Roberts, William C @ 2015-10-02 20:29 UTC (permalink / raw)
  To: Stephen Smalley, seandroid-list, selinux



> -----Original Message-----
> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
> Sent: Friday, October 2, 2015 1:26 PM
> To: Roberts, William C; seandroid-list@tycho.nsa.gov; selinux@tycho.nsa.gov
> Subject: Re: av_decision on audit callback
> 
> On 10/02/2015 04:22 PM, Roberts, William C wrote:
> >
> >
> >> -----Original Message-----
> >> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
> >> Sent: Friday, October 2, 2015 1:13 PM
> >> To: Roberts, William C; seandroid-list@tycho.nsa.gov;
> >> selinux@tycho.nsa.gov
> >> Subject: Re: av_decision on audit callback
> >>
> >> On 10/02/2015 04:07 PM, Roberts, William C wrote:
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: Stephen Smalley [mailto:sds@tycho.nsa.gov]
> >>>> Sent: Friday, October 2, 2015 12:12 PM
> >>>> To: Roberts, William C; seandroid-list@tycho.nsa.gov;
> >>>> selinux@tycho.nsa.gov
> >>>> Subject: Re: av_decision on audit callback
> >>>>
> >>>> On 10/02/2015 02:54 PM, Stephen Smalley wrote:
> >>>>> On 10/02/2015 02:48 PM, Roberts, William C wrote:
> >>>>>> I would like to be able to gather the result of permissive mode
> >>>>>> per domain from a check_access() call for the userspace object
> >>>>>> managers on Android.
> >>>>>>
> >>>>>>    From what I can tell check_access() calls avc_has_perm with a
> >>>>>> NULL 5th argument. That argument is for the struct avc_entry_ref.
> >>>>>>
> >>>>>> That structure has a pointer to an opaque type, avc_entry. Which
> >>>>>> contains struct av_decision.
> >>>>>>
> >>>>>> Which contains flags that have a permissive flag:
> >>>>>>
> >>>>>> struct av_decision {
> >>>>>>
> >>>>>>            access_vector_t allowed;
> >>>>>>
> >>>>>>            access_vector_t decided;
> >>>>>>
> >>>>>>            access_vector_t auditallow;
> >>>>>>
> >>>>>>            access_vector_t auditdeny;
> >>>>>>
> >>>>>>            unsigned int seqno;
> >>>>>>
> >>>>>>            unsigned int flags;
> >>>>>>
> >>>>>> };
> >>>>>>
> >>>>>> /* Definitions of av_decision.flags */
> >>>>>>
> >>>>>> #define SELINUX_AVD_FLAGS_PERMISSIVE    0x0001
> >>>>>>
> >>>>>> It looks like if check_access just passes this structure and then
> >>>>>> avc_has_perm() when it calls avc_audit, it could supply the
> >>>>>> av_decision structure to the avc_suppl_audit() call. We could
> >>>>>> then have an audit2 callback that takes this parameter.
> >>>>>>
> >>>>>> Is this mostly right, seem sane? Better way to do this?
> >>>>>
> >>>>> It doesn't need to be exposed at that level; the libselinux
> >>>>> avc_audit() routine can log it, similar to what is done in the kernel.
> >>>>> It already has the av_decision structure available to it.
> >>>>
> >>>> To clarify, anything directly known to the AVC, like the permissive
> >>>> flag, can be directly logged by it.  The audit callback is for
> >>>> logging auxiliary audit information not known to the AVC (the pid
> >>>> of the client
> >> process being a good example).
> >>>
> >>> I was wondering if we could just dump permissive=0|1 from the AVC
> >>> logging routine, but that would affect everyone.  I guess then you
> >>> would be ok with that? Does order matter with the fields wrt parsing?
> >>> I don't want to break any desktop tooling I am aware of, would we
> >>> upstream
> >> this change as well?
> >>
> >> Just put it at the end (i.e. log_append() after the avc_dump_query()
> >> call), like we do in the kernel.  Shouldn't be a problem.
> >> Technically order shouldn't matter but safer to just append it to the current
> fields.
> >>
> >> Yes, we'd upstream it.
> >>
> > Done. Ill post back with a patch on android-review. And once merged
> > there I can send one to the Mailing list or you can cherry-pick. Are you ok with
> that?
> 
> Yes.  As with the kernel, only add permissive= to avc: denied messages, not avc:
> granted ones.  See the kernel logic (but note that the code and data structures
> aren't the same as the libselinux AVC anymore).

Ok. Yeah it wouldn't make sense for granted. Its good thing you said something.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-10-02 20:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-02 18:48 av_decision on audit callback Roberts, William C
2015-10-02 18:54 ` Stephen Smalley
2015-10-02 19:12   ` Stephen Smalley
2015-10-02 20:07     ` Roberts, William C
2015-10-02 20:13       ` Stephen Smalley
2015-10-02 20:22         ` Roberts, William C
2015-10-02 20:26           ` Stephen Smalley
2015-10-02 20:29             ` Roberts, William C

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.