diff options
Diffstat (limited to 'kernel/auditsc.c')
| -rw-r--r-- | kernel/auditsc.c | 28 | 
1 files changed, 18 insertions, 10 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 547c88be8a28..addeed3df15d 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -64,6 +64,7 @@  #include <uapi/linux/limits.h>  #include <uapi/linux/netfilter/nf_tables.h>  #include <uapi/linux/openat2.h> // struct open_how +#include <uapi/linux/fanotify.h>  #include "audit.h" @@ -1294,15 +1295,11 @@ out:  static void audit_log_cap(struct audit_buffer *ab, char *prefix,  			  kernel_cap_t *cap)  { -	int i; -  	if (cap_isclear(*cap)) {  		audit_log_format(ab, " %s=0", prefix);  		return;  	} -	audit_log_format(ab, " %s=", prefix); -	CAP_FOR_EACH_U32(i) -		audit_log_format(ab, "%08x", cap->cap[CAP_LAST_U32 - i]); +	audit_log_format(ab, " %s=%016llx", prefix, cap->val);  }  static void audit_log_fcaps(struct audit_buffer *ab, struct audit_names *name) @@ -2252,7 +2249,7 @@ static inline int audit_copy_fcaps(struct audit_names *name,  	if (!dentry)  		return 0; -	rc = get_vfs_caps_from_disk(&init_user_ns, dentry, &caps); +	rc = get_vfs_caps_from_disk(&nop_mnt_idmap, dentry, &caps);  	if (rc)  		return rc; @@ -2807,7 +2804,7 @@ int __audit_log_bprm_fcaps(struct linux_binprm *bprm,  	ax->d.next = context->aux;  	context->aux = (void *)ax; -	get_vfs_caps_from_disk(&init_user_ns, +	get_vfs_caps_from_disk(&nop_mnt_idmap,  			       bprm->file->f_path.dentry, &vcaps);  	ax->fcap.permitted = vcaps.permitted; @@ -2877,10 +2874,21 @@ void __audit_log_kern_module(char *name)  	context->type = AUDIT_KERN_MODULE;  } -void __audit_fanotify(unsigned int response) +void __audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar)  { -	audit_log(audit_context(), GFP_KERNEL, -		AUDIT_FANOTIFY,	"resp=%u", response); +	/* {subj,obj}_trust values are {0,1,2}: no,yes,unknown */ +	switch (friar->hdr.type) { +	case FAN_RESPONSE_INFO_NONE: +		audit_log(audit_context(), GFP_KERNEL, AUDIT_FANOTIFY, +			  "resp=%u fan_type=%u fan_info=0 subj_trust=2 obj_trust=2", +			  response, FAN_RESPONSE_INFO_NONE); +		break; +	case FAN_RESPONSE_INFO_AUDIT_RULE: +		audit_log(audit_context(), GFP_KERNEL, AUDIT_FANOTIFY, +			  "resp=%u fan_type=%u fan_info=%X subj_trust=%u obj_trust=%u", +			  response, friar->hdr.type, friar->rule_number, +			  friar->subj_trust, friar->obj_trust); +	}  }  void __audit_tk_injoffset(struct timespec64 offset)  | 
