Skip to content

Commit 76b9fe1

Browse files
committed
fanotify,audit: Allow audit to use the full permission event response
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2008229 Upstream Status: 'fsnotify_for_v6.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs commit 032bffd Author: Richard Guy Briggs <rgb@redhat.com> Date: Fri Feb 3 16:35:16 2023 -0500 fanotify,audit: Allow audit to use the full permission event response This patch passes the full response so that the audit function can use all of it. The audit function was updated to log the additional information in the AUDIT_FANOTIFY record. Currently the only type of fanotify info that is defined is an audit rule number, but convert it to hex encoding to future-proof the field. Hex encoding suggested by Paul Moore <paul@paul-moore.com>. The {subj,obj}_trust values are {0,1,2}, corresponding to no, yes, unknown. Sample records: type=FANOTIFY msg=audit(1600385147.372:590): resp=2 fan_type=1 fan_info=3137 subj_trust=3 obj_trust=5 type=FANOTIFY msg=audit(1659730979.839:284): resp=1 fan_type=0 fan_info=0 subj_trust=2 obj_trust=2 Suggested-by: Steve Grubb <sgrubb@redhat.com> Link: https://lore.kernel.org/r/3075502.aeNJFYEL58@x2 Tested-by: Steve Grubb <sgrubb@redhat.com> Acked-by: Steve Grubb <sgrubb@redhat.com> Signed-off-by: Richard Guy Briggs <rgb@redhat.com> Signed-off-by: Jan Kara <jack@suse.cz> Message-Id: <bcb6d552e517b8751ece153e516d8b073459069c.1675373475.git.rgb@redhat.com> Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
1 parent 0682d9e commit 76b9fe1

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

fs/notify/fanotify/fanotify.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ static int fanotify_get_response(struct fsnotify_group *group,
237237

238238
/* Check if the response should be audited */
239239
if (event->response & FAN_AUDIT)
240-
audit_fanotify(event->response & ~FAN_AUDIT);
240+
audit_fanotify(event->response & ~FAN_AUDIT,
241+
&event->audit_rule);
241242

242243
pr_debug("%s: group=%p event=%p about to return ret=%d\n", __func__,
243244
group, event, ret);

include/linux/audit.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <linux/audit_arch.h>
1515
#include <uapi/linux/audit.h>
1616
#include <uapi/linux/netfilter/nf_tables.h>
17+
#include <uapi/linux/fanotify.h>
1718

1819
#define AUDIT_INO_UNSET ((unsigned long)-1)
1920
#define AUDIT_DEV_UNSET ((dev_t)-1)
@@ -417,7 +418,7 @@ extern void __audit_log_capset(const struct cred *new, const struct cred *old);
417418
extern void __audit_mmap_fd(int fd, int flags);
418419
extern void __audit_openat2_how(struct open_how *how);
419420
extern void __audit_log_kern_module(char *name);
420-
extern void __audit_fanotify(u32 response);
421+
extern void __audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar);
421422
extern void __audit_tk_injoffset(struct timespec64 offset);
422423
extern void __audit_ntp_log(const struct audit_ntp_data *ad);
423424
extern void __audit_log_nfcfg(const char *name, u8 af, unsigned int nentries,
@@ -524,10 +525,10 @@ static inline void audit_log_kern_module(char *name)
524525
__audit_log_kern_module(name);
525526
}
526527

527-
static inline void audit_fanotify(u32 response)
528+
static inline void audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar)
528529
{
529530
if (!audit_dummy_context())
530-
__audit_fanotify(response);
531+
__audit_fanotify(response, friar);
531532
}
532533

533534
static inline void audit_tk_injoffset(struct timespec64 offset)
@@ -684,7 +685,7 @@ static inline void audit_log_kern_module(char *name)
684685
{
685686
}
686687

687-
static inline void audit_fanotify(u32 response)
688+
static inline void audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar)
688689
{ }
689690

690691
static inline void audit_tk_injoffset(struct timespec64 offset)

kernel/auditsc.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
#include <uapi/linux/limits.h>
6565
#include <uapi/linux/netfilter/nf_tables.h>
6666
#include <uapi/linux/openat2.h> // struct open_how
67+
#include <uapi/linux/fanotify.h>
6768

6869
#include "audit.h"
6970

@@ -2902,10 +2903,21 @@ void __audit_log_kern_module(char *name)
29022903
context->type = AUDIT_KERN_MODULE;
29032904
}
29042905

2905-
void __audit_fanotify(u32 response)
2906+
void __audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar)
29062907
{
2907-
audit_log(audit_context(), GFP_KERNEL,
2908-
AUDIT_FANOTIFY, "resp=%u", response);
2908+
/* {subj,obj}_trust values are {0,1,2}: no,yes,unknown */
2909+
switch (friar->hdr.type) {
2910+
case FAN_RESPONSE_INFO_NONE:
2911+
audit_log(audit_context(), GFP_KERNEL, AUDIT_FANOTIFY,
2912+
"resp=%u fan_type=%u fan_info=0 subj_trust=2 obj_trust=2",
2913+
response, FAN_RESPONSE_INFO_NONE);
2914+
break;
2915+
case FAN_RESPONSE_INFO_AUDIT_RULE:
2916+
audit_log(audit_context(), GFP_KERNEL, AUDIT_FANOTIFY,
2917+
"resp=%u fan_type=%u fan_info=%X subj_trust=%u obj_trust=%u",
2918+
response, friar->hdr.type, friar->rule_number,
2919+
friar->subj_trust, friar->obj_trust);
2920+
}
29092921
}
29102922

29112923
void __audit_tk_injoffset(struct timespec64 offset)

0 commit comments

Comments
 (0)