From cd803ff2e2424b56a7ae5886e4cfe17b47652e6e Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 30 Apr 2025 13:22:54 +0100 Subject: [image] Add the concept of a static image Not all images are allocated via alloc_image(). For example: embedded images, the static images created to hold a runtime command line, and the images used by unit tests are all static structures. Using image_set_cmdline() (via e.g. the "imgargs" command) to set the command-line arguments of a static image will succeed but will leak memory, since nothing will ever free the allocated command line. There are no code paths that can lead to calling image_set_len() on a static image, but there is no safety check against future code paths attempting this. Define a flag IMAGE_STATIC to mark an image as statically allocated, generalise free_image() to also handle freeing dynamically allocated portions of static images (such as the command line), and expose free_image() for use by static images. Define a related flag IMAGE_STATIC_NAME to mark the name as statically allocated. Allow a statically allocated name to be replaced with a dynamically allocated name since this is a potentially valid use case (e.g. if "imgdecrypt --name " is used on an embedded image). Signed-off-by: Michael Brown --- src/interface/efi/efi_cmdline.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/interface') diff --git a/src/interface/efi/efi_cmdline.c b/src/interface/efi/efi_cmdline.c index 13ad0fc35..59bce925f 100644 --- a/src/interface/efi/efi_cmdline.c +++ b/src/interface/efi/efi_cmdline.c @@ -58,6 +58,7 @@ static void efi_cmdline_free ( struct refcnt *refcnt ) { struct image *image = container_of ( refcnt, struct image, refcnt ); DBGC ( image, "CMDLINE freeing command line\n" ); + free_image ( refcnt ); free ( efi_cmdline_copy ); } @@ -65,6 +66,7 @@ static void efi_cmdline_free ( struct refcnt *refcnt ) { static struct image efi_cmdline_image = { .refcnt = REF_INIT ( efi_cmdline_free ), .name = "", + .flags = ( IMAGE_STATIC | IMAGE_STATIC_NAME ), .type = &script_image_type, }; -- cgit v1.2.3-55-g7522