Skip to content

Commit

Permalink
drivers/efi/capsules.c: fix recording capsule size
Browse files Browse the repository at this point in the history
Signed-off-by: Sergii Dmytruk <[email protected]>
  • Loading branch information
SergiiDmytruk committed Sep 23, 2024
1 parent 82f16d2 commit 21c1c99
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/drivers/efi/capsules.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,7 @@ static void coalesce_capsules(struct block_descr block_chain, uint8_t *target)
{
struct block_descr block = block_chain;
uint8_t *capsule_start = NULL;
uint32_t capsule_size = 0;
uint32_t size_left = 0;

/* No safety checks in this function, as all of them were done earlier. */
Expand All @@ -616,8 +617,10 @@ static void coalesce_capsules(struct block_descr block_chain, uint8_t *target)
if (size_left == 0) {
const EFI_CAPSULE_HEADER *capsule_hdr =
map_range(block.addr, sizeof(*capsule_hdr));
size_left = capsule_hdr->CapsuleImageSize;
capsule_size = capsule_hdr->CapsuleImageSize;
capsule_start = target;

size_left = capsule_size;
}

uint64_t addr = block.addr;
Expand Down Expand Up @@ -647,13 +650,14 @@ static void coalesce_capsules(struct block_descr block_chain, uint8_t *target)
}

uefi_capsules[uefi_capsule_count].base = (uintptr_t)capsule_start;
uefi_capsules[uefi_capsule_count].len = block.len;
uefi_capsules[uefi_capsule_count].len = capsule_size;
uefi_capsule_count++;

/* This is to align start of the next capsule (assumes that
initial value of target was suitably aligned). */
if (!IS_ALIGNED(block.len, CAPSULE_ALIGNMENT))
target += ALIGN_UP(block.len, CAPSULE_ALIGNMENT) - block.len;
if (!IS_ALIGNED(capsule_size, CAPSULE_ALIGNMENT))
target += ALIGN_UP(capsule_size, CAPSULE_ALIGNMENT) -
capsule_size;
}
}

Expand Down

0 comments on commit 21c1c99

Please sign in to comment.