lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 26 Dec 2019 14:51:30 -0800 From: Tom Herbert <tom@...bertland.com> To: davem@...emloft.net, netdev@...r.kernel.org, simon.horman@...ronome.com, willemdebruijn.kernel@...il.com Cc: Tom Herbert <tom@...ntonium.net>, Tom Herbert <tom@...bertland.com> Subject: [PATCH v8 net-next 1/9] ipeh: Fix destopts counters on drop From: Tom Herbert <tom@...ntonium.net> Bump IPSTATS_MIB_INHDRERRORS when extension header limit is exceeded. Only take net from skb->dev, don't use dst for counters. Signed-off-by: Tom Herbert <tom@...bertland.com> --- net/ipv6/exthdrs.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index ab5add0..e7eacc4 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c @@ -276,28 +276,25 @@ static const struct tlvtype_proc tlvprocdestopt_lst[] = { static int ipv6_destopt_rcv(struct sk_buff *skb) { - struct inet6_dev *idev = __in6_dev_get(skb->dev); struct inet6_skb_parm *opt = IP6CB(skb); #if IS_ENABLED(CONFIG_IPV6_MIP6) __u16 dstbuf; #endif - struct dst_entry *dst = skb_dst(skb); struct net *net = dev_net(skb->dev); int extlen; if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || !pskb_may_pull(skb, (skb_transport_offset(skb) + ((skb_transport_header(skb)[1] + 1) << 3)))) { - __IP6_INC_STATS(dev_net(dst->dev), idev, - IPSTATS_MIB_INHDRERRORS); -fail_and_free: kfree_skb(skb); - return -1; + goto fail; } extlen = (skb_transport_header(skb)[1] + 1) << 3; - if (extlen > net->ipv6.sysctl.max_dst_opts_len) - goto fail_and_free; + if (extlen > net->ipv6.sysctl.max_dst_opts_len) { + kfree_skb(skb); + goto fail; + } opt->lastopt = opt->dst1 = skb_network_header_len(skb); #if IS_ENABLED(CONFIG_IPV6_MIP6) @@ -316,7 +313,9 @@ static int ipv6_destopt_rcv(struct sk_buff *skb) return 1; } - __IP6_INC_STATS(net, idev, IPSTATS_MIB_INHDRERRORS); +fail: + __IP6_INC_STATS(dev_net(skb->dev), __in6_dev_get(skb->dev), + IPSTATS_MIB_INHDRERRORS); return -1; } -- 2.7.4
Powered by blists - more mailing lists