[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