kernel: fix crash nf_xfrm_me_harder

This commit is contained in:
Chen Minqiang 2019-07-11 22:34:41 +08:00 committed by AmadeusGhost
parent 639dd37fd7
commit ab6b020a65
4 changed files with 24 additions and 2 deletions

View File

@ -0,0 +1,11 @@
--- a/net/netfilter/nf_nat_core.c
+++ b/net/netfilter/nf_nat_core.c
@@ -98,6 +98,8 @@ int nf_xfrm_me_harder(struct net *net, s
return err;
dst = skb_dst(skb);
+ if (!dst)
+ return -EHOSTUNREACH;
if (dst->xfrm)
dst = ((struct xfrm_dst *)dst)->route;
if (!dst_hold_safe(dst))

View File

@ -0,0 +1,11 @@
--- a/net/netfilter/nf_nat_core.c
+++ b/net/netfilter/nf_nat_core.c
@@ -118,6 +118,8 @@ int nf_xfrm_me_harder(struct net *net, s
return err;
dst = skb_dst(skb);
+ if (!dst)
+ return -EHOSTUNREACH;
if (dst->xfrm)
dst = ((struct xfrm_dst *)dst)->route;
if (!dst_hold_safe(dst))

View File

@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
struct dst_entry *dst;
int err;
+ if (skb->dev && !dev_net(skb->dev)->xfrm.policy_count[XFRM_POLICY_OUT])
+ if (!net->xfrm.policy_count[XFRM_POLICY_OUT])
+ return 0;
+
err = xfrm_decode_session(skb, &fl, family);

View File

@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
struct sock *sk = skb->sk;
int err;
+ if (skb->dev && !dev_net(skb->dev)->xfrm.policy_count[XFRM_POLICY_OUT])
+ if (!net->xfrm.policy_count[XFRM_POLICY_OUT])
+ return 0;
+
err = xfrm_decode_session(skb, &fl, family);