forked from mirrors/linux
		
	net/smc: postpone sk_refcnt increment in connect()
Same trigger condition as commit86434744. When setsockopt runs in parallel to a connect(), and switch the socket into fallback mode. Then the sk_refcnt is incremented in smc_connect(), but its state stay in SMC_INIT (NOT SMC_ACTIVE). This cause the corresponding sk_refcnt decrement in __smc_release() will not be performed. Fixes:86434744fe("net/smc: add fallback check to connect()") Signed-off-by: liuyacan <liuyacan@corp.netease.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									0a3ad7d323
								
							
						
					
					
						commit
						75c1edf23b
					
				
					 1 changed files with 1 additions and 1 deletions
				
			
		| 
						 | 
					@ -1564,9 +1564,9 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr,
 | 
				
			||||||
	if (rc && rc != -EINPROGRESS)
 | 
						if (rc && rc != -EINPROGRESS)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sock_hold(&smc->sk); /* sock put in passive closing */
 | 
					 | 
				
			||||||
	if (smc->use_fallback)
 | 
						if (smc->use_fallback)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
						sock_hold(&smc->sk); /* sock put in passive closing */
 | 
				
			||||||
	if (flags & O_NONBLOCK) {
 | 
						if (flags & O_NONBLOCK) {
 | 
				
			||||||
		if (queue_work(smc_hs_wq, &smc->connect_work))
 | 
							if (queue_work(smc_hs_wq, &smc->connect_work))
 | 
				
			||||||
			smc->connect_nonblock = 1;
 | 
								smc->connect_nonblock = 1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue