Enable format string warnings for vb2ex_printf()

This patch enables the -Wformat warning and tags vb2ex_printf() with the
appropriate attribute so the compiler recognizes it as a printf variant.
This shows a bunch of (sometimes pretty bad) issues in existing code
that are hereby fixed.

Cannot enable -Wformat-security yet since a lot of code still uses
non-constant format strings and it's unclear whether we can/want to
change that in all circumstances (e.g. stuff like DoError()).

BRANCH=None
BUG=None
TEST=make runtests

Change-Id: I917a4982a97a668a5c0f793f7c771573f2bd3949
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2013857
This commit is contained in:
Julius Werner 2020-01-21 15:40:59 -08:00 committed by Commit Bot
parent 2c41d5e079
commit f57ad98c29
7 changed files with 19 additions and 18 deletions

View File

@ -142,7 +142,7 @@ COMMON_FLAGS := -pipe ${WERROR} -Wall -Wstrict-prototypes -Wtype-limits \
-Wundef -Wmissing-prototypes -Wno-trigraphs -Wredundant-decls -Wshadow \
-Wwrite-strings -Wstrict-aliasing -Wdate-time -Wno-unknown-warning \
-Wno-address-of-packed-member -ffunction-sections -fdata-sections \
-Wimplicit-fallthrough ${DEBUG_FLAGS}
-Wimplicit-fallthrough -Wformat -Wno-format-security ${DEBUG_FLAGS}
# Note: FIRMWARE_ARCH is defined by the Chromium OS ebuild.
ifeq (${FIRMWARE_ARCH},arm)

View File

@ -804,6 +804,7 @@ vb2_error_t vb2ex_read_resource(struct vb2_context *ctx,
* @param func Function name generating output, or NULL.
* @param fmt Printf format string
*/
__attribute__((format(printf, 2, 3)))
void vb2ex_printf(const char *func, const char *fmt, ...);
/**

View File

@ -223,7 +223,7 @@ int ft_sign_kern_preamble(const char *name, uint8_t *buf, uint32_t len,
fprintf(stderr, "Unable to sign kernel blob\n");
return 1;
}
VB2_DEBUG("vblock_size = 0x%" PRIx64 "\n", vblock_size);
VB2_DEBUG("vblock_size = %#x\n", vblock_size);
if (sign_option.create_new_outfile) {
/* Write out what we've been asked for */

View File

@ -467,7 +467,7 @@ int ft_sign_bios(const char *name, uint8_t *buf, uint32_t len, void *data)
state.area[c].buf = buf + ah->area_offset;
state.area[c].len = ah->area_size;
VB2_DEBUG("%s() examining FMAP area %d (%s),"
VB2_DEBUG("examining FMAP area %d (%s),"
" offset=0x%08x len=0x%08x\n",
c, ah_name, ah->area_offset, ah->area_size);

View File

@ -112,7 +112,7 @@ int ft_show_rwsig(const char *name, uint8_t *buf, uint32_t len, void *nuthin)
sig_size = fmaparea->area_size;
VB2_DEBUG("Looking for signature at %#x (%#x)\n",
VB2_DEBUG("Looking for signature at %#tx (%#x)\n",
(uint8_t*)sig - buf, sig_size);
if (VB2_SUCCESS != vb21_verify_signature(sig, sig_size))
@ -235,7 +235,7 @@ int ft_sign_rwsig(const char *name, uint8_t *buf, uint32_t len, void *nuthin)
sig_size = fmaparea->area_size;
VB2_DEBUG("Looking for signature at %#x (%#x)\n",
VB2_DEBUG("Looking for signature at %#tx (%#x)\n",
(uint8_t*)old_sig - buf, sig_size);
data = fmap_find_by_name(buf, len, fmap, "EC_RW",

View File

@ -95,7 +95,7 @@ int ft_sign_usbpd1(const char *name, uint8_t *buf, uint32_t len, void *data)
uint32_t rw_offset;
uint32_t r;
VB2_DEBUG("%s(): name %s len 0x%08x (%d)\n", name, len, len);
VB2_DEBUG("name %s len %#.8x (%d)\n", name, len, len);
/* Get image locations */
if (!parse_size_opts(len, &ro_size, &rw_size, &ro_offset, &rw_offset))

View File

@ -185,8 +185,8 @@ static int PickApartVmlinuz(uint8_t *kernel_buf,
}
kernel32_size = kernel_size - kernel32_start;
VB2_DEBUG(" kernel16_start=0x%" PRIx64 "\n", 0);
VB2_DEBUG(" kernel16_size=0x%" PRIx64 "\n", kernel32_start);
VB2_DEBUG(" kernel16_start=%#x\n", 0);
VB2_DEBUG(" kernel16_size=%#x\n", kernel32_start);
/* Copy the original zeropage data from kernel_buf into
* g_param_data, then tweak a few fields for our purposes */
@ -221,8 +221,8 @@ static int PickApartVmlinuz(uint8_t *kernel_buf,
break;
}
VB2_DEBUG(" kernel32_start=0x%" PRIx64 "\n", kernel32_start);
VB2_DEBUG(" kernel32_size=0x%" PRIx64 "\n", kernel32_size);
VB2_DEBUG(" kernel32_start=%#x\n", kernel32_start);
VB2_DEBUG(" kernel32_size=%#x\n", kernel32_size);
/* Keep just the 32-bit kernel. */
if (kernel32_size) {
@ -461,7 +461,7 @@ int WriteSomeParts(const char *outfile,
FILE *f;
/* Write the output file */
VB2_DEBUG("writing %s with 0x%" PRIx64 ", 0x%" PRIx64 "\n",
VB2_DEBUG("writing %s with %#x, %#x\n",
outfile, part1_size, part2_size);
f = fopen(outfile, "wb");
@ -674,7 +674,7 @@ uint8_t *CreateKernelBlob(uint8_t *vmlinuz_buf, uint32_t vmlinuz_size,
* devices.
*/
g_kernel_blob_size = roundup(g_kernel_blob_size, CROS_ALIGN);
VB2_DEBUG("g_kernel_blob_size 0x%" PRIx64 "\n", g_kernel_blob_size);
VB2_DEBUG("g_kernel_blob_size %#x\n", g_kernel_blob_size);
/* Allocate space for the blob. */
g_kernel_blob_data = malloc(g_kernel_blob_size);
@ -682,22 +682,22 @@ uint8_t *CreateKernelBlob(uint8_t *vmlinuz_buf, uint32_t vmlinuz_size,
/* Assign the sub-pointers */
g_kernel_data = g_kernel_blob_data + now;
VB2_DEBUG("g_kernel_size 0x%" PRIx64 " ofs 0x%" PRIx64 "\n",
VB2_DEBUG("g_kernel_size %#x ofs %#x\n",
g_kernel_size, now);
now += roundup(g_kernel_size, CROS_ALIGN);
g_config_data = g_kernel_blob_data + now;
VB2_DEBUG("g_config_size 0x%" PRIx64 " ofs 0x%" PRIx64 "\n",
VB2_DEBUG("g_config_size %#x ofs %#x\n",
g_config_size, now);
now += g_config_size;
g_param_data = g_kernel_blob_data + now;
VB2_DEBUG("g_param_size 0x%" PRIx64 " ofs 0x%" PRIx64 "\n",
VB2_DEBUG("g_param_size %#x ofs %#x\n",
g_param_size, now);
now += g_param_size;
g_bootloader_data = g_kernel_blob_data + now;
VB2_DEBUG("g_bootloader_size 0x%" PRIx64 " ofs 0x%" PRIx64 "\n",
VB2_DEBUG("g_bootloader_size %#x ofs %#x\n",
g_bootloader_size, now);
g_ondisk_bootloader_addr = kernel_body_load_address + now;
VB2_DEBUG("g_ondisk_bootloader_addr 0x%" PRIx64 "\n",
@ -706,14 +706,14 @@ uint8_t *CreateKernelBlob(uint8_t *vmlinuz_buf, uint32_t vmlinuz_size,
if (g_vmlinuz_header_size) {
g_vmlinuz_header_data = g_kernel_blob_data + now;
VB2_DEBUG("g_vmlinuz_header_size 0x%" PRIx64 " ofs 0x%" PRIx64 "\n",
VB2_DEBUG("g_vmlinuz_header_size %#x ofs %#x\n",
g_vmlinuz_header_size, now);
g_ondisk_vmlinuz_header_addr = kernel_body_load_address + now;
VB2_DEBUG("g_ondisk_vmlinuz_header_addr 0x%" PRIx64 "\n",
g_ondisk_vmlinuz_header_addr);
}
VB2_DEBUG("end of kern_blob at kern_blob+0x%" PRIx64 "\n", now);
VB2_DEBUG("end of kern_blob at kern_blob+%#x\n", now);
/* Copy the kernel and params bits into the correct places */
if (0 != PickApartVmlinuz(vmlinuz_buf, vmlinuz_size,