diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c index 28ae2048b93aaab597b5115ffb0f0cc0bc7675d5..cd6be736e19fcb06aa68f42e07eb51c5ce2c10d2 100644 --- a/net/ipv4/xfrm4_output.c +++ b/net/ipv4/xfrm4_output.c @@ -97,6 +97,7 @@ static int __xfrm4_output(struct net *net, struct sock *sk, struct sk_buff *skb) int xfrm4_output(struct sock *sk, struct sk_buff *skb) { struct net *net = dev_net(skb_dst(skb)->dev); + return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, net, sk, skb, NULL, skb_dst(skb)->dev, __xfrm4_output, diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index d8d68e81d123955614222ec7e15fff066ea353d5..291a07be5dfbe3be2834cd977eea288e67832628 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -136,6 +136,7 @@ int ip6_output(struct sock *sk, struct sk_buff *skb) struct net_device *dev = skb_dst(skb)->dev; struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); struct net *net = dev_net(dev); + if (unlikely(idev->cnf.disable_ipv6)) { IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS); kfree_skb(skb); diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c index 68a996f8a04430c314cad6084335e7cce4429100..0c3e9ffcf23122b213b4c310838e0ab7dd0f748e 100644 --- a/net/ipv6/xfrm6_output.c +++ b/net/ipv6/xfrm6_output.c @@ -169,6 +169,7 @@ static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb) int xfrm6_output(struct sock *sk, struct sk_buff *skb) { struct net *net = dev_net(skb_dst(skb)->dev); + return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, net, sk, skb, NULL, skb_dst(skb)->dev, __xfrm6_output, diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index 61ba99f61dc84ec6511bf1e82bf670520eb0002f..c48a4b8582bb0970626a8c073b6068d8c5bddc19 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c @@ -132,6 +132,7 @@ static int xfrm_output_one(struct sk_buff *skb, int err) int xfrm_output_resume(struct sk_buff *skb, int err) { struct net *net = xs_net(skb_dst(skb)->xfrm); + while (likely((err = xfrm_output_one(skb, err)) == 0)) { nf_reset(skb);