xfrm.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * SELinux support for the XFRM LSM hooks
  4. *
  5. * Author : Trent Jaeger, <[email protected]>
  6. * Updated : Venkat Yekkirala, <[email protected]>
  7. */
  8. #ifndef _SELINUX_XFRM_H_
  9. #define _SELINUX_XFRM_H_
  10. #include <linux/lsm_audit.h>
  11. #include <net/flow.h>
  12. #include <net/xfrm.h>
  13. int selinux_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp,
  14. struct xfrm_user_sec_ctx *uctx,
  15. gfp_t gfp);
  16. int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx,
  17. struct xfrm_sec_ctx **new_ctxp);
  18. void selinux_xfrm_policy_free(struct xfrm_sec_ctx *ctx);
  19. int selinux_xfrm_policy_delete(struct xfrm_sec_ctx *ctx);
  20. int selinux_xfrm_state_alloc(struct xfrm_state *x,
  21. struct xfrm_user_sec_ctx *uctx);
  22. int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x,
  23. struct xfrm_sec_ctx *polsec, u32 secid);
  24. void selinux_xfrm_state_free(struct xfrm_state *x);
  25. int selinux_xfrm_state_delete(struct xfrm_state *x);
  26. int selinux_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid);
  27. int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x,
  28. struct xfrm_policy *xp,
  29. const struct flowi_common *flic);
  30. #ifdef CONFIG_SECURITY_NETWORK_XFRM
  31. extern atomic_t selinux_xfrm_refcount;
  32. static inline int selinux_xfrm_enabled(void)
  33. {
  34. return (atomic_read(&selinux_xfrm_refcount) > 0);
  35. }
  36. int selinux_xfrm_sock_rcv_skb(u32 sk_sid, struct sk_buff *skb,
  37. struct common_audit_data *ad);
  38. int selinux_xfrm_postroute_last(u32 sk_sid, struct sk_buff *skb,
  39. struct common_audit_data *ad, u8 proto);
  40. int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, int ckall);
  41. int selinux_xfrm_skb_sid(struct sk_buff *skb, u32 *sid);
  42. static inline void selinux_xfrm_notify_policyload(void)
  43. {
  44. struct net *net;
  45. down_read(&net_rwsem);
  46. for_each_net(net)
  47. rt_genid_bump_all(net);
  48. up_read(&net_rwsem);
  49. }
  50. #else
  51. static inline int selinux_xfrm_enabled(void)
  52. {
  53. return 0;
  54. }
  55. static inline int selinux_xfrm_sock_rcv_skb(u32 sk_sid, struct sk_buff *skb,
  56. struct common_audit_data *ad)
  57. {
  58. return 0;
  59. }
  60. static inline int selinux_xfrm_postroute_last(u32 sk_sid, struct sk_buff *skb,
  61. struct common_audit_data *ad,
  62. u8 proto)
  63. {
  64. return 0;
  65. }
  66. static inline int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid,
  67. int ckall)
  68. {
  69. *sid = SECSID_NULL;
  70. return 0;
  71. }
  72. static inline void selinux_xfrm_notify_policyload(void)
  73. {
  74. }
  75. static inline int selinux_xfrm_skb_sid(struct sk_buff *skb, u32 *sid)
  76. {
  77. *sid = SECSID_NULL;
  78. return 0;
  79. }
  80. #endif
  81. #endif /* _SELINUX_XFRM_H_ */