mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	[IPV4]: Fix "ipOutNoRoutes" counter error for TCP and UDP
Signed-off-by: Wei Dong <weidong@cn.fujitsu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									4fcd6b9916
								
							
						
					
					
						commit
						584bdf8cbd
					
				
					 3 changed files with 13 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -50,8 +50,12 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
 | 
			
		|||
			       RT_CONN_FLAGS(sk), oif,
 | 
			
		||||
			       sk->sk_protocol,
 | 
			
		||||
			       inet->sport, usin->sin_port, sk, 1);
 | 
			
		||||
	if (err)
 | 
			
		||||
	if (err) {
 | 
			
		||||
		if (err == -ENETUNREACH)
 | 
			
		||||
			IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
 | 
			
		||||
		return err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) {
 | 
			
		||||
		ip_rt_put(rt);
 | 
			
		||||
		return -EACCES;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -192,8 +192,11 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
 | 
			
		|||
			       RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
 | 
			
		||||
			       IPPROTO_TCP,
 | 
			
		||||
			       inet->sport, usin->sin_port, sk, 1);
 | 
			
		||||
	if (tmp < 0)
 | 
			
		||||
	if (tmp < 0) {
 | 
			
		||||
		if (tmp == -ENETUNREACH)
 | 
			
		||||
			IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
 | 
			
		||||
		return tmp;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) {
 | 
			
		||||
		ip_rt_put(rt);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -722,8 +722,11 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 | 
			
		|||
						 .dport = dport } } };
 | 
			
		||||
		security_sk_classify_flow(sk, &fl);
 | 
			
		||||
		err = ip_route_output_flow(&rt, &fl, sk, 1);
 | 
			
		||||
		if (err)
 | 
			
		||||
		if (err) {
 | 
			
		||||
			if (err == -ENETUNREACH)
 | 
			
		||||
				IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
 | 
			
		||||
			goto out;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = -EACCES;
 | 
			
		||||
		if ((rt->rt_flags & RTCF_BROADCAST) &&
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue