浏览代码

[IPSEC]: Kill unused decap state argument

This patch removes the decap_state argument from the xfrm input hook.
Previously this function allowed the input hook to share state with
the post_input hook.  The latter has since been removed.

The only purpose for it now is to check the encap type.  However, it
is easier and better to move the encap type check to the generic
xfrm_rcv function.  This allows us to get rid of the decap state
argument altogether.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Herbert Xu 19 年之前
父节点
当前提交
e695633e21
共有 11 个文件被更改,包括 14 次插入15 次删除
  1. 1 1
      include/net/xfrm.h
  2. 1 1
      net/ipv4/ah4.c
  3. 1 4
      net/ipv4/esp4.c
  4. 1 2
      net/ipv4/ipcomp.c
  5. 4 1
      net/ipv4/xfrm4_input.c
  6. 1 1
      net/ipv4/xfrm4_tunnel.c
  7. 1 1
      net/ipv6/ah6.c
  8. 1 1
      net/ipv6/esp6.c
  9. 1 1
      net/ipv6/ipcomp6.c
  10. 1 1
      net/ipv6/xfrm6_input.c
  11. 1 1
      net/ipv6/xfrm6_tunnel.c

+ 1 - 1
include/net/xfrm.h

@@ -251,7 +251,7 @@ struct xfrm_type
 
 
 	int			(*init_state)(struct xfrm_state *x);
 	int			(*init_state)(struct xfrm_state *x);
 	void			(*destructor)(struct xfrm_state *);
 	void			(*destructor)(struct xfrm_state *);
-	int			(*input)(struct xfrm_state *, struct xfrm_decap_state *, struct sk_buff *skb);
+	int			(*input)(struct xfrm_state *, struct sk_buff *skb);
 	int			(*output)(struct xfrm_state *, struct sk_buff *pskb);
 	int			(*output)(struct xfrm_state *, struct sk_buff *pskb);
 	/* Estimate maximal size of result of transformation of a dgram */
 	/* Estimate maximal size of result of transformation of a dgram */
 	u32			(*get_max_size)(struct xfrm_state *, int size);
 	u32			(*get_max_size)(struct xfrm_state *, int size);

+ 1 - 1
net/ipv4/ah4.c

@@ -116,7 +116,7 @@ error:
 	return err;
 	return err;
 }
 }
 
 
-static int ah_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	int ah_hlen;
 	int ah_hlen;
 	struct iphdr *iph;
 	struct iphdr *iph;

+ 1 - 4
net/ipv4/esp4.c

@@ -133,7 +133,7 @@ error:
  * expensive, so we only support truncated data, which is the recommended
  * expensive, so we only support truncated data, which is the recommended
  * and common case.
  * and common case.
  */
  */
-static int esp_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	struct iphdr *iph;
 	struct iphdr *iph;
 	struct ip_esp_hdr *esph;
 	struct ip_esp_hdr *esph;
@@ -208,9 +208,6 @@ static int esp_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struc
 		struct xfrm_encap_tmpl *encap = x->encap;
 		struct xfrm_encap_tmpl *encap = x->encap;
 		struct udphdr *uh;
 		struct udphdr *uh;
 
 
-		if (encap->encap_type != decap->decap_type)
-			goto out;
-
 		uh = (struct udphdr *)(iph + 1);
 		uh = (struct udphdr *)(iph + 1);
 		encap_len = (void*)esph - (void*)uh;
 		encap_len = (void*)esph - (void*)uh;
 
 

+ 1 - 2
net/ipv4/ipcomp.c

@@ -81,8 +81,7 @@ out:
 	return err;
 	return err;
 }
 }
 
 
-static int ipcomp_input(struct xfrm_state *x,
-                        struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int ipcomp_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	u8 nexthdr;
 	u8 nexthdr;
 	int err = 0;
 	int err = 0;

+ 4 - 1
net/ipv4/xfrm4_input.c

@@ -90,6 +90,9 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
 		if (unlikely(x->km.state != XFRM_STATE_VALID))
 		if (unlikely(x->km.state != XFRM_STATE_VALID))
 			goto drop_unlock;
 			goto drop_unlock;
 
 
+		if (x->encap->encap_type != encap_type)
+			goto drop_unlock;
+
 		if (x->props.replay_window && xfrm_replay_check(x, seq))
 		if (x->props.replay_window && xfrm_replay_check(x, seq))
 			goto drop_unlock;
 			goto drop_unlock;
 
 
@@ -97,7 +100,7 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
 			goto drop_unlock;
 			goto drop_unlock;
 
 
 		xfrm_vec[xfrm_nr].decap.decap_type = encap_type;
 		xfrm_vec[xfrm_nr].decap.decap_type = encap_type;
-		if (x->type->input(x, &(xfrm_vec[xfrm_nr].decap), skb))
+		if (x->type->input(x, skb))
 			goto drop_unlock;
 			goto drop_unlock;
 
 
 		/* only the first xfrm gets the encap type */
 		/* only the first xfrm gets the encap type */

+ 1 - 1
net/ipv4/xfrm4_tunnel.c

@@ -21,7 +21,7 @@ static int ipip_output(struct xfrm_state *x, struct sk_buff *skb)
 	return 0;
 	return 0;
 }
 }
 
 
-static int ipip_xfrm_rcv(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int ipip_xfrm_rcv(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	return 0;
 	return 0;
 }
 }

+ 1 - 1
net/ipv6/ah6.c

@@ -229,7 +229,7 @@ error:
 	return err;
 	return err;
 }
 }
 
 
-static int ah6_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	/*
 	/*
 	 * Before process AH
 	 * Before process AH

+ 1 - 1
net/ipv6/esp6.c

@@ -130,7 +130,7 @@ error:
 	return err;
 	return err;
 }
 }
 
 
-static int esp6_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	struct ipv6hdr *iph;
 	struct ipv6hdr *iph;
 	struct ipv6_esp_hdr *esph;
 	struct ipv6_esp_hdr *esph;

+ 1 - 1
net/ipv6/ipcomp6.c

@@ -63,7 +63,7 @@ static void **ipcomp6_scratches;
 static int ipcomp6_scratch_users;
 static int ipcomp6_scratch_users;
 static LIST_HEAD(ipcomp6_tfms_list);
 static LIST_HEAD(ipcomp6_tfms_list);
 
 
-static int ipcomp6_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int ipcomp6_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	int err = 0;
 	int err = 0;
 	u8 nexthdr = 0;
 	u8 nexthdr = 0;

+ 1 - 1
net/ipv6/xfrm6_input.c

@@ -65,7 +65,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi)
 		if (xfrm_state_check_expire(x))
 		if (xfrm_state_check_expire(x))
 			goto drop_unlock;
 			goto drop_unlock;
 
 
-		nexthdr = x->type->input(x, &(xfrm_vec[xfrm_nr].decap), skb);
+		nexthdr = x->type->input(x, skb);
 		if (nexthdr <= 0)
 		if (nexthdr <= 0)
 			goto drop_unlock;
 			goto drop_unlock;
 
 

+ 1 - 1
net/ipv6/xfrm6_tunnel.c

@@ -351,7 +351,7 @@ static int xfrm6_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
 	return 0;
 	return 0;
 }
 }
 
 
-static int xfrm6_tunnel_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb)
+static int xfrm6_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
 {
 {
 	return 0;
 	return 0;
 }
 }