
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@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;
}