mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-10-30 03:47:23 +01:00 
			
		
		
		
	nl80211util: Ensure all entries are parsed
The current logic did not make sure that each entry provided was actually parsed. Also add a sanity check to make sure that no duplicate parsing occurs.
This commit is contained in:
		
							parent
							
								
									d577036879
								
							
						
					
					
						commit
						3b937424db
					
				| @ -110,6 +110,7 @@ struct attr_entry { | ||||
| 	uint16_t type; | ||||
| 	void *data; | ||||
| 	attr_handler handler; | ||||
| 	bool present : 1; | ||||
| }; | ||||
| 
 | ||||
| int nl80211_parse_attrs(struct l_genl_msg *msg, int tag, ...) | ||||
| @ -158,10 +159,28 @@ int nl80211_parse_attrs(struct l_genl_msg *msg, int tag, ...) | ||||
| 		if (!e) | ||||
| 			continue; | ||||
| 
 | ||||
| 		if (entry->present) { | ||||
| 			ret = -EALREADY; | ||||
| 			goto done; | ||||
| 		} | ||||
| 
 | ||||
| 		if (!entry->handler(data, len, entry->data)) { | ||||
| 			ret = -EINVAL; | ||||
| 			goto done; | ||||
| 		} | ||||
| 
 | ||||
| 		entry->present = true; | ||||
| 	} | ||||
| 
 | ||||
| 	ret = -ENOENT; | ||||
| 
 | ||||
| 	for (e = l_queue_get_entries(entries); e; e = e->next) { | ||||
| 		entry = e->data; | ||||
| 
 | ||||
| 		if (entry->present) | ||||
| 			continue; | ||||
| 
 | ||||
| 		goto done; | ||||
| 	} | ||||
| 
 | ||||
| 	ret = 0; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Denis Kenzior
						Denis Kenzior