forked from mirrors/linux
		
	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
					
				
					 1 changed files with 9 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue