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