mirror of
				https://github.com/3proxy/3proxy.git
				synced 2025-11-04 07:42:39 +08:00 
			
		
		
		
	Ffix use-after-free in freeparam
This commit is contained in:
		
							parent
							
								
									a592f07783
								
							
						
					
					
						commit
						35d1de6f5e
					
				@ -1031,6 +1031,22 @@ void freeparam(struct clientparam * param) {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if(param->clibuf) myfree(param->clibuf);
 | 
						if(param->clibuf) myfree(param->clibuf);
 | 
				
			||||||
	if(param->srvbuf) myfree(param->srvbuf);
 | 
						if(param->srvbuf) myfree(param->srvbuf);
 | 
				
			||||||
 | 
						if(param->ctrlsocksrv != INVALID_SOCKET && param->ctrlsocksrv != param->remsock) {
 | 
				
			||||||
 | 
							param->srv->so._shutdown(param->sostate, param->ctrlsocksrv, SHUT_RDWR);
 | 
				
			||||||
 | 
							param->srv->so._closesocket(param->sostate, param->ctrlsocksrv);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if(param->ctrlsock != INVALID_SOCKET && param->ctrlsock != param->clisock) {
 | 
				
			||||||
 | 
							param->srv->so._shutdown(param->sostate, param->ctrlsock, SHUT_RDWR);
 | 
				
			||||||
 | 
							param->srv->so._closesocket(param->sostate, param->ctrlsock);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if(param->remsock != INVALID_SOCKET) {
 | 
				
			||||||
 | 
							param->srv->so._shutdown(param->sostate, param->remsock, SHUT_RDWR);
 | 
				
			||||||
 | 
							param->srv->so._closesocket(param->sostate, param->remsock);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if(param->clisock != INVALID_SOCKET) {
 | 
				
			||||||
 | 
							param->srv->so._shutdown(param->sostate, param->clisock, SHUT_RDWR);
 | 
				
			||||||
 | 
							param->srv->so._closesocket(param->sostate, param->clisock);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if(param->srv){
 | 
						if(param->srv){
 | 
				
			||||||
		if(param->srv->so.freefunc) param->srv->so.freefunc(param->sostate);
 | 
							if(param->srv->so.freefunc) param->srv->so.freefunc(param->sostate);
 | 
				
			||||||
		pthread_mutex_lock(¶m->srv->counter_mutex);
 | 
							pthread_mutex_lock(¶m->srv->counter_mutex);
 | 
				
			||||||
@ -1050,22 +1066,6 @@ void freeparam(struct clientparam * param) {
 | 
				
			|||||||
	if(param->password) myfree(param->password);
 | 
						if(param->password) myfree(param->password);
 | 
				
			||||||
	if(param->extusername) myfree(param->extusername);
 | 
						if(param->extusername) myfree(param->extusername);
 | 
				
			||||||
	if(param->extpassword) myfree(param->extpassword);
 | 
						if(param->extpassword) myfree(param->extpassword);
 | 
				
			||||||
	if(param->ctrlsocksrv != INVALID_SOCKET && param->ctrlsocksrv != param->remsock) {
 | 
					 | 
				
			||||||
		param->srv->so._shutdown(param->sostate, param->ctrlsocksrv, SHUT_RDWR);
 | 
					 | 
				
			||||||
		param->srv->so._closesocket(param->sostate, param->ctrlsocksrv);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(param->ctrlsock != INVALID_SOCKET && param->ctrlsock != param->clisock) {
 | 
					 | 
				
			||||||
		param->srv->so._shutdown(param->sostate, param->ctrlsock, SHUT_RDWR);
 | 
					 | 
				
			||||||
		param->srv->so._closesocket(param->sostate, param->ctrlsock);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(param->remsock != INVALID_SOCKET) {
 | 
					 | 
				
			||||||
		param->srv->so._shutdown(param->sostate, param->remsock, SHUT_RDWR);
 | 
					 | 
				
			||||||
		param->srv->so._closesocket(param->sostate, param->remsock);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(param->clisock != INVALID_SOCKET) {
 | 
					 | 
				
			||||||
		param->srv->so._shutdown(param->sostate, param->clisock, SHUT_RDWR);
 | 
					 | 
				
			||||||
		param->srv->so._closesocket(param->sostate, param->clisock);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	myfree(param);
 | 
						myfree(param);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user