@@ -85,6 +85,24 @@ static uint16_t host_to_img_u16(uint16_t val)
8585#endif
8686}
8787
88+ static void ext_flash_write_le16 (uintptr_t addr , uint16_t val )
89+ {
90+ uint8_t le [2 ];
91+ le [0 ] = (uint8_t )(val & 0xFFu );
92+ le [1 ] = (uint8_t )((val >> 8 ) & 0xFFu );
93+ ext_flash_write (addr , le , sizeof (le ));
94+ }
95+
96+ static void ext_flash_write_le32 (uintptr_t addr , uint32_t val )
97+ {
98+ uint8_t le [4 ];
99+ le [0 ] = (uint8_t )(val & 0xFFu );
100+ le [1 ] = (uint8_t )((val >> 8 ) & 0xFFu );
101+ le [2 ] = (uint8_t )((val >> 16 ) & 0xFFu );
102+ le [3 ] = (uint8_t )((val >> 24 ) & 0xFFu );
103+ ext_flash_write (addr , le , sizeof (le ));
104+ }
105+
88106#ifdef DELTA_UPDATES
89107static int mock_wb_patch_init_calls = 0 ;
90108static uint8_t * mock_wb_patch_init_patch = NULL ;
@@ -1063,6 +1081,44 @@ START_TEST (test_get_total_size_preserves_uint32_range)
10631081}
10641082END_TEST
10651083
1084+ START_TEST (test_diffbase_version_reads_from_little_endian_bytes )
1085+ {
1086+ uint32_t magic = WOLFBOOT_MAGIC ;
1087+ uint16_t img_type = HDR_IMG_TYPE_AUTH | HDR_IMG_TYPE_APP ;
1088+ uint32_t version = 0x01020304 ;
1089+ uint32_t delta_base = 0x55667788 ;
1090+ uint32_t tag ;
1091+
1092+ reset_mock_stats ();
1093+ prepare_flash ();
1094+
1095+ ext_flash_unlock ();
1096+ ext_flash_write (WOLFBOOT_PARTITION_UPDATE_ADDRESS ,
1097+ (const uint8_t * )& magic , sizeof (magic ));
1098+ ext_flash_write_le32 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 4 , TEST_SIZE_SMALL );
1099+
1100+ tag = (4u << 16 ) | HDR_VERSION ;
1101+ ext_flash_write_le32 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 8 , tag );
1102+ ext_flash_write_le32 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 12 , version );
1103+
1104+ tag = (2u << 16 ) | HDR_IMG_TYPE ;
1105+ ext_flash_write_le32 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 16 , tag );
1106+ ext_flash_write_le16 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 20 , img_type );
1107+
1108+ tag = (4u << 16 ) | HDR_IMG_DELTA_BASE ;
1109+ ext_flash_write_le32 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 24 , tag );
1110+ ext_flash_write_le32 (WOLFBOOT_PARTITION_UPDATE_ADDRESS + 28 , delta_base );
1111+ ext_flash_lock ();
1112+
1113+ ck_assert_uint_eq (wolfBoot_get_image_version (PART_UPDATE ), version );
1114+ ck_assert_uint_eq (wolfBoot_get_diffbase_version (PART_UPDATE ), delta_base );
1115+ ck_assert_uint_eq (wolfBoot_get_blob_diffbase_version (
1116+ (uint8_t * )(uintptr_t )WOLFBOOT_PARTITION_UPDATE_ADDRESS ), delta_base );
1117+
1118+ cleanup_flash ();
1119+ }
1120+ END_TEST
1121+
10661122#ifdef DELTA_UPDATES
10671123START_TEST (test_delta_zero_size_valid_header_rejected_without_recovery_heuristic )
10681124{
@@ -1187,6 +1243,7 @@ START_TEST (test_delta_base_version_match_accepts)
11871243 ret = wolfBoot_delta_update (& boot , & update , & swap , 0 , 0 );
11881244 ck_assert_int_eq (ret , 0 );
11891245 ck_assert_int_eq (mock_wb_patch_init_calls , 1 );
1246+ ck_assert_ptr_eq (mock_wb_patch_init_patch , update .hdr + IMAGE_HEADER_SIZE );
11901247 ck_assert_uint_eq (mock_wb_patch_init_psz , delta_sz );
11911248
11921249 cleanup_flash ();
@@ -1350,6 +1407,7 @@ Suite *wolfboot_suite(void)
13501407 tcase_add_test (empty_boot_but_update_sha_corrupted_denied , test_empty_boot_but_update_sha_corrupted_denied );
13511408 tcase_add_test (swap_resume , test_swap_resume_noop );
13521409 tcase_add_test (diffbase_version , test_diffbase_version_reads );
1410+ tcase_add_test (diffbase_version , test_diffbase_version_reads_from_little_endian_bytes );
13531411 tcase_add_test (get_total_size , test_get_total_size_preserves_uint32_range );
13541412 tcase_add_test (boot_success , test_boot_success_sets_state );
13551413#ifdef DELTA_UPDATES
0 commit comments