676: Fix potential unaligned write r=lulf a=lulf

Ensure 4 byte alignment of writes to boot magic.

Reduce log level

Co-authored-by: Ulf Lilleengen <lulf@redhat.com>
This commit is contained in:
bors[bot] 2022-03-22 13:44:33 +00:00 committed by GitHub
commit 5c68f0bae7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -315,11 +315,16 @@ impl FirmwareUpdater {
/// Instruct bootloader that DFU should commence at next boot. /// Instruct bootloader that DFU should commence at next boot.
pub async fn mark_update<F: AsyncNorFlash>(&mut self, flash: &mut F) -> Result<(), F::Error> { pub async fn mark_update<F: AsyncNorFlash>(&mut self, flash: &mut F) -> Result<(), F::Error> {
flash.write(self.state.from as u32, &[0, 0, 0, 0]).await?; #[repr(align(4))]
struct Aligned([u8; 4]);
flash
.write(self.state.from as u32, &Aligned([0; 4]).0)
.await?;
flash flash
.erase(self.state.from as u32, self.state.to as u32) .erase(self.state.from as u32, self.state.to as u32)
.await?; .await?;
info!( trace!(
"Setting swap magic at {} to 0x{:x}, LE: 0x{:x}", "Setting swap magic at {} to 0x{:x}, LE: 0x{:x}",
self.state.from, self.state.from,
&SWAP_MAGIC, &SWAP_MAGIC,
@ -333,7 +338,12 @@ impl FirmwareUpdater {
/// Mark firmware boot successfully /// Mark firmware boot successfully
pub async fn mark_booted<F: AsyncNorFlash>(&mut self, flash: &mut F) -> Result<(), F::Error> { pub async fn mark_booted<F: AsyncNorFlash>(&mut self, flash: &mut F) -> Result<(), F::Error> {
flash.write(self.state.from as u32, &[0, 0, 0, 0]).await?; #[repr(align(4))]
struct Aligned([u8; 4]);
flash
.write(self.state.from as u32, &Aligned([0; 4]).0)
.await?;
flash flash
.erase(self.state.from as u32, self.state.to as u32) .erase(self.state.from as u32, self.state.to as u32)
.await?; .await?;
@ -350,7 +360,7 @@ impl FirmwareUpdater {
data: &[u8], data: &[u8],
flash: &mut F, flash: &mut F,
) -> Result<(), F::Error> { ) -> Result<(), F::Error> {
info!( trace!(
"Writing firmware at offset 0x{:x} len {}", "Writing firmware at offset 0x{:x} len {}",
self.dfu.from + offset, self.dfu.from + offset,
data.len() data.len()