[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] error: Do compile-time format string checking on grub_error.
From: |
Glenn Washburn |
Subject: |
[PATCH] error: Do compile-time format string checking on grub_error. |
Date: |
Mon, 5 Oct 2020 01:17:39 -0500 |
Fix the many issues this uncovered mostly related to incorrect length
modifiers.
Signed-off-by: Glenn Washburn <development@efficientek.com>
---
grub-core/commands/pgp.c | 2 +-
grub-core/disk/ata.c | 4 ++--
grub-core/disk/cryptodisk.c | 14 ++++++++------
grub-core/disk/dmraid_nvidia.c | 2 +-
grub-core/disk/luks2.c | 6 +++---
grub-core/efiemu/i386/loadcore64.c | 3 ++-
grub-core/fs/hfsplus.c | 3 ++-
grub-core/fs/zfs/zfs.c | 2 +-
grub-core/kern/efi/efi.c | 2 +-
grub-core/kern/efi/mm.c | 2 +-
grub-core/kern/x86_64/dl.c | 2 +-
grub-core/loader/efi/chainloader.c | 4 ++--
grub-core/loader/i386/bsd.c | 3 ++-
grub-core/loader/i386/pc/linux.c | 4 ++--
grub-core/net/tftp.c | 2 +-
grub-core/parttool/msdospart.c | 4 ++--
grub-core/script/lexer.c | 2 +-
grub-core/video/bochs.c | 4 ++--
include/grub/err.h | 3 ++-
19 files changed, 37 insertions(+), 31 deletions(-)
diff --git a/grub-core/commands/pgp.c b/grub-core/commands/pgp.c
index bbf6871fe..150cb6fe9 100644
--- a/grub-core/commands/pgp.c
+++ b/grub-core/commands/pgp.c
@@ -633,7 +633,7 @@ grub_verify_signature_real (struct grub_pubkey_context
*ctxt,
if (!sk)
{
/* TRANSLATORS: %08x is 32-bit key id. */
- grub_error (GRUB_ERR_BAD_SIGNATURE, N_("public key %08x not found"),
+ grub_error (GRUB_ERR_BAD_SIGNATURE, N_("public key
%08"PRIxGRUB_UINT64_T" not found"),
keyid);
goto fail;
}
diff --git a/grub-core/disk/ata.c b/grub-core/disk/ata.c
index 685f33a19..c8f350ed3 100644
--- a/grub-core/disk/ata.c
+++ b/grub-core/disk/ata.c
@@ -219,7 +219,7 @@ grub_ata_setaddress (struct grub_ata *dev,
if (dev->sectors_per_track == 0
|| dev->heads == 0)
return grub_error (GRUB_ERR_OUT_OF_RANGE,
- "sector %d cannot be addressed "
+ "sector %"PRIxGRUB_UINT64_T" cannot be addressed "
"using CHS addressing", sector);
/* Calculate the sector, cylinder and head to use. */
@@ -232,7 +232,7 @@ grub_ata_setaddress (struct grub_ata *dev,
|| cylinder > dev->cylinders
|| head > dev->heads)
return grub_error (GRUB_ERR_OUT_OF_RANGE,
- "sector %d cannot be addressed "
+ "sector %"PRIxGRUB_UINT64_T" cannot be addressed "
"using CHS addressing", sector);
parms->taskfile.disk = 0xE0 | head;
diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c
index 13af84dd1..9c043a23f 100644
--- a/grub-core/disk/cryptodisk.c
+++ b/grub-core/disk/cryptodisk.c
@@ -470,13 +470,15 @@ grub_cryptodisk_setcipher (grub_cryptodisk_t crypt, const
char *ciphername, cons
}
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
{
- ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size:
%d",
+ ret = grub_error (GRUB_ERR_BAD_ARGUMENT,
+ "Unsupported XTS block size: %"PRIuGRUB_SIZE,
cipher->cipher->blocksize);
goto err;
}
if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
{
- ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size:
%d",
+ ret = grub_error (GRUB_ERR_BAD_ARGUMENT,
+ "Unsupported XTS block size: %"PRIuGRUB_SIZE,
secondary_cipher->cipher->blocksize);
goto err;
}
@@ -487,8 +489,8 @@ grub_cryptodisk_setcipher (grub_cryptodisk_t crypt, const
char *ciphername, cons
cipheriv = ciphermode + sizeof ("lrw-") - 1;
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
{
- ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size:
%d",
- cipher->cipher->blocksize);
+ ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size:
%"
+ PRIuGRUB_SIZE, cipher->cipher->blocksize);
goto err;
}
}
@@ -509,8 +511,8 @@ grub_cryptodisk_setcipher (grub_cryptodisk_t crypt, const
char *ciphername, cons
{
if (cipher->cipher->blocksize & (cipher->cipher->blocksize - 1)
|| cipher->cipher->blocksize == 0)
- grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d",
- cipher->cipher->blocksize);
+ grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %"
+ PRIuGRUB_SIZE, cipher->cipher->blocksize);
/* FIXME should we return an error here? */
for (benbi_log = 0;
(cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE;
diff --git a/grub-core/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c
index 060279124..014581df0 100644
--- a/grub-core/disk/dmraid_nvidia.c
+++ b/grub-core/disk/dmraid_nvidia.c
@@ -122,7 +122,7 @@ grub_dmraid_nv_detect (grub_disk_t disk,
if (sb.version != NV_VERSION)
{
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- "unknown version: %d.%d", sb.version);
+ "unknown version: %d", sb.version);
return NULL;
}
diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c
index 31d7166fc..fdf6cd1e7 100644
--- a/grub-core/disk/luks2.c
+++ b/grub-core/disk/luks2.c
@@ -200,7 +200,7 @@ luks2_parse_segment (grub_luks2_segment_t *out, const
grub_json_t *segment)
grub_json_getstring (&out->size, segment, "size") ||
grub_json_getstring (&out->encryption, segment, "encryption") ||
grub_json_getint64 (&out->sector_size, segment, "sector_size"))
- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Missing segment parameters",
type);
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Missing segment parameters");
return GRUB_ERR_NONE;
}
@@ -228,7 +228,7 @@ luks2_parse_digest (grub_luks2_digest_t *out, const
grub_json_t *digest)
if (grub_json_getsize (&size, &segments))
return grub_error (GRUB_ERR_BAD_ARGUMENT,
- "Digest references no segments", type);
+ "Digest references no segments");
for (i = 0; i < size; i++)
{
@@ -240,7 +240,7 @@ luks2_parse_digest (grub_luks2_digest_t *out, const
grub_json_t *digest)
if (grub_json_getsize (&size, &keyslots))
return grub_error (GRUB_ERR_BAD_ARGUMENT,
- "Digest references no keyslots", type);
+ "Digest references no keyslots");
for (i = 0; i < size; i++)
{
diff --git a/grub-core/efiemu/i386/loadcore64.c
b/grub-core/efiemu/i386/loadcore64.c
index 18facf47f..3e9a71cfd 100644
--- a/grub-core/efiemu/i386/loadcore64.c
+++ b/grub-core/efiemu/i386/loadcore64.c
@@ -122,7 +122,8 @@ grub_arch_efiemu_relocate_symbols64 (grub_efiemu_segment_t
segs,
break;
default:
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- N_("relocation 0x%x is not implemented
yet"),
+ N_("relocation 0x%"PRIxGRUB_UINT64_T
+ " is not implemented yet"),
ELF_R_TYPE (rel->r_info));
}
}
diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c
index 9c4e4c88c..b538f52e0 100644
--- a/grub-core/fs/hfsplus.c
+++ b/grub-core/fs/hfsplus.c
@@ -188,7 +188,8 @@ grub_hfsplus_read_block (grub_fshelp_node_t node,
grub_disk_addr_t fileblock)
|| !nnode)
{
grub_error (GRUB_ERR_READ_ERROR,
- "no block found for the file id 0x%x and the block offset
0x%x",
+ "no block found for the file id 0x%x and the block"
+ " offset 0x%"PRIuGRUB_UINT64_T,
node->fileid, fileblock);
break;
}
diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
index 41ef0ff57..9ad26e876 100644
--- a/grub-core/fs/zfs/zfs.c
+++ b/grub-core/fs/zfs/zfs.c
@@ -1869,7 +1869,7 @@ zio_read (blkptr_t *bp, grub_zfs_endian_t endian, void
**buf,
{
if (BPE_GET_ETYPE(bp) != BP_EMBEDDED_TYPE_DATA)
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- "unsupported embedded BP (type=%u)\n",
+ "unsupported embedded BP (type=%llu)\n",
BPE_GET_ETYPE(bp));
lsize = BPE_GET_LSIZE(bp);
psize = BF64_GET_SB(grub_zfs_to_cpu64 ((bp)->blk_prop, endian), 25, 7,
0, 1);
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
index e0165e74c..a56be538c 100644
--- a/grub-core/kern/efi/efi.c
+++ b/grub-core/kern/efi/efi.c
@@ -491,7 +491,7 @@ grub_efi_duplicate_device_path (const
grub_efi_device_path_t *dp)
if (len < 4)
{
grub_error (GRUB_ERR_OUT_OF_RANGE,
- "malformed EFI Device Path node has length=%d", len);
+ "malformed EFI Device Path node has length=%ld", len);
return NULL;
}
diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
index 457772d57..22f89b6af 100644
--- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c
@@ -127,7 +127,7 @@ grub_efi_allocate_pages_real (grub_efi_physical_address_t
address,
if (address > GRUB_EFI_MAX_USABLE_ADDRESS)
{
grub_error (GRUB_ERR_BAD_ARGUMENT,
- N_("invalid memory address (0x%llx > 0x%llx)"),
+ N_("invalid memory address (0x%lx > 0x%x)"),
address, GRUB_EFI_MAX_USABLE_ADDRESS);
return NULL;
}
diff --git a/grub-core/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c
index 3a73e6e6c..aa01cc167 100644
--- a/grub-core/kern/x86_64/dl.c
+++ b/grub-core/kern/x86_64/dl.c
@@ -107,7 +107,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
default:
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
- N_("relocation 0x%x is not implemented yet"),
+ N_("relocation 0x%lx is not implemented yet"),
ELF_R_TYPE (rel->r_info));
}
}
diff --git a/grub-core/loader/efi/chainloader.c
b/grub-core/loader/efi/chainloader.c
index 7b31c3fb9..b8d35f41e 100644
--- a/grub-core/loader/efi/chainloader.c
+++ b/grub-core/loader/efi/chainloader.c
@@ -90,7 +90,7 @@ grub_chainloader_boot (void)
*grub_utf16_to_utf8 ((grub_uint8_t *) buf,
exit_data, exit_data_size) = 0;
- grub_error (GRUB_ERR_BAD_OS, buf);
+ grub_error (GRUB_ERR_BAD_OS, "%s", buf);
grub_free (buf);
}
}
@@ -164,7 +164,7 @@ make_file_path (grub_efi_device_path_t *dp, const char
*filename)
if (len < 4)
{
grub_error (GRUB_ERR_OUT_OF_RANGE,
- "malformed EFI Device Path node has length=%d", len);
+ "malformed EFI Device Path node has
length=%"PRIuGRUB_SIZE, len);
return NULL;
}
diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c
index f5bf7f89e..fe20b339b 100644
--- a/grub-core/loader/i386/bsd.c
+++ b/grub-core/loader/i386/bsd.c
@@ -2110,7 +2110,8 @@ grub_cmd_openbsd_ramdisk (grub_command_t cmd
__attribute__ ((unused)),
{
grub_file_close (file);
return grub_error (GRUB_ERR_BAD_OS, "your kOpenBSD supports ramdisk only"
- " up to %u bytes, however you supplied a %u bytes one",
+ " up to %"PRIuGRUB_SIZE" bytes, however you supplied"
+ " a %"PRIuGRUB_SIZE" bytes one",
openbsd_ramdisk.max_size, size);
}
diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c
index 814988ab9..0bc5d6807 100644
--- a/grub-core/loader/i386/pc/linux.c
+++ b/grub-core/loader/i386/pc/linux.c
@@ -230,9 +230,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
&& GRUB_LINUX_ZIMAGE_ADDR + grub_linux16_prot_size
> grub_linux_real_target)
{
- grub_error (GRUB_ERR_BAD_OS, "too big zImage (0x%x > 0x%x), use bzImage
instead",
+ grub_error (GRUB_ERR_BAD_OS, "too big zImage (%p > %p), use bzImage
instead",
(char *) GRUB_LINUX_ZIMAGE_ADDR + grub_linux16_prot_size,
- (grub_size_t) grub_linux_real_target);
+ (void *) grub_linux_real_target);
goto fail;
}
diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c
index 7e659a78b..592bfee34 100644
--- a/grub-core/net/tftp.c
+++ b/grub-core/net/tftp.c
@@ -252,7 +252,7 @@ tftp_receive (grub_net_udp_socket_t sock __attribute__
((unused)),
case TFTP_ERROR:
data->have_oack = 1;
grub_netbuff_free (nb);
- grub_error (GRUB_ERR_IO, (char *) tftph->u.err.errmsg);
+ grub_error (GRUB_ERR_IO, "%s", tftph->u.err.errmsg);
grub_error_save (&data->save_err);
return GRUB_ERR_NONE;
default:
diff --git a/grub-core/parttool/msdospart.c b/grub-core/parttool/msdospart.c
index dcbf74e3b..2e2e9d527 100644
--- a/grub-core/parttool/msdospart.c
+++ b/grub-core/parttool/msdospart.c
@@ -127,8 +127,8 @@ static grub_err_t grub_pcpart_type (const grub_device_t dev,
{
dev->disk->partition = part;
return grub_error (GRUB_ERR_BAD_ARGUMENT,
- N_("the partition type 0x%x isn't "
- "valid"));
+ N_("the partition type 0x%x isn't valid"),
+ type);
}
mbr.entries[index].type = type;
diff --git a/grub-core/script/lexer.c b/grub-core/script/lexer.c
index 57778f881..52004d059 100644
--- a/grub-core/script/lexer.c
+++ b/grub-core/script/lexer.c
@@ -349,7 +349,7 @@ void
grub_script_yyerror (struct grub_parser_param *state, const char *err)
{
if (err)
- grub_error (GRUB_ERR_INVALID_COMMAND, err);
+ grub_error (GRUB_ERR_INVALID_COMMAND, "%s", err);
grub_print_error ();
state->err++;
diff --git a/grub-core/video/bochs.c b/grub-core/video/bochs.c
index 7a249eb21..30ea1bd82 100644
--- a/grub-core/video/bochs.c
+++ b/grub-core/video/bochs.c
@@ -249,11 +249,11 @@ grub_video_bochs_setup (unsigned int width, unsigned int
height,
}
if (width > BOCHS_MAX_WIDTH)
- return grub_error (GRUB_ERR_IO, "width must be at most",
+ return grub_error (GRUB_ERR_IO, "width must be at most %d",
BOCHS_MAX_WIDTH);
if (height > BOCHS_MAX_HEIGHT)
- return grub_error (GRUB_ERR_IO, "height must be at most",
+ return grub_error (GRUB_ERR_IO, "height must be at most %d",
BOCHS_MAX_HEIGHT);
if (width & (BOCHS_WIDTH_ALIGN - 1))
diff --git a/include/grub/err.h b/include/grub/err.h
index 24ba9f5f5..b08d5d0de 100644
--- a/include/grub/err.h
+++ b/include/grub/err.h
@@ -85,7 +85,8 @@ struct grub_error_saved
extern grub_err_t EXPORT_VAR(grub_errno);
extern char EXPORT_VAR(grub_errmsg)[GRUB_MAX_ERRMSG];
-grub_err_t EXPORT_FUNC(grub_error) (grub_err_t n, const char *fmt, ...);
+grub_err_t EXPORT_FUNC(grub_error) (grub_err_t n, const char *fmt, ...)
+ __attribute__ ((format (GNU_PRINTF, 2, 3)));
void EXPORT_FUNC(grub_fatal) (const char *fmt, ...) __attribute__ ((noreturn));
void EXPORT_FUNC(grub_error_push) (void);
int EXPORT_FUNC(grub_error_pop) (void);
--
2.27.0