ipv6: Change skb->data before using icmpv6_notify() to propagate redirect
Subsystems (3)
PATCH v3 1/1 ipv6: Change skb->data before using icmpv6_notify() to propagate redirect
In function ndisc_redirect_rcv(), the skb->data points to the transport header, but function icmpv6_notify() need the skb->data points to the inner IP packet. So before using icmpv6_notify() to propagate redirect, change skb->data to point the inner IP packet that triggered the sending of the Redirect, and introduce struct rd_msg to make it easy.
--- include/net/ndisc.h | 7 +++++++ net/ipv6/ndisc.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-)
include/net/ndisc.h +7 -0
@@ -78,6 +78,13 @@ struct ra_msg {__be32 retrans_timer; }; +struct rd_msg { +struct icmp6hdr icmph; +struct in6_addr target; +struct in6_addr dest; +__u8 opt[0 ]; +}; +struct nd_opt_hdr {__u8 nd_opt_type;__u8 nd_opt_len;
net/ipv6/ndisc.c +17 -0
@@ -1314,6 +1314,12 @@ out:static void ndisc_redirect_rcv (struct sk_buff *skb) { +u8 *hdr; +struct ndisc_options ndopts; +struct rd_msg *msg = (struct rd_msg *)skb_transport_header (skb); +u32 ndoptlen = skb->tail - (skb->transport_header + + offsetof(struct rd_msg , opt)); +#ifdef CONFIG_IPV6_NDISC_NODETYPE switch (skb->ndisc_nodetype) {case NDISC_NODETYPE_HOST :
@@ -1330,6 +1336,17 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)return ; } +if (!ndisc_parse_options (msg->opt, ndoptlen, &ndopts)) +return ; + +if (!ndopts.nd_opts_rh) +return ; + + hdr = (u8 *)ndopts.nd_opts_rh; + hdr +=8 ; +if (!pskb_pull (skb, hdr -skb_transport_header (skb))) +return ; +icmpv6_notify (skb,NDISC_REDIRECT ,0 ,0 ); }
Signature · 1 line
1.7.1
David Miller
maintainerFrom: Duan Jiong <[email protected]>
Date: Fri, 14 Dec 2012 20:59:59 +0800
Quoted 8 lines
In function
ndisc_redirect_rcv(), theskb->datapoints to the transport header, but functionicmpv6_notify()need theskb->datapoints to the inner IP packet. So before usingicmpv6_notify()to propagate redirect, changeskb->datato point the inner IP packet that triggered the sending of the Redirect, and introduce structrd_msgto make it easy.Signed-off-by Duan Jiong <[email protected]>
Applied and queued up for -stable.