Message ID | 20190412201927.7615-1-ssuryaextr@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] ipv4: recompile ip options in ipv4_link_failure | expand |
From: Stephen Suryaputra <ssuryaextr@gmail.com> Date: Fri, 12 Apr 2019 16:19:27 -0400 > Recompile IP options since IPCB may not be valid anymore when > ipv4_link_failure is called from arp_error_report. > > Refer to the commit 3da1ed7ac398 ("net: avoid use IPCB in cipso_v4_error") > and the commit before that (9ef6b42ad6fd) for a similar issue. > > Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> Applied.
On 04/12/2019 05:24 PM, David Miller wrote: > From: Stephen Suryaputra <ssuryaextr@gmail.com> > Date: Fri, 12 Apr 2019 16:19:27 -0400 > >> Recompile IP options since IPCB may not be valid anymore when >> ipv4_link_failure is called from arp_error_report. >> >> Refer to the commit 3da1ed7ac398 ("net: avoid use IPCB in cipso_v4_error") >> and the commit before that (9ef6b42ad6fd) for a similar issue. >> >> Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> > > Applied. > I believe __ip_options_compile() needs to be called from rcu_read_lock() I will send a fix.
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index a5da63e5faa2..0206789bc2b7 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1186,8 +1186,16 @@ static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie) static void ipv4_link_failure(struct sk_buff *skb) { struct rtable *rt; + struct ip_options opt; - icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0); + /* Recompile ip options since IPCB may not be valid anymore. + */ + memset(&opt, 0, sizeof(opt)); + opt.optlen = ip_hdr(skb)->ihl*4 - sizeof(struct iphdr); + if (__ip_options_compile(dev_net(skb->dev), &opt, skb, NULL)) + return; + + __icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0, &opt); rt = skb_rtable(skb); if (rt)
Recompile IP options since IPCB may not be valid anymore when ipv4_link_failure is called from arp_error_report. Refer to the commit 3da1ed7ac398 ("net: avoid use IPCB in cipso_v4_error") and the commit before that (9ef6b42ad6fd) for a similar issue. Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> --- net/ipv4/route.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)