| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* audit.h -- Auditing support | |
| * | |
| * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina. | |
| * All Rights Reserved. | |
| * | |
| * Written by Rickard E. (Rik) Faith <faith@redhat.com> | |
| */ | |
| #ifndef _LINUX_AUDIT_H_ | |
| #define _LINUX_AUDIT_H_ | |
| #include <linux/sched.h> | |
| #include <linux/ptrace.h> | |
| #include <linux/audit_arch.h> | |
| #include <uapi/linux/audit.h> | |
| #include <uapi/linux/netfilter/nf_tables.h> | |
| #include <uapi/linux/fanotify.h> | |
| #define AUDIT_INO_UNSET ((u64)-1) | |
| #define AUDIT_DEV_UNSET ((dev_t)-1) | |
| struct audit_sig_info { | |
| uid_t uid; | |
| pid_t pid; | |
| char ctx[]; | |
| }; | |
| struct audit_buffer; | |
| struct audit_context; | |
| struct inode; | |
| struct netlink_skb_parms; | |
| struct path; | |
| struct linux_binprm; | |
| struct mq_attr; | |
| struct mqstat; | |
| struct audit_watch; | |
| struct audit_tree; | |
| struct sk_buff; | |
| struct audit_krule { | |
| u32 pflags; | |
| u32 flags; | |
| u32 listnr; | |
| u32 action; | |
| u32 mask[AUDIT_BITMASK_SIZE]; | |
| u32 buflen; /* for data alloc on list rules */ | |
| u32 field_count; | |
| char *filterkey; /* ties events to rules */ | |
| struct audit_field *fields; | |
| struct audit_field *arch_f; /* quick access to arch field */ | |
| struct audit_field *inode_f; /* quick access to an inode field */ | |
| struct audit_watch *watch; /* associated watch */ | |
| struct audit_tree *tree; /* associated watched tree */ | |
| struct audit_fsnotify_mark *exe; | |
| struct list_head rlist; /* entry in audit_{watch,tree}.rules list */ | |
| struct list_head list; /* for AUDIT_LIST* purposes only */ | |
| u64 prio; | |
| }; | |
| /* Flag to indicate legacy AUDIT_LOGINUID unset usage */ | |
| #define AUDIT_LOGINUID_LEGACY 0x1 | |
| struct audit_field { | |
| u32 type; | |
| union { | |
| u32 val; | |
| kuid_t uid; | |
| kgid_t gid; | |
| struct { | |
| char *lsm_str; | |
| void *lsm_rule; | |
| }; | |
| }; | |
| u32 op; | |
| }; | |
| enum audit_ntp_type { | |
| AUDIT_NTP_OFFSET, | |
| AUDIT_NTP_FREQ, | |
| AUDIT_NTP_STATUS, | |
| AUDIT_NTP_TAI, | |
| AUDIT_NTP_TICK, | |
| AUDIT_NTP_ADJUST, | |
| AUDIT_NTP_NVALS /* count */ | |
| }; | |
| #ifdef CONFIG_AUDITSYSCALL | |
| struct audit_ntp_val { | |
| long long oldval, newval; | |
| }; | |
| struct audit_ntp_data { | |
| struct audit_ntp_val vals[AUDIT_NTP_NVALS]; | |
| }; | |
| #else | |
| struct audit_ntp_data {}; | |
| #endif | |
| struct audit_task_info { | |
| kuid_t loginuid; | |
| unsigned int sessionid; | |
| u64 contid; | |
| #ifdef CONFIG_AUDITSYSCALL | |
| struct audit_context *ctx; | |
| #endif | |
| }; | |
| extern struct audit_task_info init_struct_audit; | |
| enum audit_nfcfgop { | |
| AUDIT_XT_OP_REGISTER, | |
| AUDIT_XT_OP_REPLACE, | |
| AUDIT_XT_OP_UNREGISTER, | |
| AUDIT_NFT_OP_TABLE_REGISTER, | |
| AUDIT_NFT_OP_TABLE_UNREGISTER, | |
| AUDIT_NFT_OP_CHAIN_REGISTER, | |
| AUDIT_NFT_OP_CHAIN_UNREGISTER, | |
| AUDIT_NFT_OP_RULE_REGISTER, | |
| AUDIT_NFT_OP_RULE_UNREGISTER, | |
| AUDIT_NFT_OP_SET_REGISTER, | |
| AUDIT_NFT_OP_SET_UNREGISTER, | |
| AUDIT_NFT_OP_SETELEM_REGISTER, | |
| AUDIT_NFT_OP_SETELEM_UNREGISTER, | |
| AUDIT_NFT_OP_GEN_REGISTER, | |
| AUDIT_NFT_OP_OBJ_REGISTER, | |
| AUDIT_NFT_OP_OBJ_UNREGISTER, | |
| AUDIT_NFT_OP_OBJ_RESET, | |
| AUDIT_NFT_OP_FLOWTABLE_REGISTER, | |
| AUDIT_NFT_OP_FLOWTABLE_UNREGISTER, | |
| AUDIT_NFT_OP_SETELEM_RESET, | |
| AUDIT_NFT_OP_RULE_RESET, | |
| AUDIT_NFT_OP_INVALID, | |
| }; | |
| extern int __init audit_register_class(int class, unsigned int *list); | |
| extern int audit_classify_syscall(int abi, unsigned int syscall); | |
| extern int audit_classify_arch(int arch); | |
| /* audit_names->type values */ | |
| #define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */ | |
| #define AUDIT_TYPE_NORMAL 1 /* a "normal" audit record */ | |
| #define AUDIT_TYPE_PARENT 2 /* a parent audit record */ | |
| #define AUDIT_TYPE_CHILD_DELETE 3 /* a child being deleted */ | |
| #define AUDIT_TYPE_CHILD_CREATE 4 /* a child being created */ | |
| /* maximized args number that audit_socketcall can process */ | |
| #define AUDITSC_ARGS 6 | |
| /* bit values for ->signal->audit_tty */ | |
| #define AUDIT_TTY_ENABLE BIT(0) | |
| #define AUDIT_TTY_LOG_PASSWD BIT(1) | |
| struct filename; | |
| #define AUDIT_OFF 0 | |
| #define AUDIT_ON 1 | |
| #define AUDIT_LOCKED 2 | |
| #ifdef CONFIG_AUDIT | |
| /* These are defined in audit.c */ | |
| /* Public API */ | |
| extern int audit_alloc(struct task_struct *task); | |
| extern void audit_free(struct task_struct *task); | |
| extern void __init audit_task_init(void); | |
| extern __printf(4, 5) | |
| void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type, | |
| const char *fmt, ...); | |
| extern struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type); | |
| extern __printf(2, 3) | |
| void audit_log_format(struct audit_buffer *ab, const char *fmt, ...); | |
| extern void audit_log_end(struct audit_buffer *ab); | |
| extern bool audit_string_contains_control(const char *string, | |
| size_t len); | |
| extern void audit_log_n_hex(struct audit_buffer *ab, | |
| const unsigned char *buf, | |
| size_t len); | |
| extern void audit_log_n_string(struct audit_buffer *ab, | |
| const char *buf, | |
| size_t n); | |
| extern void audit_log_n_untrustedstring(struct audit_buffer *ab, | |
| const char *string, | |
| size_t n); | |
| extern void audit_log_untrustedstring(struct audit_buffer *ab, | |
| const char *string); | |
| extern void audit_log_d_path(struct audit_buffer *ab, | |
| const char *prefix, | |
| const struct path *path); | |
| extern void audit_log_key(struct audit_buffer *ab, | |
| char *key); | |
| extern void audit_log_path_denied(int type, | |
| const char *operation); | |
| extern void audit_log_lost(const char *message); | |
| extern int audit_log_task_context(struct audit_buffer *ab); | |
| extern void audit_log_task_info(struct audit_buffer *ab); | |
| extern int audit_log_nf_skb(struct audit_buffer *ab, | |
| const struct sk_buff *skb, u8 nfproto); | |
| extern int audit_update_lsm_rules(void); | |
| /* Private API (for audit.c only) */ | |
| extern int audit_rule_change(int type, int seq, void *data, size_t datasz); | |
| extern int audit_list_rules_send(struct sk_buff *request_skb, int seq); | |
| extern int audit_set_loginuid(kuid_t loginuid); | |
| static inline kuid_t audit_get_loginuid(struct task_struct *tsk) | |
| { | |
| if (!tsk->audit) | |
| return INVALID_UID; | |
| return tsk->audit->loginuid; | |
| } | |
| static inline unsigned int audit_get_sessionid(struct task_struct *tsk) | |
| { | |
| if (!tsk->audit) | |
| return AUDIT_SID_UNSET; | |
| return tsk->audit->sessionid; | |
| } | |
| extern int audit_set_contid(struct task_struct *tsk, u64 contid); | |
| static inline u64 audit_get_contid(struct task_struct *tsk) | |
| { | |
| if (!tsk->audit) | |
| return AUDIT_CID_UNSET; | |
| return tsk->audit->contid; | |
| } | |
| extern u32 audit_enabled; | |
| extern int audit_signal_info(int sig, struct task_struct *t); | |
| #else /* CONFIG_AUDIT */ | |
| static inline int audit_alloc(struct task_struct *task) | |
| { | |
| return 0; | |
| } | |
| static inline void audit_free(struct task_struct *task) | |
| { } | |
| static inline void __init audit_task_init(void) | |
| { } | |
| static inline __printf(4, 5) | |
| void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type, | |
| const char *fmt, ...) | |
| { } | |
| static inline struct audit_buffer *audit_log_start(struct audit_context *ctx, | |
| gfp_t gfp_mask, int type) | |
| { | |
| return NULL; | |
| } | |
| static inline __printf(2, 3) | |
| void audit_log_format(struct audit_buffer *ab, const char *fmt, ...) | |
| { } | |
| static inline void audit_log_end(struct audit_buffer *ab) | |
| { } | |
| static inline void audit_log_n_hex(struct audit_buffer *ab, | |
| const unsigned char *buf, size_t len) | |
| { } | |
| static inline void audit_log_n_string(struct audit_buffer *ab, | |
| const char *buf, size_t n) | |
| { } | |
| static inline void audit_log_n_untrustedstring(struct audit_buffer *ab, | |
| const char *string, size_t n) | |
| { } | |
| static inline void audit_log_untrustedstring(struct audit_buffer *ab, | |
| const char *string) | |
| { } | |
| static inline void audit_log_d_path(struct audit_buffer *ab, | |
| const char *prefix, | |
| const struct path *path) | |
| { } | |
| static inline void audit_log_key(struct audit_buffer *ab, char *key) | |
| { } | |
| static inline void audit_log_path_denied(int type, const char *operation) | |
| { } | |
| static inline int audit_log_task_context(struct audit_buffer *ab) | |
| { | |
| return 0; | |
| } | |
| static inline void audit_log_task_info(struct audit_buffer *ab) | |
| { } | |
| static inline int audit_log_nf_skb(struct audit_buffer *ab, | |
| const struct sk_buff *skb, u8 nfproto) | |
| { | |
| return 0; | |
| } | |
| static inline kuid_t audit_get_loginuid(struct task_struct *tsk) | |
| { | |
| return INVALID_UID; | |
| } | |
| static inline unsigned int audit_get_sessionid(struct task_struct *tsk) | |
| { | |
| return AUDIT_SID_UNSET; | |
| } | |
| static inline u64 audit_get_contid(struct task_struct *tsk) | |
| { | |
| return AUDIT_CID_UNSET; | |
| } | |
| #define audit_enabled AUDIT_OFF | |
| static inline int audit_signal_info(int sig, struct task_struct *t) | |
| { | |
| return 0; | |
| } | |
| #endif /* CONFIG_AUDIT */ | |
| #ifdef CONFIG_AUDIT_COMPAT_GENERIC | |
| #define audit_is_compat(arch) (!((arch) & __AUDIT_ARCH_64BIT)) | |
| #else | |
| #define audit_is_compat(arch) false | |
| #endif | |
| #define AUDIT_INODE_PARENT 1 /* dentry represents the parent */ | |
| #define AUDIT_INODE_HIDDEN 2 /* audit record should be hidden */ | |
| #define AUDIT_INODE_NOEVAL 4 /* audit record incomplete */ | |
| #ifdef CONFIG_AUDITSYSCALL | |
| #include <asm/syscall.h> /* for syscall_get_arch() */ | |
| /* These are defined in auditsc.c */ | |
| /* Public API */ | |
| extern int audit_alloc(struct task_struct *task); | |
| extern void __audit_free(struct task_struct *task); | |
| extern void __audit_uring_entry(u8 op); | |
| extern void __audit_uring_exit(int success, long code); | |
| extern void __audit_syscall_entry(int major, unsigned long a0, unsigned long a1, | |
| unsigned long a2, unsigned long a3); | |
| extern void __audit_syscall_exit(int ret_success, long ret_value); | |
| extern struct filename *__audit_reusename(const __user char *uptr); | |
| extern void __audit_getname(struct filename *name); | |
| extern void __audit_inode(struct filename *name, const struct dentry *dentry, | |
| unsigned int flags); | |
| extern void __audit_file(const struct file *); | |
| extern void __audit_inode_child(struct inode *parent, | |
| const struct dentry *dentry, | |
| const unsigned char type); | |
| extern void audit_seccomp(unsigned long syscall, long signr, int code); | |
| extern void audit_seccomp_actions_logged(const char *names, | |
| const char *old_names, int res); | |
| extern void __audit_ptrace(struct task_struct *t); | |
| static inline void audit_set_context(struct task_struct *task, struct audit_context *ctx) | |
| { | |
| task->audit->ctx = ctx; | |
| } | |
| static inline struct audit_context *audit_context(void) | |
| { | |
| if (!current->audit) | |
| return NULL; | |
| return current->audit->ctx; | |
| } | |
| static inline bool audit_dummy_context(void) | |
| { | |
| void *p = audit_context(); | |
| return !p || *(int *)p; | |
| } | |
| static inline void audit_uring_entry(u8 op) | |
| { | |
| /* | |
| * We intentionally check audit_context() before audit_enabled as most | |
| * Linux systems (as of ~2021) rely on systemd which forces audit to | |
| * be enabled regardless of the user's audit configuration. | |
| */ | |
| if (unlikely(audit_context() && audit_enabled)) | |
| __audit_uring_entry(op); | |
| } | |
| static inline void audit_uring_exit(int success, long code) | |
| { | |
| if (unlikely(audit_context())) | |
| __audit_uring_exit(success, code); | |
| } | |
| static inline void audit_syscall_entry(int major, unsigned long a0, | |
| unsigned long a1, unsigned long a2, | |
| unsigned long a3) | |
| { | |
| if (unlikely(audit_context())) | |
| __audit_syscall_entry(major, a0, a1, a2, a3); | |
| } | |
| static inline void audit_syscall_exit(void *pt_regs) | |
| { | |
| if (unlikely(audit_context())) { | |
| int success = is_syscall_success(pt_regs); | |
| long return_code = regs_return_value(pt_regs); | |
| __audit_syscall_exit(success, return_code); | |
| } | |
| } | |
| static inline struct filename *audit_reusename(const __user char *name) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| return __audit_reusename(name); | |
| return NULL; | |
| } | |
| static inline void audit_getname(struct filename *name) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_getname(name); | |
| } | |
| static inline void audit_inode(struct filename *name, | |
| const struct dentry *dentry, | |
| unsigned int aflags) { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_inode(name, dentry, aflags); | |
| } | |
| static inline void audit_file(struct file *file) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_file(file); | |
| } | |
| static inline void audit_inode_parent_hidden(struct filename *name, | |
| const struct dentry *dentry) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_inode(name, dentry, | |
| AUDIT_INODE_PARENT | AUDIT_INODE_HIDDEN); | |
| } | |
| static inline void audit_inode_child(struct inode *parent, | |
| const struct dentry *dentry, | |
| const unsigned char type) { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_inode_child(parent, dentry, type); | |
| } | |
| void audit_core_dumps(long signr); | |
| static inline void audit_ptrace(struct task_struct *t) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_ptrace(t); | |
| } | |
| /* Private API (for audit.c only) */ | |
| extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp); | |
| extern void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode); | |
| extern void __audit_bprm(struct linux_binprm *bprm); | |
| extern int __audit_socketcall(int nargs, unsigned long *args); | |
| extern int __audit_sockaddr(int len, void *addr); | |
| extern void __audit_fd_pair(int fd1, int fd2); | |
| extern void __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr); | |
| extern void __audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout); | |
| extern void __audit_mq_notify(mqd_t mqdes, const struct sigevent *notification); | |
| extern void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat); | |
| extern int __audit_log_bprm_fcaps(struct linux_binprm *bprm, | |
| const struct cred *new, | |
| const struct cred *old); | |
| extern void __audit_log_capset(const struct cred *new, const struct cred *old); | |
| extern void __audit_mmap_fd(int fd, int flags); | |
| extern void __audit_openat2_how(struct open_how *how); | |
| extern void __audit_log_kern_module(const char *name); | |
| extern void __audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar); | |
| extern void __audit_tk_injoffset(struct timespec64 offset); | |
| extern void __audit_ntp_log(const struct audit_ntp_data *ad); | |
| extern void __audit_log_nfcfg(const char *name, u8 af, unsigned int nentries, | |
| enum audit_nfcfgop op, gfp_t gfp); | |
| static inline void audit_ipc_obj(struct kern_ipc_perm *ipcp) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_ipc_obj(ipcp); | |
| } | |
| static inline void audit_fd_pair(int fd1, int fd2) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_fd_pair(fd1, fd2); | |
| } | |
| static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_ipc_set_perm(qbytes, uid, gid, mode); | |
| } | |
| static inline void audit_bprm(struct linux_binprm *bprm) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_bprm(bprm); | |
| } | |
| static inline int audit_socketcall(int nargs, unsigned long *args) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| return __audit_socketcall(nargs, args); | |
| return 0; | |
| } | |
| static inline int audit_socketcall_compat(int nargs, u32 *args) | |
| { | |
| unsigned long a[AUDITSC_ARGS]; | |
| int i; | |
| if (audit_dummy_context()) | |
| return 0; | |
| for (i = 0; i < nargs; i++) | |
| a[i] = (unsigned long)args[i]; | |
| return __audit_socketcall(nargs, a); | |
| } | |
| static inline int audit_sockaddr(int len, void *addr) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| return __audit_sockaddr(len, addr); | |
| return 0; | |
| } | |
| static inline void audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_mq_open(oflag, mode, attr); | |
| } | |
| static inline void audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_mq_sendrecv(mqdes, msg_len, msg_prio, abs_timeout); | |
| } | |
| static inline void audit_mq_notify(mqd_t mqdes, const struct sigevent *notification) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_mq_notify(mqdes, notification); | |
| } | |
| static inline void audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_mq_getsetattr(mqdes, mqstat); | |
| } | |
| static inline int audit_log_bprm_fcaps(struct linux_binprm *bprm, | |
| const struct cred *new, | |
| const struct cred *old) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| return __audit_log_bprm_fcaps(bprm, new, old); | |
| return 0; | |
| } | |
| static inline void audit_log_capset(const struct cred *new, | |
| const struct cred *old) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_log_capset(new, old); | |
| } | |
| static inline void audit_mmap_fd(int fd, int flags) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_mmap_fd(fd, flags); | |
| } | |
| static inline void audit_openat2_how(struct open_how *how) | |
| { | |
| if (unlikely(!audit_dummy_context())) | |
| __audit_openat2_how(how); | |
| } | |
| static inline void audit_log_kern_module(const char *name) | |
| { | |
| if (!audit_dummy_context()) | |
| __audit_log_kern_module(name); | |
| } | |
| static inline void audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar) | |
| { | |
| if (audit_enabled) | |
| __audit_fanotify(response, friar); | |
| } | |
| static inline void audit_tk_injoffset(struct timespec64 offset) | |
| { | |
| /* ignore no-op events */ | |
| if (offset.tv_sec == 0 && offset.tv_nsec == 0) | |
| return; | |
| if (!audit_dummy_context()) | |
| __audit_tk_injoffset(offset); | |
| } | |
| static inline void audit_ntp_init(struct audit_ntp_data *ad) | |
| { | |
| memset(ad, 0, sizeof(*ad)); | |
| } | |
| static inline void audit_ntp_set_old(struct audit_ntp_data *ad, | |
| enum audit_ntp_type type, long long val) | |
| { | |
| ad->vals[type].oldval = val; | |
| } | |
| static inline void audit_ntp_set_new(struct audit_ntp_data *ad, | |
| enum audit_ntp_type type, long long val) | |
| { | |
| ad->vals[type].newval = val; | |
| } | |
| static inline void audit_ntp_log(const struct audit_ntp_data *ad) | |
| { | |
| if (!audit_dummy_context()) | |
| __audit_ntp_log(ad); | |
| } | |
| static inline void audit_log_nfcfg(const char *name, u8 af, | |
| unsigned int nentries, | |
| enum audit_nfcfgop op, gfp_t gfp) | |
| { | |
| if (audit_enabled) | |
| __audit_log_nfcfg(name, af, nentries, op, gfp); | |
| } | |
| extern int audit_n_rules; | |
| extern int audit_signals; | |
| #else /* CONFIG_AUDITSYSCALL */ | |
| static inline int audit_alloc(struct task_struct *task) | |
| { | |
| return 0; | |
| } | |
| static inline void audit_free(struct task_struct *task) | |
| { } | |
| static inline void audit_uring_entry(u8 op) | |
| { } | |
| static inline void audit_uring_exit(int success, long code) | |
| { } | |
| static inline void audit_syscall_entry(int major, unsigned long a0, | |
| unsigned long a1, unsigned long a2, | |
| unsigned long a3) | |
| { } | |
| static inline void audit_syscall_exit(void *pt_regs) | |
| { } | |
| static inline bool audit_dummy_context(void) | |
| { | |
| return true; | |
| } | |
| static inline void audit_set_context(struct task_struct *task, struct audit_context *ctx) | |
| { } | |
| static inline struct audit_context *audit_context(void) | |
| { | |
| return NULL; | |
| } | |
| static inline struct filename *audit_reusename(const __user char *name) | |
| { | |
| return NULL; | |
| } | |
| static inline void audit_getname(struct filename *name) | |
| { } | |
| static inline void audit_inode(struct filename *name, | |
| const struct dentry *dentry, | |
| unsigned int aflags) | |
| { } | |
| static inline void audit_file(struct file *file) | |
| { | |
| } | |
| static inline void audit_inode_parent_hidden(struct filename *name, | |
| const struct dentry *dentry) | |
| { } | |
| static inline void audit_inode_child(struct inode *parent, | |
| const struct dentry *dentry, | |
| const unsigned char type) | |
| { } | |
| static inline void audit_core_dumps(long signr) | |
| { } | |
| static inline void audit_seccomp(unsigned long syscall, long signr, int code) | |
| { } | |
| static inline void audit_seccomp_actions_logged(const char *names, | |
| const char *old_names, int res) | |
| { } | |
| static inline void audit_ipc_obj(struct kern_ipc_perm *ipcp) | |
| { } | |
| static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid, | |
| gid_t gid, umode_t mode) | |
| { } | |
| static inline void audit_bprm(struct linux_binprm *bprm) | |
| { } | |
| static inline int audit_socketcall(int nargs, unsigned long *args) | |
| { | |
| return 0; | |
| } | |
| static inline int audit_socketcall_compat(int nargs, u32 *args) | |
| { | |
| return 0; | |
| } | |
| static inline void audit_fd_pair(int fd1, int fd2) | |
| { } | |
| static inline int audit_sockaddr(int len, void *addr) | |
| { | |
| return 0; | |
| } | |
| static inline void audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr) | |
| { } | |
| static inline void audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, | |
| unsigned int msg_prio, | |
| const struct timespec64 *abs_timeout) | |
| { } | |
| static inline void audit_mq_notify(mqd_t mqdes, | |
| const struct sigevent *notification) | |
| { } | |
| static inline void audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | |
| { } | |
| static inline int audit_log_bprm_fcaps(struct linux_binprm *bprm, | |
| const struct cred *new, | |
| const struct cred *old) | |
| { | |
| return 0; | |
| } | |
| static inline void audit_log_capset(const struct cred *new, | |
| const struct cred *old) | |
| { } | |
| static inline void audit_mmap_fd(int fd, int flags) | |
| { } | |
| static inline void audit_openat2_how(struct open_how *how) | |
| { } | |
| static inline void audit_log_kern_module(const char *name) | |
| { } | |
| static inline void audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar) | |
| { } | |
| static inline void audit_tk_injoffset(struct timespec64 offset) | |
| { } | |
| static inline void audit_ntp_init(struct audit_ntp_data *ad) | |
| { } | |
| static inline void audit_ntp_set_old(struct audit_ntp_data *ad, | |
| enum audit_ntp_type type, long long val) | |
| { } | |
| static inline void audit_ntp_set_new(struct audit_ntp_data *ad, | |
| enum audit_ntp_type type, long long val) | |
| { } | |
| static inline void audit_ntp_log(const struct audit_ntp_data *ad) | |
| { } | |
| static inline void audit_ptrace(struct task_struct *t) | |
| { } | |
| static inline void audit_log_nfcfg(const char *name, u8 af, | |
| unsigned int nentries, | |
| enum audit_nfcfgop op, gfp_t gfp) | |
| { } | |
| #define audit_n_rules 0 | |
| #define audit_signals 0 | |
| #endif /* CONFIG_AUDITSYSCALL */ | |
| static inline bool audit_loginuid_set(struct task_struct *tsk) | |
| { | |
| return uid_valid(audit_get_loginuid(tsk)); | |
| } | |
| static inline bool audit_contid_valid(u64 contid) | |
| { | |
| return contid != AUDIT_CID_UNSET; | |
| } | |
| static inline bool audit_contid_set(struct task_struct *tsk) | |
| { | |
| return audit_contid_valid(audit_get_contid(tsk)); | |
| } | |
| static inline void audit_log_string(struct audit_buffer *ab, const char *buf) | |
| { | |
| audit_log_n_string(ab, buf, strlen(buf)); | |
| } | |
| #endif |