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#include <asm/system.h>
  25
  26
  27/* Auxiliary data to use in generating the audit record. */
  28struct common_audit_data {
  29        char    type;
  30#define LSM_AUDIT_DATA_FS      1
  31#define LSM_AUDIT_DATA_NET     2
  32#define LSM_AUDIT_DATA_CAP     3
  33#define LSM_AUDIT_DATA_IPC     4
  34#define LSM_AUDIT_DATA_TASK    5
  35#define LSM_AUDIT_DATA_KEY     6
  36#define LSM_AUDIT_NO_AUDIT     7
  37        struct task_struct *tsk;
  38        union   {
  39                struct {
  40                        struct path path;
  41                        struct inode *inode;
  42                } fs;
  43                struct {
  44                        int netif;
  45                        struct sock *sk;
  46                        u16 family;
  47                        __be16 dport;
  48                        __be16 sport;
  49                        union {
  50                                struct {
  51                                        __be32 daddr;
  52                                        __be32 saddr;
  53                                } v4;
  54                                struct {
  55                                        struct in6_addr daddr;
  56                                        struct in6_addr saddr;
  57                                } v6;
  58                        } fam;
  59                } net;
  60                int cap;
  61                int ipc_id;
  62                struct task_struct *tsk;
  63#ifdef CONFIG_KEYS
  64                struct {
  65                        key_serial_t key;
  66                        char *key_desc;
  67                } key_struct;
  68#endif
  69        } u;
  70        /* this union contains LSM specific data */
  71        union {
  72#ifdef CONFIG_SECURITY_SMACK
  73                /* SMACK data */
  74                struct smack_audit_data {
  75                        const char *function;
  76                        char *subject;
  77                        char *object;
  78                        char *request;
  79                        int result;
  80                } smack_audit_data;
  81#endif
  82#ifdef CONFIG_SECURITY_SELINUX
  83                /* SELinux data */
  84                struct {
  85                        u32 ssid;
  86                        u32 tsid;
  87                        u16 tclass;
  88                        u32 requested;
  89                        u32 audited;
  90                        u32 denied;
  91                        struct av_decision *avd;
  92                        int result;
  93                } selinux_audit_data;
  94#endif
  95        };
  96        /* these callback will be implemented by a specific LSM */
  97        void (*lsm_pre_audit)(struct audit_buffer *, void *);
  98        void (*lsm_post_audit)(struct audit_buffer *, void *);
  99};
 100
 101#define v4info fam.v4
 102#define v6info fam.v6
 103
 104int ipv4_skb_to_auditdata(struct sk_buff *skb,
 105                struct common_audit_data *ad, u8 *proto);
 106
 107int ipv6_skb_to_auditdata(struct sk_buff *skb,
 108                struct common_audit_data *ad, u8 *proto);
 109
 110/* Initialize an LSM audit data structure. */
 111#define COMMON_AUDIT_DATA_INIT(_d, _t) \
 112        { memset((_d), 0, sizeof(struct common_audit_data)); \
 113         (_d)->type = LSM_AUDIT_DATA_##_t; }
 114
 115void common_lsm_audit(struct common_audit_data *a);
 116
 117#endif
 118