diff --git a/libfwupdplugin/fu-efi-firmware-volume.c b/libfwupdplugin/fu-efi-firmware-volume.c index cbbda5f87..a03876cf8 100644 --- a/libfwupdplugin/fu-efi-firmware-volume.c +++ b/libfwupdplugin/fu-efi-firmware-volume.c @@ -301,6 +301,16 @@ fu_efi_firmware_volume_write(FuFirmware *firmware, GError **error) g_autoptr(GBytes) img_blob = NULL; g_autoptr(FuFirmware) img = NULL; + /* sanity check */ + if (fu_firmware_get_alignment(firmware) > FU_FIRMWARE_ALIGNMENT_1M) { + g_set_error(error, + FWUPD_ERROR, + FWUPD_ERROR_INVALID_FILE, + "alignment invalid, got 0x%02x", + fu_firmware_get_alignment(firmware)); + return NULL; + } + /* zero vector */ for (guint i = 0; i < 0x10; i++) fu_byte_array_append_uint8(buf, 0x0); diff --git a/libfwupdplugin/fu-ifd-image.c b/libfwupdplugin/fu-ifd-image.c index 4a0e22788..c076c9244 100644 --- a/libfwupdplugin/fu-ifd-image.c +++ b/libfwupdplugin/fu-ifd-image.c @@ -75,6 +75,16 @@ fu_ifd_image_write(FuFirmware *firmware, GError **error) g_autoptr(GByteArray) buf = g_byte_array_new(); g_autoptr(GPtrArray) images = fu_firmware_get_images(firmware); + /* sanity check */ + if (fu_firmware_get_alignment(firmware) > FU_FIRMWARE_ALIGNMENT_1M) { + g_set_error(error, + FWUPD_ERROR, + FWUPD_ERROR_INVALID_FILE, + "alignment invalid, got 0x%02x", + fu_firmware_get_alignment(firmware)); + return NULL; + } + /* add each volume */ if (images->len > 0) { for (guint i = 0; i < images->len; i++) { diff --git a/plugins/bcm57xx/fu-bcm57xx-stage1-image.c b/plugins/bcm57xx/fu-bcm57xx-stage1-image.c index c0508518a..5b98aebd0 100644 --- a/plugins/bcm57xx/fu-bcm57xx-stage1-image.c +++ b/plugins/bcm57xx/fu-bcm57xx-stage1-image.c @@ -102,6 +102,16 @@ fu_bcm57xx_stage1_image_write(FuFirmware *firmware, GError **error) g_autoptr(GByteArray) buf = g_byte_array_new(); g_autoptr(GBytes) fw_nocrc = NULL; + /* sanity check */ + if (fu_firmware_get_alignment(firmware) > FU_FIRMWARE_ALIGNMENT_1M) { + g_set_error(error, + FWUPD_ERROR, + FWUPD_ERROR_INVALID_FILE, + "alignment invalid, got 0x%02x", + fu_firmware_get_alignment(firmware)); + return NULL; + } + /* the CRC-less payload */ fw_nocrc = fu_firmware_get_bytes(firmware, error); if (fw_nocrc == NULL)