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#include <linux/init.h>
31#include <linux/types.h>
32#include <linux/list.h>
33#include <linux/socket.h>
34#include <linux/audit.h>
35#include <linux/tty.h>
36#include <linux/security.h>
37#include <linux/gfp.h>
38#include <net/sock.h>
39#include <net/netlink.h>
40#include <net/genetlink.h>
41#include <net/netlabel.h>
42#include <asm/bug.h>
43
44#include "netlabel_mgmt.h"
45#include "netlabel_unlabeled.h"
46#include "netlabel_cipso_v4.h"
47#include "netlabel_user.h"
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62int __init netlbl_netlink_init(void)
63{
64 int ret_val;
65
66 ret_val = netlbl_mgmt_genl_init();
67 if (ret_val != 0)
68 return ret_val;
69
70 ret_val = netlbl_cipsov4_genl_init();
71 if (ret_val != 0)
72 return ret_val;
73
74 ret_val = netlbl_unlabel_genl_init();
75 if (ret_val != 0)
76 return ret_val;
77
78 return 0;
79}
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96struct audit_buffer *netlbl_audit_start_common(int type,
97 struct netlbl_audit *audit_info)
98{
99 struct audit_buffer *audit_buf;
100 char *secctx;
101 u32 secctx_len;
102
103 if (audit_enabled == 0)
104 return NULL;
105
106 audit_buf = audit_log_start(current->audit_context, GFP_ATOMIC, type);
107 if (audit_buf == NULL)
108 return NULL;
109
110 audit_log_format(audit_buf, "netlabel: auid=%u ses=%u",
111 from_kuid(&init_user_ns, audit_info->loginuid),
112 audit_info->sessionid);
113
114 if (audit_info->secid != 0 &&
115 security_secid_to_secctx(audit_info->secid,
116 &secctx,
117 &secctx_len) == 0) {
118 audit_log_format(audit_buf, " subj=%s", secctx);
119 security_release_secctx(secctx, secctx_len);
120 }
121
122 return audit_buf;
123}
124