From c54521511cca146661aa6a86f6366bafb9df577c Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Wed, 14 Feb 2024 22:24:52 +1100 Subject: [PATCH] AP_CheckFirmware: allow access to app descriptor from bootloader --- libraries/AP_CheckFirmware/AP_CheckFirmware.cpp | 17 +++++++++++++++-- libraries/AP_CheckFirmware/AP_CheckFirmware.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libraries/AP_CheckFirmware/AP_CheckFirmware.cpp b/libraries/AP_CheckFirmware/AP_CheckFirmware.cpp index 7464e52787..8c0ebfbb10 100644 --- a/libraries/AP_CheckFirmware/AP_CheckFirmware.cpp +++ b/libraries/AP_CheckFirmware/AP_CheckFirmware.cpp @@ -78,7 +78,7 @@ static check_fw_result_t check_firmware_signature(const app_descriptor_signed *a /* check firmware CRC and board ID to see if it matches */ -static check_fw_result_t check_good_firmware_signed() +static check_fw_result_t check_good_firmware_signed(void) { const uint8_t sig[8] = AP_APP_DESCRIPTOR_SIGNATURE_SIGNED; const uint8_t *flash1 = (const uint8_t *)(FLASH_LOAD_ADDRESS + (FLASH_BOOTLOADER_LOAD_KB + APP_START_OFFSET_KB)*1024); @@ -130,7 +130,7 @@ static check_fw_result_t check_good_firmware_signed() check firmware CRC and board ID to see if it matches, using unsigned signature */ -static check_fw_result_t check_good_firmware_unsigned() +static check_fw_result_t check_good_firmware_unsigned(void) { const uint8_t sig[8] = AP_APP_DESCRIPTOR_SIGNATURE_UNSIGNED; const uint8_t *flash1 = (const uint8_t *)(FLASH_LOAD_ADDRESS + (FLASH_BOOTLOADER_LOAD_KB + APP_START_OFFSET_KB)*1024); @@ -201,6 +201,19 @@ check_fw_result_t check_good_firmware(void) #endif } +const app_descriptor_t *get_app_descriptor(void) +{ +#if AP_SIGNED_FIRMWARE + const uint8_t sig[8] = AP_APP_DESCRIPTOR_SIGNATURE_SIGNED; +#else + const uint8_t sig[8] = AP_APP_DESCRIPTOR_SIGNATURE_UNSIGNED; +#endif + const uint8_t *flash1 = (const uint8_t *)(FLASH_LOAD_ADDRESS + (FLASH_BOOTLOADER_LOAD_KB + APP_START_OFFSET_KB)*1024); + const uint32_t flash_size = (BOARD_FLASH_SIZE - (FLASH_BOOTLOADER_LOAD_KB + APP_START_OFFSET_KB))*1024; + const app_descriptor_t *ad = (const app_descriptor_t *)memmem(flash1, flash_size-sizeof(app_descriptor_t), sig, sizeof(sig)); + return ad; +} + #endif // HAL_BOOTLOADER_BUILD #if !defined(HAL_BOOTLOADER_BUILD) diff --git a/libraries/AP_CheckFirmware/AP_CheckFirmware.h b/libraries/AP_CheckFirmware/AP_CheckFirmware.h index 99189642e9..5adb35e200 100644 --- a/libraries/AP_CheckFirmware/AP_CheckFirmware.h +++ b/libraries/AP_CheckFirmware/AP_CheckFirmware.h @@ -126,6 +126,7 @@ struct PACKED ap_secure_data { #ifdef HAL_BOOTLOADER_BUILD check_fw_result_t check_good_firmware(void); +const app_descriptor_t *get_app_descriptor(void); #else void check_firmware_print(void);