at v3.4 2.5 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 25struct lsm_network_audit { 26 int netif; 27 struct sock *sk; 28 u16 family; 29 __be16 dport; 30 __be16 sport; 31 union { 32 struct { 33 __be32 daddr; 34 __be32 saddr; 35 } v4; 36 struct { 37 struct in6_addr daddr; 38 struct in6_addr saddr; 39 } v6; 40 } fam; 41}; 42 43/* Auxiliary data to use in generating the audit record. */ 44struct common_audit_data { 45 char type; 46#define LSM_AUDIT_DATA_PATH 1 47#define LSM_AUDIT_DATA_NET 2 48#define LSM_AUDIT_DATA_CAP 3 49#define LSM_AUDIT_DATA_IPC 4 50#define LSM_AUDIT_DATA_TASK 5 51#define LSM_AUDIT_DATA_KEY 6 52#define LSM_AUDIT_DATA_NONE 7 53#define LSM_AUDIT_DATA_KMOD 8 54#define LSM_AUDIT_DATA_INODE 9 55#define LSM_AUDIT_DATA_DENTRY 10 56 struct task_struct *tsk; 57 union { 58 struct path path; 59 struct dentry *dentry; 60 struct inode *inode; 61 struct lsm_network_audit *net; 62 int cap; 63 int ipc_id; 64 struct task_struct *tsk; 65#ifdef CONFIG_KEYS 66 struct { 67 key_serial_t key; 68 char *key_desc; 69 } key_struct; 70#endif 71 char *kmod_name; 72 } u; 73 /* this union contains LSM specific data */ 74 union { 75#ifdef CONFIG_SECURITY_SMACK 76 struct smack_audit_data *smack_audit_data; 77#endif 78#ifdef CONFIG_SECURITY_SELINUX 79 struct selinux_audit_data *selinux_audit_data; 80#endif 81#ifdef CONFIG_SECURITY_APPARMOR 82 struct apparmor_audit_data *apparmor_audit_data; 83#endif 84 }; /* per LSM data pointer union */ 85}; 86 87#define v4info fam.v4 88#define v6info fam.v6 89 90int ipv4_skb_to_auditdata(struct sk_buff *skb, 91 struct common_audit_data *ad, u8 *proto); 92 93int ipv6_skb_to_auditdata(struct sk_buff *skb, 94 struct common_audit_data *ad, u8 *proto); 95 96/* Initialize an LSM audit data structure. */ 97#define COMMON_AUDIT_DATA_INIT(_d, _t) \ 98 { memset((_d), 0, sizeof(struct common_audit_data)); \ 99 (_d)->type = LSM_AUDIT_DATA_##_t; } 100 101void common_lsm_audit(struct common_audit_data *a, 102 void (*pre_audit)(struct audit_buffer *, void *), 103 void (*post_audit)(struct audit_buffer *, void *)); 104 105#endif