diff options
| author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2019-01-12 14:42:40 +0100 | 
|---|---|---|
| committer | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2019-02-16 15:42:20 +0100 | 
| commit | 1504bb0d96d7eac30cc5ed9b06ece0d40ae003f3 (patch) | |
| tree | 14960a31eb8a4aaca7610b5c95e7d8eaa41d609a /cmd/bootefi.c | |
| parent | 914df75b0c97b6e9774025500c061231db1cc6b4 (diff) | |
efi_loader: clean up bootefi_test_prepare()
Free resources upon failure.
Correct the function description.
As there is no need for any special address in the dummy memory device
path passed via the EFI_LOADED_IMAGE_PROTOCOL simply use 0 as address.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'cmd/bootefi.c')
| -rw-r--r-- | cmd/bootefi.c | 58 | 
1 files changed, 33 insertions, 25 deletions
| diff --git a/cmd/bootefi.c b/cmd/bootefi.c index e1eba463b88..3619a20e643 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -318,38 +318,46 @@ err_add_protocol:  /**   * bootefi_test_prepare() - prepare to run an EFI test   * - * This sets things up so we can call EFI functions. This involves preparing - * the 'gd' pointer and setting up the load ed image data structures. + * Prepare to run a test as if it were provided by a loaded image.   * - * @image_objp: loaded_image_infop: Pointer to a struct which will hold the - *    loaded image object. This struct will be inited by this function before - *    use. - * @loaded_image_infop: Pointer to a struct which will hold the loaded image - *    info. This struct will be inited by this function before use. - * @path: File path to the test being run (often just the test name with a - *    backslash before it - * @test_func: Address of the test function that is being run - * @load_options_path: U-Boot environment variable to use as load options - * @return 0 if OK, -ve on error + * @image_objp:		pointer to be set to the loaded image handle + * @loaded_image_infop:	pointer to be set to the loaded image protocol + * @path:		dummy file path used to construct the device path + *			set in the loaded image protocol + * @load_options_path:	name of a U-Boot environment variable. Its value is + *			set as load options in the loaded image protocol. + * Return:		status code   */  static efi_status_t bootefi_test_prepare  		(struct efi_loaded_image_obj **image_objp, -		struct efi_loaded_image **loaded_image_infop, const char *path, -		ulong test_func, const char *load_options_path) +		 struct efi_loaded_image **loaded_image_infop, const char *path, +		 const char *load_options_path)  { +	efi_status_t ret; +  	/* Construct a dummy device path */ -	bootefi_device_path = efi_dp_from_mem(EFI_RESERVED_MEMORY_TYPE, -					      (uintptr_t)test_func, -					      (uintptr_t)test_func); +	bootefi_device_path = efi_dp_from_mem(EFI_RESERVED_MEMORY_TYPE, 0, 0);  	if (!bootefi_device_path)  		return EFI_OUT_OF_RESOURCES; +  	bootefi_image_path = efi_dp_from_file(NULL, 0, path); -	if (!bootefi_image_path) -		return EFI_OUT_OF_RESOURCES; +	if (!bootefi_image_path) { +		ret = EFI_OUT_OF_RESOURCES; +		goto failure; +	} -	return bootefi_run_prepare(load_options_path, bootefi_device_path, -				   bootefi_image_path, image_objp, -				   loaded_image_infop); +	ret = bootefi_run_prepare(load_options_path, bootefi_device_path, +				  bootefi_image_path, image_objp, +				  loaded_image_infop); +	if (ret == EFI_SUCCESS) +		return ret; + +	efi_free_pool(bootefi_image_path); +	bootefi_image_path = NULL; +failure: +	efi_free_pool(bootefi_device_path); +	bootefi_device_path = NULL; +	return ret;  }  #endif /* CONFIG_CMD_BOOTEFI_SELFTEST */ @@ -431,9 +439,9 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		struct efi_loaded_image_obj *image_obj;  		struct efi_loaded_image *loaded_image_info; -		if (bootefi_test_prepare(&image_obj, &loaded_image_info, -					 "\\selftest", (uintptr_t)&efi_selftest, -					 "efi_selftest")) +		r = bootefi_test_prepare(&image_obj, &loaded_image_info, +					 "\\selftest", "efi_selftest"); +		if (r != EFI_SUCCESS)  			return CMD_RET_FAILURE;  		/* Execute the test */ | 
