ipv4: recompile ip options in ipv4_link_failure
Recompile IP options since IPCB may not be valid anymore when ipv4_link_failure is called from arp_error_report. Refer to the commit3da1ed7ac3
("net: avoid use IPCB in cipso_v4_error") and the commit before that (9ef6b42ad6
) for a similar issue. Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9e550f0153
commit
ed0de45a10
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user