[PATCH 1/7] mkeficapsule: Correct printf() strings

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Feb 8 00:20:57 CET 2021


On 2/7/21 10:27 PM, Simon Glass wrote:
> Use %z when printing size_t values. This avoids errors on 32-bit
> machines.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>   tools/mkeficapsule.c | 14 +++++++-------
>   1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/tools/mkeficapsule.c b/tools/mkeficapsule.c
> index 162494907a8..ea6151989e9 100644
> --- a/tools/mkeficapsule.c
> +++ b/tools/mkeficapsule.c
> @@ -278,7 +278,7 @@ static int create_fwbin(char *path, char *bin, efi_guid_t *guid,
>   	}
>   	data = malloc(bin_stat.st_size);
>   	if (!data) {
> -		printf("cannot allocate memory: %lx\n", bin_stat.st_size);
> +		printf("cannot allocate memory: %lx\n", (ulong)bin_stat.st_size);

Thanks for addressing the build problem.

bin_stat.st_size is of type off_t which may be u64 on 32bit systems.

We must check that bin_stat.st_size <= SIZE_MAX before calling malloc()
otherwise the value may be truncated.

The capsule file will end up on a FAT file system which has a file size
limit of 2^32-1. Typically the ESP has a size of 100 MiB. We should at
least check that bin_stat.st_size <= 2^32-1.

Converting to size_t instead of ulong seems to be the natural choice for
a parameter called size.

>   		goto err_1;
>   	}
>   	f = fopen(path, "w");
> @@ -297,7 +297,7 @@ static int create_fwbin(char *path, char *bin, efi_guid_t *guid,
>
>   	size = fwrite(&header, 1, sizeof(header), f);
>   	if (size < sizeof(header)) {
> -		printf("write failed (%lx)\n", size);
> +		printf("write failed (%zx)\n", size);

ok

>   		goto err_3;
>   	}
>
> @@ -306,13 +306,13 @@ static int create_fwbin(char *path, char *bin, efi_guid_t *guid,
>   	capsule.payload_item_count = 1;
>   	size = fwrite(&capsule, 1, sizeof(capsule), f);
>   	if (size < (sizeof(capsule))) {
> -		printf("write failed (%lx)\n", size);
> +		printf("write failed (%zx)\n", size);

ok

>   		goto err_3;
>   	}
>   	offset = sizeof(capsule) + sizeof(u64);
>   	size = fwrite(&offset, 1, sizeof(offset), f);
>   	if (size < sizeof(offset)) {
> -		printf("write failed (%lx)\n", size);
> +		printf("write failed (%zx)\n", size);

ok

>   		goto err_3;
>   	}
>
> @@ -329,17 +329,17 @@ static int create_fwbin(char *path, char *bin, efi_guid_t *guid,
>
>   	size = fwrite(&image, 1, sizeof(image), f);
>   	if (size < sizeof(image)) {
> -		printf("write failed (%lx)\n", size);
> +		printf("write failed (%zx)\n", size);

ok

>   		goto err_3;
>   	}
>   	size = fread(data, 1, bin_stat.st_size, g);
>   	if (size < bin_stat.st_size) {
> -		printf("read failed (%lx)\n", size);
> +		printf("read failed (%zx)\n", size);

ok

>   		goto err_3;
>   	}
>   	size = fwrite(data, 1, bin_stat.st_size, f);
>   	if (size < bin_stat.st_size) {
> -		printf("write failed (%lx)\n", size);
> +		printf("write failed (%zx)\n", size);

ok

Best regards

Heinrich

>   		goto err_3;
>   	}
>
>



More information about the U-Boot mailing list