at v4.13 123 lines 2.8 kB view raw
1/* 2 * Common LSM logging functions 3 * Heavily borrowed from selinux/avc.h 4 * 5 * Author : Etienne BASSET <etienne.basset@ensta.org> 6 * 7 * All credits to : Stephen Smalley, <sds@epoch.ncsc.mil> 8 * All BUGS to : Etienne BASSET <etienne.basset@ensta.org> 9 */ 10#ifndef _LSM_COMMON_LOGGING_ 11#define _LSM_COMMON_LOGGING_ 12 13#include <linux/stddef.h> 14#include <linux/errno.h> 15#include <linux/kernel.h> 16#include <linux/kdev_t.h> 17#include <linux/spinlock.h> 18#include <linux/init.h> 19#include <linux/audit.h> 20#include <linux/in6.h> 21#include <linux/path.h> 22#include <linux/key.h> 23#include <linux/skbuff.h> 24#include <rdma/ib_verbs.h> 25 26struct lsm_network_audit { 27 int netif; 28 struct sock *sk; 29 u16 family; 30 __be16 dport; 31 __be16 sport; 32 union { 33 struct { 34 __be32 daddr; 35 __be32 saddr; 36 } v4; 37 struct { 38 struct in6_addr daddr; 39 struct in6_addr saddr; 40 } v6; 41 } fam; 42}; 43 44struct lsm_ioctlop_audit { 45 struct path path; 46 u16 cmd; 47}; 48 49struct lsm_ibpkey_audit { 50 u64 subnet_prefix; 51 u16 pkey; 52}; 53 54struct lsm_ibendport_audit { 55 char dev_name[IB_DEVICE_NAME_MAX]; 56 u8 port; 57}; 58 59/* Auxiliary data to use in generating the audit record. */ 60struct common_audit_data { 61 char type; 62#define LSM_AUDIT_DATA_PATH 1 63#define LSM_AUDIT_DATA_NET 2 64#define LSM_AUDIT_DATA_CAP 3 65#define LSM_AUDIT_DATA_IPC 4 66#define LSM_AUDIT_DATA_TASK 5 67#define LSM_AUDIT_DATA_KEY 6 68#define LSM_AUDIT_DATA_NONE 7 69#define LSM_AUDIT_DATA_KMOD 8 70#define LSM_AUDIT_DATA_INODE 9 71#define LSM_AUDIT_DATA_DENTRY 10 72#define LSM_AUDIT_DATA_IOCTL_OP 11 73#define LSM_AUDIT_DATA_FILE 12 74#define LSM_AUDIT_DATA_IBPKEY 13 75#define LSM_AUDIT_DATA_IBENDPORT 14 76 union { 77 struct path path; 78 struct dentry *dentry; 79 struct inode *inode; 80 struct lsm_network_audit *net; 81 int cap; 82 int ipc_id; 83 struct task_struct *tsk; 84#ifdef CONFIG_KEYS 85 struct { 86 key_serial_t key; 87 char *key_desc; 88 } key_struct; 89#endif 90 char *kmod_name; 91 struct lsm_ioctlop_audit *op; 92 struct file *file; 93 struct lsm_ibpkey_audit *ibpkey; 94 struct lsm_ibendport_audit *ibendport; 95 } u; 96 /* this union contains LSM specific data */ 97 union { 98#ifdef CONFIG_SECURITY_SMACK 99 struct smack_audit_data *smack_audit_data; 100#endif 101#ifdef CONFIG_SECURITY_SELINUX 102 struct selinux_audit_data *selinux_audit_data; 103#endif 104#ifdef CONFIG_SECURITY_APPARMOR 105 struct apparmor_audit_data *apparmor_audit_data; 106#endif 107 }; /* per LSM data pointer union */ 108}; 109 110#define v4info fam.v4 111#define v6info fam.v6 112 113int ipv4_skb_to_auditdata(struct sk_buff *skb, 114 struct common_audit_data *ad, u8 *proto); 115 116int ipv6_skb_to_auditdata(struct sk_buff *skb, 117 struct common_audit_data *ad, u8 *proto); 118 119void common_lsm_audit(struct common_audit_data *a, 120 void (*pre_audit)(struct audit_buffer *, void *), 121 void (*post_audit)(struct audit_buffer *, void *)); 122 123#endif