mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-10-31 13:17:25 +01:00 
			
		
		
		
	scan: fix invalid read when canceling an ongoing scan
When the survey code was added it neglected to add the same
cancelation logic that existed for the GET_SCAN call, i.e. if
a scan was canceled and there was a pending GET_SURVEY to the
kernel that needs to be canceled, and the request cleaned up.
Fixes: 35808debae ("scan: use GET_SURVEY for SNR calculation in ranking")
			
			
This commit is contained in:
		
							parent
							
								
									91f7253ae1
								
							
						
					
					
						commit
						64d68b4f08
					
				
							
								
								
									
										10
									
								
								src/scan.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/scan.c
									
									
									
									
									
								
							| @ -930,7 +930,7 @@ bool scan_cancel(uint64_t wdev_id, uint32_t id) | ||||
| 	 * Takes care of the following cases: | ||||
| 	 * 1. If TRIGGER_SCAN is in flight | ||||
| 	 * 2. TRIGGER_SCAN sent but bounced with -EBUSY | ||||
| 	 * 3. Scan request is done but GET_SCAN is still pending | ||||
| 	 * 3. Scan request is done but GET_SCAN/GET_SURVEY is still pending | ||||
| 	 * | ||||
| 	 * For case 3, we can easily cancel the command and proceed with the | ||||
| 	 * other pending requests.  For case 1 & 2, the subsequent pending | ||||
| @ -945,6 +945,9 @@ bool scan_cancel(uint64_t wdev_id, uint32_t id) | ||||
| 		if (sc->start_cmd_id) | ||||
| 			l_genl_family_cancel(nl80211, sc->start_cmd_id); | ||||
| 
 | ||||
| 		if (sc->get_survey_cmd_id) | ||||
| 			l_genl_family_cancel(nl80211, sc->get_survey_cmd_id); | ||||
| 
 | ||||
| 		if (sc->get_scan_cmd_id) | ||||
| 			l_genl_family_cancel(nl80211, sc->get_scan_cmd_id); | ||||
| 
 | ||||
| @ -2053,7 +2056,10 @@ static void get_survey_done(void *user_data) | ||||
| 
 | ||||
| 	sc->get_survey_cmd_id = 0; | ||||
| 
 | ||||
| 	get_results(results); | ||||
| 	if (!results->sr->canceled) | ||||
| 		get_results(results); | ||||
| 	else | ||||
| 		get_scan_done(user_data); | ||||
| } | ||||
| 
 | ||||
| static bool scan_survey(struct scan_results *results) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 James Prestwood
						James Prestwood