Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

boot: Change boot_enc_load to take slot number instead of image #2004

Merged
merged 1 commit into from
Jul 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions boot/boot_serial/src/boot_serial_encryption.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ boot_image_validate_encrypted(const struct flash_area *fa_p,
memset(&boot_data, 0, sizeof(struct boot_loader_state));
image_index = BOOT_CURR_IMG(state);
if(IS_ENCRYPTED(hdr)) {
rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fa_p, bs);
rc = boot_enc_load(BOOT_CURR_ENC(state), 1, hdr, fa_p, bs);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note for me: I have to check whether this line is fine

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is fine

if (rc < 0) {
FIH_RET(fih_rc);
}
Expand Down Expand Up @@ -222,7 +222,6 @@ decrypt_image_inplace(const struct flash_area *fa_p,
size_t sect_size;
size_t sect_count;
size_t sect;
uint8_t image_index;
struct flash_sector sector;

memset(&boot_data, 0, sizeof(struct boot_loader_state));
Expand All @@ -232,8 +231,6 @@ decrypt_image_inplace(const struct flash_area *fa_p,
rc = flash_area_get_sector(fa_p, boot_status_off(fa_p), &sector);


image_index = BOOT_CURR_IMG(state);

if(IS_ENCRYPTED(hdr)) {
#if 0 //Skip this step?, the image will just not boot if it's not decrypted properly
static uint8_t tmpbuf[BOOT_TMPBUF_SZ];
Expand All @@ -245,7 +242,7 @@ decrypt_image_inplace(const struct flash_area *fa_p,
#endif
memset(&boot_data, 0, sizeof(struct boot_loader_state));
/* Load the encryption keys into cache */
rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fa_p, bs);
rc = boot_enc_load(BOOT_CURR_ENC(state), 0, hdr, fa_p, bs);
if (rc < 0) {
FIH_RET(fih_rc);
}
Expand Down
2 changes: 1 addition & 1 deletion boot/bootutil/include/bootutil/enc_key.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ int boot_enc_init(struct enc_key_data *enc_state, uint8_t slot);
int boot_enc_drop(struct enc_key_data *enc_state, uint8_t slot);
int boot_enc_set_key(struct enc_key_data *enc_state, uint8_t slot,
const struct boot_status *bs);
int boot_enc_load(struct enc_key_data *enc_state, int image_index,
int boot_enc_load(struct enc_key_data *enc_state, int slot,
const struct image_header *hdr, const struct flash_area *fap,
struct boot_status *bs);
int boot_enc_decrypt(const uint8_t *buf, uint8_t *enckey);
Expand Down
9 changes: 1 addition & 8 deletions boot/bootutil/src/encrypted.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@ boot_enc_decrypt(const uint8_t *buf, uint8_t *enckey)
* Load encryption key.
*/
int
boot_enc_load(struct enc_key_data *enc_state, int image_index,
boot_enc_load(struct enc_key_data *enc_state, int slot,
const struct image_header *hdr, const struct flash_area *fap,
struct boot_status *bs)
{
Expand All @@ -619,15 +619,8 @@ boot_enc_load(struct enc_key_data *enc_state, int image_index,
#else
uint8_t buf[EXPECTED_ENC_LEN];
#endif
uint8_t slot;
int rc;

rc = flash_area_id_to_multi_image_slot(image_index, flash_area_get_id(fap));
if (rc < 0) {
return rc;
}
slot = rc;

/* Already loaded... */
if (enc_state[slot].valid) {
return 1;
Expand Down
20 changes: 9 additions & 11 deletions boot/bootutil/src/loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,6 @@ boot_image_check(struct boot_loader_state *state, struct image_header *hdr,
const struct flash_area *fap, struct boot_status *bs)
{
TARGET_STATIC uint8_t tmpbuf[BOOT_TMPBUF_SZ];
uint8_t image_index;
int rc;
FIH_DECLARE(fih_rc, FIH_FAILURE);

Expand All @@ -792,13 +791,11 @@ boot_image_check(struct boot_loader_state *state, struct image_header *hdr,
(void)bs;
(void)rc;

image_index = BOOT_CURR_IMG(state);

/* In the case of ram loading the image has already been decrypted as it is
* decrypted when copied in ram */
#if defined(MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_RAM_LOAD)
if (MUST_DECRYPT(fap, image_index, hdr)) {
rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fap, bs);
if (MUST_DECRYPT(fap, BOOT_CURR_IMG(state), hdr)) {
rc = boot_enc_load(BOOT_CURR_ENC(state), 1, hdr, fap, bs);
if (rc < 0) {
FIH_RET(fih_rc);
}
Expand All @@ -808,8 +805,9 @@ boot_image_check(struct boot_loader_state *state, struct image_header *hdr,
}
#endif

FIH_CALL(bootutil_img_validate, fih_rc, BOOT_CURR_ENC(state), image_index,
hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, NULL, 0, NULL);
FIH_CALL(bootutil_img_validate, fih_rc, BOOT_CURR_ENC(state),
BOOT_CURR_IMG(state), hdr, fap, tmpbuf, BOOT_TMPBUF_SZ,
NULL, 0, NULL);

FIH_RET(fih_rc);
}
Expand Down Expand Up @@ -1403,7 +1401,7 @@ boot_copy_image(struct boot_loader_state *state, struct boot_status *bs)

#ifdef MCUBOOT_ENC_IMAGES
if (IS_ENCRYPTED(boot_img_hdr(state, BOOT_SECONDARY_SLOT))) {
rc = boot_enc_load(BOOT_CURR_ENC(state), image_index,
rc = boot_enc_load(BOOT_CURR_ENC(state), BOOT_SECONDARY_SLOT,
boot_img_hdr(state, BOOT_SECONDARY_SLOT),
fap_secondary_slot, bs);

Expand Down Expand Up @@ -1527,7 +1525,7 @@ boot_swap_image(struct boot_loader_state *state, struct boot_status *bs)
#ifdef MCUBOOT_ENC_IMAGES
if (IS_ENCRYPTED(hdr)) {
fap = BOOT_IMG_AREA(state, BOOT_PRIMARY_SLOT);
rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fap, bs);
rc = boot_enc_load(BOOT_CURR_ENC(state), 0, hdr, fap, bs);
assert(rc >= 0);

if (rc == 0) {
Expand All @@ -1551,7 +1549,7 @@ boot_swap_image(struct boot_loader_state *state, struct boot_status *bs)
hdr = boot_img_hdr(state, BOOT_SECONDARY_SLOT);
if (IS_ENCRYPTED(hdr)) {
fap = BOOT_IMG_AREA(state, BOOT_SECONDARY_SLOT);
rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fap, bs);
rc = boot_enc_load(BOOT_CURR_ENC(state), 1, hdr, fap, bs);
assert(rc >= 0);

if (rc == 0) {
Expand Down Expand Up @@ -2748,7 +2746,7 @@ boot_decrypt_and_copy_image_to_sram(struct boot_loader_state *state,
goto done;
}

rc = boot_enc_load(BOOT_CURR_ENC(state), image_index, hdr, fap_src, &bs);
rc = boot_enc_load(BOOT_CURR_ENC(state), slot, hdr, fap_src, &bs);
if (rc < 0) {
goto done;
}
Expand Down
Loading