summaryrefslogtreecommitdiffstats
path: root/testing/linux-grsec/0001-xfrm-introduce-basic-mark-infrastructure.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/linux-grsec/0001-xfrm-introduce-basic-mark-infrastructure.patch')
-rw-r--r--testing/linux-grsec/0001-xfrm-introduce-basic-mark-infrastructure.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/testing/linux-grsec/0001-xfrm-introduce-basic-mark-infrastructure.patch b/testing/linux-grsec/0001-xfrm-introduce-basic-mark-infrastructure.patch
new file mode 100644
index 00000000..363a34b3
--- /dev/null
+++ b/testing/linux-grsec/0001-xfrm-introduce-basic-mark-infrastructure.patch
@@ -0,0 +1,102 @@
+From 1b02e31d0a236e36378ccf5ecf0738d7d91c2508 Mon Sep 17 00:00:00 2001
+From: Jamal Hadi Salim <hadi@cyberus.ca>
+Date: Mon, 22 Feb 2010 11:32:54 +0000
+Subject: [PATCH 1/7] xfrm: introduce basic mark infrastructure
+
+Add basic structuring and accessors for xfrm mark
+
+Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ include/linux/xfrm.h | 13 ++++++++++---
+ include/net/xfrm.h | 22 ++++++++++++++++++++++
+ 2 files changed, 32 insertions(+), 3 deletions(-)
+
+diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h
+index 2d4ec15..3eabe30 100644
+--- a/include/linux/xfrm.h
++++ b/include/linux/xfrm.h
+@@ -269,8 +269,8 @@ enum xfrm_attr_type_t {
+ XFRMA_ALG_COMP, /* struct xfrm_algo */
+ XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */
+ XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */
+- XFRMA_SA,
+- XFRMA_POLICY,
++ XFRMA_SA, /* struct xfrm_usersa_info */
++ XFRMA_POLICY, /*struct xfrm_userpolicy_info */
+ XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */
+ XFRMA_LTIME_VAL,
+ XFRMA_REPLAY_VAL,
+@@ -278,16 +278,23 @@ enum xfrm_attr_type_t {
+ XFRMA_ETIMER_THRESH,
+ XFRMA_SRCADDR, /* xfrm_address_t */
+ XFRMA_COADDR, /* xfrm_address_t */
+- XFRMA_LASTUSED,
++ XFRMA_LASTUSED, /* unsigned long */
+ XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */
+ XFRMA_MIGRATE,
+ XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */
+ XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */
++ XFRMA_ALG_AUTH_TRUNC_PLACE_HOLDER,
++ XFRMA_MARK, /* struct xfrm_mark */
+ __XFRMA_MAX
+
+ #define XFRMA_MAX (__XFRMA_MAX - 1)
+ };
+
++struct xfrm_mark {
++ __u32 v; /* value */
++ __u32 m; /* mask */
++};
++
+ enum xfrm_sadattr_type_t {
+ XFRMA_SAD_UNSPEC,
+ XFRMA_SAD_CNT,
+diff --git a/include/net/xfrm.h b/include/net/xfrm.h
+index 223e90a..ba8d34f 100644
+--- a/include/net/xfrm.h
++++ b/include/net/xfrm.h
+@@ -138,6 +138,7 @@ struct xfrm_state
+
+ struct xfrm_id id;
+ struct xfrm_selector sel;
++ struct xfrm_mark mark;
+
+ u32 genid;
+
+@@ -483,6 +484,7 @@ struct xfrm_policy
+
+ u32 priority;
+ u32 index;
++ struct xfrm_mark mark;
+ struct xfrm_selector selector;
+ struct xfrm_lifetime_cfg lft;
+ struct xfrm_lifetime_cur curlft;
+@@ -1569,4 +1571,24 @@ static inline struct xfrm_state *xfrm_input_state(struct sk_buff *skb)
+ }
+ #endif
+
++static inline int xfrm_mark_get(struct nlattr **attrs, struct xfrm_mark *m)
++{
++ if (attrs[XFRMA_MARK])
++ memcpy(m, nla_data(attrs[XFRMA_MARK]), sizeof(m));
++ else
++ m->v = m->m = 0;
++
++ return m->v & m->m;
++}
++
++static inline int xfrm_mark_put(struct sk_buff *skb, struct xfrm_mark *m)
++{
++ if (m->m | m->v)
++ NLA_PUT(skb, XFRMA_MARK, sizeof(struct xfrm_mark), m);
++ return 0;
++
++nla_put_failure:
++ return -1;
++}
++
+ #endif /* _NET_XFRM_H */
+--
+1.6.3.3
+