aboutsummaryrefslogtreecommitdiffstats
path: root/net/xfrm/xfrm_input.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-12-18 14:43:26 -0500
committerDavid S. Miller <davem@davemloft.net>2018-12-18 14:43:26 -0500
commitfde9cd69a59f7ee405c87fff84bc08fa2a550e47 (patch)
tree886cc9496c272128a0b27b1b23cf6f14c292e209 /net/xfrm/xfrm_input.c
parent8d013b7910599a06405fb37d6def4dde7cab7984 (diff)
parent4a135e538962cb00a9667c82e7d2b9e4d7cd7177 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
Steffen Klassert says: ==================== pull request (net): ipsec 2018-12-18 1) Fix error return code in xfrm_output_one() when no dst_entry is attached to the skb. From Wei Yongjun. 2) The xfrm state hash bucket count reported to userspace is off by one. Fix from Benjamin Poirier. 3) Fix NULL pointer dereference in xfrm_input when skb_dst_force clears the dst_entry. 4) Fix freeing of xfrm states on acquire. We use a dedicated slab cache for the xfrm states now, so free it properly with kmem_cache_free. From Mathias Krause. Please pull or let me know if there are problems. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm/xfrm_input.c')
-rw-r--r--net/xfrm/xfrm_input.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index 684c0bc01e2c..d5635908587f 100644
--- a/net/xfrm/xfrm_input.c
+++ b/net/xfrm/xfrm_input.c
@@ -346,6 +346,12 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
346 346
347 skb->sp->xvec[skb->sp->len++] = x; 347 skb->sp->xvec[skb->sp->len++] = x;
348 348
349 skb_dst_force(skb);
350 if (!skb_dst(skb)) {
351 XFRM_INC_STATS(net, LINUX_MIB_XFRMINERROR);
352 goto drop;
353 }
354
349lock: 355lock:
350 spin_lock(&x->lock); 356 spin_lock(&x->lock);
351 357
@@ -385,7 +391,6 @@ lock:
385 XFRM_SKB_CB(skb)->seq.input.low = seq; 391 XFRM_SKB_CB(skb)->seq.input.low = seq;
386 XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; 392 XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
387 393
388 skb_dst_force(skb);
389 dev_hold(skb->dev); 394 dev_hold(skb->dev);
390 395
391 if (crypto_done) 396 if (crypto_done)