linux/include/linux/lsm_audit.h
<<
>>
Prefs
   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
  43struct lsm_ioctlop_audit {
  44        struct path path;
  45        u16 cmd;
  46};
  47
  48/* Auxiliary data to use in generating the audit record. */
  49struct common_audit_data {
  50        char type;
  51#define LSM_AUDIT_DATA_PATH     1
  52#define LSM_AUDIT_DATA_NET      2
  53#define LSM_AUDIT_DATA_CAP      3
  54#define LSM_AUDIT_DATA_IPC      4
  55#define LSM_AUDIT_DATA_TASK     5
  56#define LSM_AUDIT_DATA_KEY      6
  57#define LSM_AUDIT_DATA_NONE     7
  58#define LSM_AUDIT_DATA_KMOD     8
  59#define LSM_AUDIT_DATA_INODE    9
  60#define LSM_AUDIT_DATA_DENTRY   10
  61#define LSM_AUDIT_DATA_IOCTL_OP 11
  62        union   {
  63                struct path path;
  64                struct dentry *dentry;
  65                struct inode *inode;
  66                struct lsm_network_audit *net;
  67                int cap;
  68                int ipc_id;
  69                struct task_struct *tsk;
  70#ifdef CONFIG_KEYS
  71                struct {
  72                        key_serial_t key;
  73                        char *key_desc;
  74                } key_struct;
  75#endif
  76                char *kmod_name;
  77                struct lsm_ioctlop_audit *op;
  78        } u;
  79        /* this union contains LSM specific data */
  80        union {
  81#ifdef CONFIG_SECURITY_SMACK
  82                struct smack_audit_data *smack_audit_data;
  83#endif
  84#ifdef CONFIG_SECURITY_SELINUX
  85                struct selinux_audit_data *selinux_audit_data;
  86#endif
  87#ifdef CONFIG_SECURITY_APPARMOR
  88                struct apparmor_audit_data *apparmor_audit_data;
  89#endif
  90        }; /* per LSM data pointer union */
  91};
  92
  93#define v4info fam.v4
  94#define v6info fam.v6
  95
  96int ipv4_skb_to_auditdata(struct sk_buff *skb,
  97                struct common_audit_data *ad, u8 *proto);
  98
  99int ipv6_skb_to_auditdata(struct sk_buff *skb,
 100                struct common_audit_data *ad, u8 *proto);
 101
 102void common_lsm_audit(struct common_audit_data *a,
 103        void (*pre_audit)(struct audit_buffer *, void *),
 104        void (*post_audit)(struct audit_buffer *, void *));
 105
 106#endif
 107