Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39f69c6f authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by David S. Miller
Browse files

[SK_BUFF] xfrm: Use skb_set_mac_header in the memmove cases

parent 48d49d0c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
{
	struct iphdr *iph = skb->nh.iph;
	const unsigned char *old_mac;
	int err = -EINVAL;

	switch (iph->protocol){
@@ -125,8 +126,9 @@ static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
		skb->protocol = htons(ETH_P_IPV6);
	}
#endif
	skb->mac.raw = memmove(skb->data - skb->mac_len,
			       skb->mac.raw, skb->mac_len);
	old_mac = skb->mac.raw;
	skb_set_mac_header(skb, -skb->mac_len);
	memmove(skb->mac.raw, old_mac, skb->mac_len);
	skb->nh.raw = skb->data;
	err = 0;

+4 −2
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb)
static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb)
{
	struct ipv6hdr *ip6h;
	const unsigned char *old_mac;
	int size = sizeof(struct ipv6hdr);
	int err = -EINVAL;

@@ -69,8 +70,9 @@ static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb)
	memmove(skb->data, skb->nh.raw, size);
	skb->nh.raw = skb->data;

	skb->mac.raw = memmove(skb->data - skb->mac_len,
			       skb->mac.raw, skb->mac_len);
	old_mac = skb->mac.raw;
	skb_set_mac_header(skb, -skb->mac_len);
	memmove(skb->mac.raw, old_mac, skb->mac_len);

	ip6h = skb->nh.ipv6h;
	ip6h->payload_len = htons(skb->len - size);
+4 −2
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ static int xfrm6_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
static int xfrm6_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
{
	int err = -EINVAL;
	const unsigned char *old_mac;

	if (skb->nh.raw[IP6CB(skb)->nhoff] != IPPROTO_IPV6
	    && skb->nh.raw[IP6CB(skb)->nhoff] != IPPROTO_IPIP)
@@ -107,8 +108,9 @@ static int xfrm6_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
			ip6ip_ecn_decapsulate(skb);
		skb->protocol = htons(ETH_P_IP);
	}
	skb->mac.raw = memmove(skb->data - skb->mac_len,
			       skb->mac.raw, skb->mac_len);
	old_mac = skb->mac.raw;
	skb_set_mac_header(skb, -skb->mac_len);
	memmove(skb->mac.raw, old_mac, skb->mac_len);
	skb->nh.raw = skb->data;
	err = 0;