]> Pileus Git - ~andy/linux/blob - security/selinux/include/xfrm.h
b463f210f1af45b0f698c021a178ffdb53053d91
[~andy/linux] / security / selinux / include / xfrm.h
1 /*
2  * SELinux support for the XFRM LSM hooks
3  *
4  * Author : Trent Jaeger, <jaegert@us.ibm.com>
5  * Updated : Venkat Yekkirala, <vyekkirala@TrustedCS.com>
6  */
7 #ifndef _SELINUX_XFRM_H_
8 #define _SELINUX_XFRM_H_
9
10 #include <net/flow.h>
11
12 int selinux_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp,
13                               struct xfrm_user_sec_ctx *sec_ctx);
14 int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx,
15                               struct xfrm_sec_ctx **new_ctxp);
16 void selinux_xfrm_policy_free(struct xfrm_sec_ctx *ctx);
17 int selinux_xfrm_policy_delete(struct xfrm_sec_ctx *ctx);
18 int selinux_xfrm_state_alloc(struct xfrm_state *x,
19                              struct xfrm_user_sec_ctx *uctx);
20 int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x,
21                                      struct xfrm_sec_ctx *polsec, u32 secid);
22 void selinux_xfrm_state_free(struct xfrm_state *x);
23 int selinux_xfrm_state_delete(struct xfrm_state *x);
24 int selinux_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
25 int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x,
26                         struct xfrm_policy *xp, const struct flowi *fl);
27
28 /*
29  * Extract the security blob from the sock (it's actually on the socket)
30  */
31 static inline struct inode_security_struct *get_sock_isec(struct sock *sk)
32 {
33         if (!sk->sk_socket)
34                 return NULL;
35
36         return SOCK_INODE(sk->sk_socket)->i_security;
37 }
38
39 #ifdef CONFIG_SECURITY_NETWORK_XFRM
40 extern atomic_t selinux_xfrm_refcount;
41
42 static inline int selinux_xfrm_enabled(void)
43 {
44         return (atomic_read(&selinux_xfrm_refcount) > 0);
45 }
46
47 int selinux_xfrm_sock_rcv_skb(u32 sk_sid, struct sk_buff *skb,
48                               struct common_audit_data *ad);
49 int selinux_xfrm_postroute_last(u32 sk_sid, struct sk_buff *skb,
50                                 struct common_audit_data *ad, u8 proto);
51 int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, int ckall);
52
53 static inline void selinux_xfrm_notify_policyload(void)
54 {
55         atomic_inc(&flow_cache_genid);
56         rt_genid_bump(&init_net);
57 }
58 #else
59 static inline int selinux_xfrm_enabled(void)
60 {
61         return 0;
62 }
63
64 static inline int selinux_xfrm_sock_rcv_skb(u32 sk_sid, struct sk_buff *skb,
65                                             struct common_audit_data *ad)
66 {
67         return 0;
68 }
69
70 static inline int selinux_xfrm_postroute_last(u32 sk_sid, struct sk_buff *skb,
71                                               struct common_audit_data *ad,
72                                               u8 proto)
73 {
74         return 0;
75 }
76
77 static inline int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, int ckall)
78 {
79         *sid = SECSID_NULL;
80         return 0;
81 }
82
83 static inline void selinux_xfrm_notify_policyload(void)
84 {
85 }
86 #endif
87
88 static inline void selinux_skb_xfrm_sid(struct sk_buff *skb, u32 *sid)
89 {
90         int err = selinux_xfrm_decode_session(skb, sid, 0);
91         BUG_ON(err);
92 }
93
94 #endif /* _SELINUX_XFRM_H_ */