mirror of
https://xff.cz/git/u-boot/
synced 2025-09-29 22:41:17 +02:00
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>
This commit is contained in:
@@ -318,38 +318,46 @@ err_add_protocol:
|
|||||||
/**
|
/**
|
||||||
* bootefi_test_prepare() - prepare to run an EFI test
|
* bootefi_test_prepare() - prepare to run an EFI test
|
||||||
*
|
*
|
||||||
* This sets things up so we can call EFI functions. This involves preparing
|
* Prepare to run a test as if it were provided by a loaded image.
|
||||||
* the 'gd' pointer and setting up the load ed image data structures.
|
|
||||||
*
|
*
|
||||||
* @image_objp: loaded_image_infop: Pointer to a struct which will hold the
|
* @image_objp: pointer to be set to the loaded image handle
|
||||||
* loaded image object. This struct will be inited by this function before
|
* @loaded_image_infop: pointer to be set to the loaded image protocol
|
||||||
* use.
|
* @path: dummy file path used to construct the device path
|
||||||
* @loaded_image_infop: Pointer to a struct which will hold the loaded image
|
* set in the loaded image protocol
|
||||||
* info. This struct will be inited by this function before use.
|
* @load_options_path: name of a U-Boot environment variable. Its value is
|
||||||
* @path: File path to the test being run (often just the test name with a
|
* set as load options in the loaded image protocol.
|
||||||
* backslash before it
|
* Return: status code
|
||||||
* @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
|
|
||||||
*/
|
*/
|
||||||
static efi_status_t bootefi_test_prepare
|
static efi_status_t bootefi_test_prepare
|
||||||
(struct efi_loaded_image_obj **image_objp,
|
(struct efi_loaded_image_obj **image_objp,
|
||||||
struct efi_loaded_image **loaded_image_infop, const char *path,
|
struct efi_loaded_image **loaded_image_infop, const char *path,
|
||||||
ulong test_func, const char *load_options_path)
|
const char *load_options_path)
|
||||||
{
|
{
|
||||||
|
efi_status_t ret;
|
||||||
|
|
||||||
/* Construct a dummy device path */
|
/* Construct a dummy device path */
|
||||||
bootefi_device_path = efi_dp_from_mem(EFI_RESERVED_MEMORY_TYPE,
|
bootefi_device_path = efi_dp_from_mem(EFI_RESERVED_MEMORY_TYPE, 0, 0);
|
||||||
(uintptr_t)test_func,
|
|
||||||
(uintptr_t)test_func);
|
|
||||||
if (!bootefi_device_path)
|
if (!bootefi_device_path)
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
bootefi_image_path = efi_dp_from_file(NULL, 0, path);
|
|
||||||
if (!bootefi_image_path)
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
|
||||||
|
|
||||||
return bootefi_run_prepare(load_options_path, bootefi_device_path,
|
bootefi_image_path = efi_dp_from_file(NULL, 0, path);
|
||||||
|
if (!bootefi_image_path) {
|
||||||
|
ret = EFI_OUT_OF_RESOURCES;
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = bootefi_run_prepare(load_options_path, bootefi_device_path,
|
||||||
bootefi_image_path, image_objp,
|
bootefi_image_path, image_objp,
|
||||||
loaded_image_infop);
|
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 */
|
#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_obj *image_obj;
|
||||||
struct efi_loaded_image *loaded_image_info;
|
struct efi_loaded_image *loaded_image_info;
|
||||||
|
|
||||||
if (bootefi_test_prepare(&image_obj, &loaded_image_info,
|
r = bootefi_test_prepare(&image_obj, &loaded_image_info,
|
||||||
"\\selftest", (uintptr_t)&efi_selftest,
|
"\\selftest", "efi_selftest");
|
||||||
"efi_selftest"))
|
if (r != EFI_SUCCESS)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
/* Execute the test */
|
/* Execute the test */
|
||||||
|
Reference in New Issue
Block a user