mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-30 18:05:48 +01:00 
			
		
		
		
	efi_loader: check parameters of GetMemoryMap
Check the parameters of boottime service GetMemoryMap(). Return EFI_INVALID_PARAMETER where required by the UEFI spec. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
		
				
					committed by
					
						 Alexander Graf
						Alexander Graf
					
				
			
			
				
	
			
			
			
						parent
						
							4d5e071ee0
						
					
				
				
					commit
					8e835554b3
				
			| @@ -453,6 +453,9 @@ efi_status_t efi_get_memory_map(efi_uintn_t *memory_map_size, | |||||||
| 	struct list_head *lhandle; | 	struct list_head *lhandle; | ||||||
| 	efi_uintn_t provided_map_size = *memory_map_size; | 	efi_uintn_t provided_map_size = *memory_map_size; | ||||||
|  |  | ||||||
|  | 	if (!memory_map_size) | ||||||
|  | 		return EFI_INVALID_PARAMETER; | ||||||
|  |  | ||||||
| 	list_for_each(lhandle, &efi_mem) | 	list_for_each(lhandle, &efi_mem) | ||||||
| 		map_entries++; | 		map_entries++; | ||||||
|  |  | ||||||
| @@ -463,6 +466,9 @@ efi_status_t efi_get_memory_map(efi_uintn_t *memory_map_size, | |||||||
| 	if (provided_map_size < map_size) | 	if (provided_map_size < map_size) | ||||||
| 		return EFI_BUFFER_TOO_SMALL; | 		return EFI_BUFFER_TOO_SMALL; | ||||||
|  |  | ||||||
|  | 	if (!memory_map) | ||||||
|  | 		return EFI_INVALID_PARAMETER; | ||||||
|  |  | ||||||
| 	if (descriptor_size) | 	if (descriptor_size) | ||||||
| 		*descriptor_size = sizeof(struct efi_mem_desc); | 		*descriptor_size = sizeof(struct efi_mem_desc); | ||||||
|  |  | ||||||
| @@ -470,7 +476,6 @@ efi_status_t efi_get_memory_map(efi_uintn_t *memory_map_size, | |||||||
| 		*descriptor_version = EFI_MEMORY_DESCRIPTOR_VERSION; | 		*descriptor_version = EFI_MEMORY_DESCRIPTOR_VERSION; | ||||||
|  |  | ||||||
| 	/* Copy list into array */ | 	/* Copy list into array */ | ||||||
| 	if (memory_map) { |  | ||||||
| 	/* Return the list in ascending order */ | 	/* Return the list in ascending order */ | ||||||
| 	memory_map = &memory_map[map_entries - 1]; | 	memory_map = &memory_map[map_entries - 1]; | ||||||
| 	list_for_each(lhandle, &efi_mem) { | 	list_for_each(lhandle, &efi_mem) { | ||||||
| @@ -480,8 +485,8 @@ efi_status_t efi_get_memory_map(efi_uintn_t *memory_map_size, | |||||||
| 		*memory_map = lmem->desc; | 		*memory_map = lmem->desc; | ||||||
| 		memory_map--; | 		memory_map--; | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
|  |  | ||||||
|  | 	if (map_key) | ||||||
| 		*map_key = 0; | 		*map_key = 0; | ||||||
|  |  | ||||||
| 	return EFI_SUCCESS; | 	return EFI_SUCCESS; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user