ipv6: handle Redirect ICMP Message with no Redirected Header option
Subsystems (3)
PATCH v4 1/1 ipv6: handle Redirect ICMP Message with no Redirected Header option
From: Duan Jiong <[email protected]>
rfc 4861 says the Redirected Header option is optional, so the kernel should not drop the Redirect Message that has no Redirected Header option. In this patch, the function ip6_redirect_no_header() is introduced to deal with that condition.
---
Changes for v4:
1. Remove symbol export
include/net/ip6_route.h | 2 ++ net/ipv6/ndisc.c | 4 +++- net/ipv6/route.c | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletions(-)
include/net/ip6_route.h +2 -0
@@ -135,6 +135,8 @@ extern void ip6_update_pmtu(struct sk_buff *skb, struct net *net, __be32 mtu,extern void ip6_sk_update_pmtu (struct sk_buff *skb,struct sock *sk,__be32 mtu);extern void ip6_redirect (struct sk_buff *skb,struct net *net,int oif,u32 mark); +extern void ip6_redirect_no_header (struct sk_buff *skb,struct net *net,int oif, +u32 mark);extern void ip6_sk_redirect (struct sk_buff *skb,struct sock *sk);struct netlink_callback ;
net/ipv6/ndisc.c +3 -1
@@ -1369,8 +1369,10 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)if (!ndisc_parse_options (msg->opt, ndoptlen, &ndopts))return ; -if (!ndopts.nd_opts_rh) +if (!ndopts.nd_opts_rh) { +ip6_redirect_no_header (skb,dev_net (skb->dev),0 ,0 );return ; + } hdr = (u8 *)ndopts.nd_opts_rh; hdr +=8 ;
net/ipv6/route.c +21 -0
@@ -1178,6 +1178,27 @@ void ip6_redirect(struct sk_buff *skb, struct net *net, int oif, u32 mark) }EXPORT_SYMBOL_GPL (ip6_redirect); +void ip6_redirect_no_header (struct sk_buff *skb,struct net *net,int oif, +u32 mark) +{ +const struct ipv6hdr *iph =ipv6_hdr (skb); +const struct rd_msg *msg = (struct rd_msg *)icmp6_hdr (skb); +struct dst_entry *dst; +struct flowi6 fl6; + +memset (&fl6,0 ,sizeof (fl6)); + fl6.flowi6_oif = oif; + fl6.flowi6_mark = mark; + fl6.flowi6_flags =0 ; + fl6.daddr = msg->dest; + fl6.saddr = iph->daddr; + + dst =ip6_route_output (net,NULL , &fl6); +if (!dst->error) +rt6_do_redirect (dst,NULL , skb); +dst_release (dst); +} +void ip6_sk_redirect (struct sk_buff *skb,struct sock *sk) {ip6_redirect (skb,sock_net (sk), sk->sk_bound_dev_if, sk->sk_mark);
Signature · 1 line
1.7.3.1
Quoted 9 lines · Duan Jiong
From: Duan Jiong <[email protected]>
rfc 4861 says the Redirected Header option is optional, so the kernel should not drop the Redirect Message that has no Redirected Header option. In this patch, the function
ip6_redirect_no_header()is introduced to deal with that condition.Signed-off-by Duan Jiong <[email protected]>
Sorry for not catching the EXPORT_SYMBOL_GPL before.
Thanks,
Hannes
From: Hannes Frederic Sowa <[email protected]>
Date: Thu, 22 Aug 2013 13:48:03 +0200
Quoted 9 lines · Duan Jiong
Quoted 8 lines
From: Duan Jiong <[email protected]>
rfc 4861 says the Redirected Header option is optional, so the kernel should not drop the Redirect Message that has no Redirected Header option. In this patch, the function
ip6_redirect_no_header()is introduced to deal with that condition.
Quoted 3 lines
Quoted 1 line
Signed-off-by Duan Jiong <[email protected]>
Applied, thanks.