|
@@ -444,11 +444,15 @@ static void avc_audit_post_callback(struct audit_buffer *ab, void *a)
|
|
avc_dump_query(ab, ad->selinux_audit_data->ssid,
|
|
avc_dump_query(ab, ad->selinux_audit_data->ssid,
|
|
ad->selinux_audit_data->tsid,
|
|
ad->selinux_audit_data->tsid,
|
|
ad->selinux_audit_data->tclass);
|
|
ad->selinux_audit_data->tclass);
|
|
|
|
+ if (ad->selinux_audit_data->denied) {
|
|
|
|
+ audit_log_format(ab, " permissive=%u",
|
|
|
|
+ ad->selinux_audit_data->result ? 0 : 1);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/* This is the slow part of avc audit with big stack footprint */
|
|
/* This is the slow part of avc audit with big stack footprint */
|
|
noinline int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass,
|
|
noinline int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass,
|
|
- u32 requested, u32 audited, u32 denied,
|
|
|
|
|
|
+ u32 requested, u32 audited, u32 denied, int result,
|
|
struct common_audit_data *a,
|
|
struct common_audit_data *a,
|
|
unsigned flags)
|
|
unsigned flags)
|
|
{
|
|
{
|
|
@@ -477,6 +481,7 @@ noinline int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass,
|
|
sad.tsid = tsid;
|
|
sad.tsid = tsid;
|
|
sad.audited = audited;
|
|
sad.audited = audited;
|
|
sad.denied = denied;
|
|
sad.denied = denied;
|
|
|
|
+ sad.result = result;
|
|
|
|
|
|
a->selinux_audit_data = &sad;
|
|
a->selinux_audit_data = &sad;
|
|
|
|
|