Skip to content

Commit

Permalink
ipv4/ip_vti.c: VTI fix post-decryption forwarding
Browse files Browse the repository at this point in the history
With the latest kernel there are two things that must be done post decryption
 so that the packet are forwarded.
 1. Remove the mark from the packet. This will cause the packet to not match
 the ipsec-policy again. However doing this causes the post-decryption check to
 fail also and the packet will get dropped. (cat /proc/net/xfrm_stat).
 2. Remove the sp association in the skbuff so that no policy check is done on
 the packet for VTI tunnels.

Due to #2 above we must now do a security-policy check in the vti rcv path
prior to resetting the mark in the skbuff.

Signed-off-by: Saurabh Mohan <saurabh.mohan@vyatta.com>
Reported-by: Ruben Herold <ruben@puettmann.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Saurabh Mohan authored and David S. Miller committed Nov 15, 2012
1 parent 1ba56fb commit b294200
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions net/ipv4/ip_vti.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,12 +338,17 @@ static int vti_rcv(struct sk_buff *skb)
if (tunnel != NULL) {
struct pcpu_tstats *tstats;

if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
return -1;

tstats = this_cpu_ptr(tunnel->dev->tstats);
u64_stats_update_begin(&tstats->syncp);
tstats->rx_packets++;
tstats->rx_bytes += skb->len;
u64_stats_update_end(&tstats->syncp);

skb->mark = 0;
secpath_reset(skb);
skb->dev = tunnel->dev;
return 1;
}
Expand Down

0 comments on commit b294200

Please sign in to comment.