diff options
Diffstat (limited to 'lib/efi_loader/efi_esrt.c')
| -rw-r--r-- | lib/efi_loader/efi_esrt.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/lib/efi_loader/efi_esrt.c b/lib/efi_loader/efi_esrt.c index dafd447b6d7..443bd999ce1 100644 --- a/lib/efi_loader/efi_esrt.c +++ b/lib/efi_loader/efi_esrt.c @@ -364,7 +364,7 @@ efi_status_t efi_esrt_populate(void)  		if (ret != EFI_SUCCESS) {  			EFI_PRINT("ESRT Unable to find FMP handle (%u)\n",  				  idx); -			goto out; +			continue;  		}  		fmp = handler->protocol_interface; @@ -379,15 +379,14 @@ efi_status_t efi_esrt_populate(void)  			 * fmp->get_image_info to return BUFFER_TO_SMALL.  			 */  			EFI_PRINT("ESRT erroneous FMP implementation\n"); -			ret = EFI_INVALID_PARAMETER; -			goto out; +			continue;  		}  		ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, info_size,  					(void **)&img_info);  		if (ret != EFI_SUCCESS) {  			EFI_PRINT("ESRT failed to allocate memory for image info\n"); -			goto out; +			continue;  		}  		/* @@ -405,7 +404,7 @@ efi_status_t efi_esrt_populate(void)  		if (ret != EFI_SUCCESS) {  			EFI_PRINT("ESRT failed to obtain image info from FMP\n");  			efi_free_pool(img_info); -			goto out; +			continue;  		}  		num_entries += desc_count; @@ -413,6 +412,13 @@ efi_status_t efi_esrt_populate(void)  		efi_free_pool(img_info);  	} +	/* error occurs in fmp->get_image_info() if num_entries is 0 here */ +	if (!num_entries) { +		EFI_PRINT("Error occurs, num_entries should not be 0\n"); +		ret = EFI_INVALID_PARAMETER; +		goto out; +	} +  	EFI_PRINT("ESRT create table with %u entries\n", num_entries);  	/*  	 * Allocate an ESRT with the sufficient number of entries to accommodate @@ -436,7 +442,7 @@ efi_status_t efi_esrt_populate(void)  		if (ret != EFI_SUCCESS) {  			EFI_PRINT("ESRT unable to find FMP handle (%u)\n",  				  idx); -			break; +			continue;  		}  		fmp = handler->protocol_interface; | 
