forked from mirrors/linux
		
	geneve: should not call rt6_lookup() when ipv6 was disabled
When we add a new GENEVE device with IPv6 remote, checking only for
IS_ENABLED(CONFIG_IPV6) is not enough as we may disable IPv6 in the
kernel command line (ipv6.disable=1), and calling rt6_lookup() would
cause a NULL pointer dereference.
v2:
- don't mix declarations and code (reported by Stefano Brivio, Eric Dumazet)
- there's no need to use in6_dev_get() as we only need to check that
  idev exists (reported by David Ahern). This is under RTNL, so we can
  simply use __in6_dev_get() instead (Stefano, Eric).
Reported-by: Jianlin Shi <jishi@redhat.com>
Fixes: c40e89fd35 ("geneve: configure MTU based on a lower device")
Cc: Alexey Kodanev <alexey.kodanev@oracle.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									e8c32c32b4
								
							
						
					
					
						commit
						c0a47e44c0
					
				
					 1 changed files with 7 additions and 3 deletions
				
			
		| 
						 | 
					@ -1512,9 +1512,13 @@ static void geneve_link_config(struct net_device *dev,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#if IS_ENABLED(CONFIG_IPV6)
 | 
					#if IS_ENABLED(CONFIG_IPV6)
 | 
				
			||||||
	case AF_INET6: {
 | 
						case AF_INET6: {
 | 
				
			||||||
		struct rt6_info *rt = rt6_lookup(geneve->net,
 | 
							struct rt6_info *rt;
 | 
				
			||||||
						 &info->key.u.ipv6.dst, NULL, 0,
 | 
					
 | 
				
			||||||
						 NULL, 0);
 | 
							if (!__in6_dev_get(dev))
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0,
 | 
				
			||||||
 | 
									NULL, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (rt && rt->dst.dev)
 | 
							if (rt && rt->dst.dev)
 | 
				
			||||||
			ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV6_HLEN;
 | 
								ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV6_HLEN;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue