aboutsummaryrefslogtreecommitdiff
path: root/embassy-boot/boot/src/lib.rs
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2023-06-19 22:37:23 +0200
committerUlf Lilleengen <[email protected]>2023-06-19 22:39:00 +0200
commit76659d9003104f8edd2472a36149565e4a55c0e6 (patch)
tree9bbfca44bc301294c2021f6d18fd765b96382656 /embassy-boot/boot/src/lib.rs
parent3c70f799a28f5f28d84fa8ee8b4b232f5e9aad82 (diff)
Prevent accidental revert when using firmware updater
This change prevents accidentally overwriting the previous firmware before the new one has been marked as booted.
Diffstat (limited to 'embassy-boot/boot/src/lib.rs')
-rw-r--r--embassy-boot/boot/src/lib.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/embassy-boot/boot/src/lib.rs b/embassy-boot/boot/src/lib.rs
index 45a87bd0e..016362b86 100644
--- a/embassy-boot/boot/src/lib.rs
+++ b/embassy-boot/boot/src/lib.rs
@@ -51,6 +51,8 @@ impl<const N: usize> AsMut<[u8]> for AlignedBuffer<N> {
51 51
52#[cfg(test)] 52#[cfg(test)]
53mod tests { 53mod tests {
54 #![allow(unused_imports)]
55
54 use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 56 use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
55 #[cfg(feature = "nightly")] 57 #[cfg(feature = "nightly")]
56 use embedded_storage_async::nor_flash::NorFlash as AsyncNorFlash; 58 use embedded_storage_async::nor_flash::NorFlash as AsyncNorFlash;
@@ -120,9 +122,13 @@ mod tests {
120 dfu: flash.dfu(), 122 dfu: flash.dfu(),
121 state: flash.state(), 123 state: flash.state(),
122 }); 124 });
123 block_on(updater.write_firmware(0, &UPDATE)).unwrap(); 125 block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)).unwrap();
124 block_on(updater.mark_updated(&mut aligned)).unwrap(); 126 block_on(updater.mark_updated(&mut aligned)).unwrap();
125 127
128 // Writing after marking updated is not allowed until marked as booted.
129 let res: Result<(), FirmwareUpdaterError> = block_on(updater.write_firmware(&mut aligned, 0, &UPDATE));
130 assert!(matches!(res, Err::<(), _>(FirmwareUpdaterError::BadState)));
131
126 let flash = flash.into_blocking(); 132 let flash = flash.into_blocking();
127 let mut bootloader = BootLoader::new(BootLoaderConfig { 133 let mut bootloader = BootLoader::new(BootLoaderConfig {
128 active: flash.active(), 134 active: flash.active(),
@@ -188,7 +194,7 @@ mod tests {
188 dfu: flash.dfu(), 194 dfu: flash.dfu(),
189 state: flash.state(), 195 state: flash.state(),
190 }); 196 });
191 block_on(updater.write_firmware(0, &UPDATE)).unwrap(); 197 block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)).unwrap();
192 block_on(updater.mark_updated(&mut aligned)).unwrap(); 198 block_on(updater.mark_updated(&mut aligned)).unwrap();
193 199
194 let flash = flash.into_blocking(); 200 let flash = flash.into_blocking();
@@ -230,7 +236,7 @@ mod tests {
230 dfu: flash.dfu(), 236 dfu: flash.dfu(),
231 state: flash.state(), 237 state: flash.state(),
232 }); 238 });
233 block_on(updater.write_firmware(0, &UPDATE)).unwrap(); 239 block_on(updater.write_firmware(&mut aligned, 0, &UPDATE)).unwrap();
234 block_on(updater.mark_updated(&mut aligned)).unwrap(); 240 block_on(updater.mark_updated(&mut aligned)).unwrap();
235 241
236 let flash = flash.into_blocking(); 242 let flash = flash.into_blocking();