David Brown | 37f8afd | 2017-09-12 10:59:39 -0600 | [diff] [blame] | 1 | # MCUboot Release Notes |
| 2 | |
| 3 | - Table of Contents |
| 4 | {:toc} |
| 5 | |
Andrzej Puzdrowski | 6934463 | 2020-10-30 15:36:49 +0100 | [diff] [blame] | 6 | ## Version 1.7.0 |
| 7 | |
Andrzej Puzdrowski | e759661 | 2020-11-10 14:54:41 +0100 | [diff] [blame] | 8 | The 1.7.0 release of MCUBoot adds support for the Mbed-OS platform, |
| 9 | Equal slots (direct-xip) upgrade mode, RAM loading upgrade mode, |
| 10 | hardening against hardware level fault injection and timing attacks |
| 11 | and single image mode. |
Andrzej Puzdrowski | 6934463 | 2020-10-30 15:36:49 +0100 | [diff] [blame] | 12 | There are bug fixes, and associated imgtool updates as well. |
| 13 | |
| 14 | ### About this release |
| 15 | |
Andrzej Puzdrowski | e759661 | 2020-11-10 14:54:41 +0100 | [diff] [blame] | 16 | - Initial support for the Mbed-OS platform. |
Andrzej Puzdrowski | 6934463 | 2020-10-30 15:36:49 +0100 | [diff] [blame] | 17 | - Added possibility to enter deep sleep mode after mcuboot app execution |
| 18 | for cypress platform. |
| 19 | - Added hardening against hardware level fault injection and timing attacks. |
| 20 | - Introduced Abstract crypto primitives to simplify porting. |
| 21 | - Added RAM-load upgrade mode. |
| 22 | - Renamed single-image mode to single-slot mode. |
| 23 | - Allow larger primary slot in swap-move |
| 24 | - Fixed boostrapping in swap-move mode. |
| 25 | - Fixed issue causing that interrupted swap-move operation might brick device |
| 26 | if the primary image was padded. |
| 27 | - Abstracting mcuboot crypto functions for cleaner porting |
| 28 | - Droped flash_area_read_is_empty() porting API. |
| 29 | - boot/zephyr: Added watchdog feed on nRF devices. |
| 30 | See `CONFIG_BOOT_WATCHDOG_FEED` option. |
| 31 | - boot/zephyr: Added patch for turning off cache for Cortex M7 before |
| 32 | chain-loading. |
| 33 | - boot/zephyr: added option to relocate interrupts to application |
| 34 | - boot/zephyr: clean ARM core configuration only when selected by user |
| 35 | - boot/boot_serial: allow nonaligned last image data chunk |
| 36 | - imgtool: added custom TLV support. |
| 37 | - imgtool: added possibility to set confirm flag for hex files as well. |
| 38 | - imgtool: Print image digest during verify. |
| 39 | |
Andrzej Puzdrowski | a8e12da | 2020-11-25 15:59:22 +0100 | [diff] [blame] | 40 | ### Zephyr-RTOS Compatibility |
| 41 | |
| 42 | This release of MCUboot works with the Zephyr "master" at the time of the |
| 43 | release. It was tested as of has 7a3b253ce. This version of MCUboot also |
| 44 | works with the Zephyr v2.4.0, however it is recommended to enable |
| 45 | `CONFIG_MCUBOOT_CLEANUP_ARM_CORE` while using that version. |
| 46 | |
David Brown | 342e875 | 2020-04-15 10:57:28 -0600 | [diff] [blame] | 47 | ## Version 1.6.0 |
| 48 | |
| 49 | The 1.6.0 release of MCUboot adds support for the PSOC6 platform, |
| 50 | X25519 encrypted images, rollback protection, hardware keys, and a |
| 51 | shared boot record to communicate boot attestation information to |
| 52 | later boot stages. There are bug fixes, and associated imgtool |
| 53 | updates as well. |
| 54 | |
| 55 | ### About this release |
| 56 | |
| 57 | - Initial support for the Cypress PSOC6 plaformt. This platform |
| 58 | builds using the Cypress SDK, which has been added as submodules. |
| 59 | - CBOR decoding in serial recovery replaced by code generated from a |
| 60 | CDDL description. |
| 61 | - Add support for X25519 encrypted images. |
| 62 | - Add rollback protection. There is support for a HW rollback counter |
| 63 | (which must be provided as part of the platform), as well as a SW |
| 64 | solution that protects against some types of rollback. |
| 65 | - Add an optional boot record in shared memory to communicate boot |
| 66 | attributes to later-run code. |
| 67 | - Add support for hardware keys. |
| 68 | - Various fixes to work with the latest Zephyr version. |
| 69 | |
| 70 | ### Security issues addressed |
| 71 | |
| 72 | - CVE-2020-7595 "xmlStringLenDecodeEntities in parser.c in libxml2 |
| 73 | 2.9.10 has an infinite loop in a certain end-of-file situation." Fix |
| 74 | by updating a dependency in documentation generation. |
| 75 | |
David Brown | 82c5f7c | 2020-05-05 15:47:30 -0600 | [diff] [blame] | 76 | ### Zephyr-RTOS Compatibility |
| 77 | |
| 78 | This release of MCUboot works the Zephyr "master" at the time of the |
David Brown | 50d24a5 | 2020-05-22 10:23:42 -0600 | [diff] [blame] | 79 | release. It was tested as of has 1a89ca1238. When Zephyr v2.3.0 is |
| 80 | released, there will be a possible 1.6.1 or similar release of Zephyr |
David Brown | 82c5f7c | 2020-05-05 15:47:30 -0600 | [diff] [blame] | 81 | if needed to address any issues. There also may be branch releases of |
| 82 | MCUboot specifically for the current version of Zephyr, e.g. |
| 83 | v1.6.0-zephyr-2.2.1. |
| 84 | |
Fabio Utzig | ef7fbd7 | 2020-02-05 12:43:23 -0300 | [diff] [blame] | 85 | ## Version 1.5.0 |
| 86 | |
| 87 | The 1.5.0 release of MCUboot adds support for encrypted images using |
| 88 | ECIES with secp256r1 as an Elliptic Curve alternative to RSA-OAEP. A |
| 89 | new swap method was added which allows for upgrades without using a |
| 90 | scratch partition. There are also lots of bug fixes, extra simulator |
| 91 | testing coverage and some imgtool updates. |
| 92 | |
| 93 | ### About this release |
| 94 | |
| 95 | - TLVs were updated to use 16-bit lengths (from previous 8). This |
| 96 | should work with no changes for little-endian targets, but will |
| 97 | break compatibility with big-endian targets. |
| 98 | - A benchmark framework was added to Zephyr |
| 99 | - ed25519 signature validation can now build without using mbedTLS |
| 100 | by relying on a bundled tinycrypt based sha-512 implementation. |
| 101 | - imgtool was updated to correctly detect trailer overruns by image. |
| 102 | - Encrypted image TLVs can be saved in swap metadata during a swap |
| 103 | upgrade instead of the plain AES key. |
| 104 | - imgtool can dump private keys in C format (getpriv command), which |
| 105 | can be added as decryption keys. Optionally can remove superfluous |
| 106 | fields from the ASN1 by passing it `--minimal`. |
| 107 | - Lots of other smaller bugs fixes. |
| 108 | - Added downgrade prevention feature (available when the overwrite-based |
| 109 | image update strategy is used) |
| 110 | |
| 111 | ### Known issues |
| 112 | |
| 113 | - TLV size change breaks compatibility with big-endian targets. |
| 114 | |
David Brown | 4d0c5fa | 2019-10-08 09:57:31 -0600 | [diff] [blame] | 115 | ## Version 1.4.0 |
| 116 | |
| 117 | The 1.4.0 release of MCUboot primarily adds support for multi-image |
| 118 | booting. With this release, MCUboot can manage two images that can be |
| 119 | updated independently. With this, it also supports additions to the |
| 120 | TLV that allow these dependencies to be specified. |
| 121 | |
| 122 | Multi-image support adds backward-incompatible changes to the format |
| 123 | of the images: specifically adding support for protected TLV entries. |
| 124 | If multiple images and dependencies are not used, the images will be |
| 125 | compatible with previous releases of MCUboot. |
| 126 | |
| 127 | ### About this release |
| 128 | |
David Brown | d758177 | 2019-10-15 12:00:25 -0600 | [diff] [blame] | 129 | - Fixed CVE-2019-5477, and CVE-2019-16892. These fix issue with |
| 130 | dependencies used in the generation of the documentation on github. |
David Brown | 4d0c5fa | 2019-10-08 09:57:31 -0600 | [diff] [blame] | 131 | - Numerous code cleanups and refactorings |
| 132 | - Documentation updates for multi-image features |
| 133 | - Update imgtool.py to support the new features |
David Brown | d758177 | 2019-10-15 12:00:25 -0600 | [diff] [blame] | 134 | - Updated the mbed TLS submodule to current stable version 2.16.3 |
| 135 | - Moved the mbed TLS submodule from within sim/mcuboot-sys to ext. |
| 136 | This will make it easier for other board supports to use this code. |
| 137 | - Added some additional overflow and bound checks to data in the image |
| 138 | header, and TLV data. |
| 139 | - Add a `-x` (or `--hex_addr`) flag to imgtool to set the base address |
| 140 | written to a hex-format image. This allows the image to be flashed |
| 141 | at an offset, without having to use additional tools to modify the |
| 142 | image. |
David Brown | 4d0c5fa | 2019-10-08 09:57:31 -0600 | [diff] [blame] | 143 | |
Szymon Janc | 7fea846 | 2019-07-04 14:45:52 +0200 | [diff] [blame] | 144 | ## Version 1.3.1 |
| 145 | |
| 146 | The 1.3.1 release of MCUboot consists mostly of small bug fixes and updates. |
| 147 | There are no breaking changes in functionality. This release should work with |
| 148 | Mynewt 1.6.0 and up, and any Zephyr `master` after sha |
| 149 | f51e3c296040f73bca0e8fe1051d5ee63ce18e0d. |
| 150 | |
| 151 | ### About this release |
| 152 | |
| 153 | - Fixed a revert interruption bug |
| 154 | - Added ed25519 signing support |
| 155 | - Added RSA-3072 signing support |
| 156 | - Allow ec256 to run on CC310 interface |
| 157 | - Some preparation work was done to allow for multi image support, which |
| 158 | should land in 1.4.0. This includes a simulator update for testing |
| 159 | multi-images, and a new name for slot0/slot1 which are now called |
| 160 | "primary slot" and "secondary slot". |
| 161 | - Other minor bugfixes and improvements |
| 162 | |
David Brown | b1d15a7 | 2019-01-22 16:22:08 -0700 | [diff] [blame] | 163 | ## Version 1.3.0 |
| 164 | |
| 165 | The 1.3.0 release of MCUboot brings in many fixes and updates. There |
| 166 | are no breaking changes in functionality. Many of the changes are |
| 167 | refactorings that will make the code easier to maintain going forward. |
| 168 | In addition, support has been added for encrypted images. See [the |
| 169 | docs](encrypted_images.md) for more information. |
| 170 | |
| 171 | ### About this release |
| 172 | |
| 173 | - Modernize the Zephyr build scripts. |
| 174 | - Add a `ptest` utility to help run the simulator in different |
| 175 | configurations. |
| 176 | - Migrate the simulator to Rust 2018 edition. The sim now requires at |
| 177 | least Rust 1.32 to build. |
| 178 | - Simulator cleanups. The simulator code is now built the same way |
| 179 | for every configuration, and queries the MCUboot code for how it was |
| 180 | compiled. |
| 181 | - Abstract logging in MCUboot. This was needed to support the new |
| 182 | logging system used in Zephyr. |
| 183 | - Add multiple flash support. Allows slot1/scratch to be stored in an |
| 184 | external flash device. |
| 185 | - Add support for [encrypted images](encrypted_images.md). |
| 186 | - Add support for flash devices that read as '0' when erased. |
| 187 | - Add support to Zephyr for the `nrf52840_pca10059`. This board |
| 188 | supports serial recovery over USB with CDC ACM. |
| 189 | - imgtool is now also available as a python package on pypi.org. |
| 190 | - Add an option to erase flash pages progressively during recovery to |
| 191 | avoid possible timeouts (required especially by serial recovery |
| 192 | using USB with CDC ACM). |
| 193 | - imgtool: big-endian support |
| 194 | - imgtool: saves in intel-hex format when output filename has `.hex` |
| 195 | extension; otherwise saves in binary format. |
| 196 | |
Fabio Utzig | 3c93901 | 2018-06-25 13:26:32 -0300 | [diff] [blame] | 197 | ## Version 1.2.0 |
| 198 | |
| 199 | The 1.2.0 release of MCUboot brings a lot of fixes/updates, where much of the |
| 200 | changes were on the boot serial functionality and imgtool utility. There are |
| 201 | no breaking changes in MCUBoot functionality, but some of the CLI parameters |
| 202 | in imgtool were changed (either removed or added or updated). |
| 203 | |
| 204 | ### About this release |
| 205 | |
| 206 | - imgtool accepts .hex formatted input |
| 207 | - Logging system is now configurable |
| 208 | - Most Zephyr configuration has been switched to Kconfig |
| 209 | - Build system accepts .pem files in build system to autogenerate required |
| 210 | key arrays used internally |
| 211 | - Zephyr build switched to using built-in flash_map and TinyCBOR modules |
| 212 | - Serial boot has substantially decreased in space usage after refactorings |
| 213 | - Serial boot build doesn't require newlib-c anymore on Zephyr |
| 214 | - imgtool updates: |
| 215 | + "create" subcommand can be used as an alias for "sign" |
| 216 | + To allow imgtool to always perform the check that firmware does not |
| 217 | overflow the status area, `--slot-size` was added and `--pad` was updated |
| 218 | to act as a flag parameter. |
| 219 | + `--overwrite-only` can be passed if not using swap upgrades |
| 220 | + `--max-sectors` can be used to adjust the maximum amount of sectors that |
| 221 | a swap can handle; this value must also be configured for the bootloader |
| 222 | + `--pad-header` substitutes `--included-header` with reverted semantics, |
| 223 | so it's not required for firmware built by Zephyr build system |
| 224 | |
| 225 | ### Known issues |
| 226 | |
| 227 | None |
| 228 | |
Fabio Utzig | 49045cc | 2018-01-09 15:56:29 -0200 | [diff] [blame] | 229 | ## Version 1.1.0 |
| 230 | |
Carles Cufi | 90eda80 | 2018-01-29 18:33:20 +0100 | [diff] [blame] | 231 | The 1.1.0 release of MCUboot brings a lot of fixes/updates to its |
Fabio Utzig | 49045cc | 2018-01-09 15:56:29 -0200 | [diff] [blame] | 232 | inner workings, specially to its testing infrastructure which now |
| 233 | enables a more thorough quality assurance of many of the available |
| 234 | options. As expected of the 1.x.x release cycle, no breaking changes |
| 235 | were made. From the tooling perpective the main addition is |
| 236 | newt/imgtool support for password protected keys. |
| 237 | |
| 238 | ### About this release |
| 239 | |
| 240 | - serial recovery functionality support under Zephyr |
| 241 | - simulator: lots of refactors were applied, which result in the |
| 242 | simulator now leveraging the Rust testing infrastructure; testing |
| 243 | of ecdsa (secp256r1) was added |
| 244 | - imgtool: removed PKCS1.5 support, added support for password |
| 245 | protected keys |
| 246 | - tinycrypt 0.2.8 and the mbed-tls ASN1 parser are now bundled with |
| 247 | mcuboot (eg secp256r1 is now free of external dependencies!) |
| 248 | - Overwrite-only mode was updated to erase/copy only sectors that |
| 249 | actually store firmware |
| 250 | - A lot of small code and documentation fixes and updates. |
| 251 | |
| 252 | ### Known issues |
| 253 | |
| 254 | None |
| 255 | |
David Brown | 37f8afd | 2017-09-12 10:59:39 -0600 | [diff] [blame] | 256 | ## Version 1.0.0 |
| 257 | |
Carles Cufi | 90eda80 | 2018-01-29 18:33:20 +0100 | [diff] [blame] | 258 | The 1.0.0 release of MCUboot introduces a format change. It is |
David Brown | 37f8afd | 2017-09-12 10:59:39 -0600 | [diff] [blame] | 259 | important to either use the `imgtool.py` also from this release, or |
| 260 | pass the `-2` to recent versions of the `newt` tool in order to |
| 261 | generate image headers with the new format. There should be no |
| 262 | incompatible format changes throughout the 1.x.y release series. |
| 263 | |
| 264 | ### About this release |
| 265 | |
| 266 | - Header format change. This change was made to move all of the |
| 267 | information about signatures out of the header and into the TLV |
| 268 | block appended to the image. This allows |
| 269 | - The signature to be replaced without changing the image. |
| 270 | - Multiple signatures to be applied. This can be used, for example, |
| 271 | to sign an image with two algorithms, to support different |
| 272 | bootloader configurations based on these image. |
| 273 | - The public key is referred to by its SHA1 hash (or a prefix of the |
| 274 | hash), instead of an index that has to be maintained with the |
| 275 | bootloader. |
| 276 | - Allow new types of signatures in the future. |
| 277 | - Support for PKCS#1 v1.5 signatures has been dropped. All RSA |
| 278 | signatures should be made with PSS. The tools have been changed to |
| 279 | reflect this. |
| 280 | - The source for Tinycrypt has been placed in the MCUboot tree. A |
| 281 | recent version of Tinycrypt introduced breaking API changes. To |
| 282 | allow MCUboot to work across various platforms, we stop using the |
| 283 | Tinycrypt bundled with the OS platform, and use our own version. A |
| 284 | future release of MCUboot will update the Tinycrypt version. |
| 285 | - Support for some new targets: |
| 286 | - Nordic nRF51 and nRF52832 dev kits |
| 287 | - Hexiwear K64 |
| 288 | - Clearer sample applications have been added under `samples`. |
Fabio Utzig | 4dce6aa | 2018-02-12 15:31:32 -0200 | [diff] [blame] | 289 | - Test plans for [zephyr](testplan-zephyr.md), and |
| 290 | [mynewt](testplan-mynewt.md). |
David Brown | 37f8afd | 2017-09-12 10:59:39 -0600 | [diff] [blame] | 291 | - The simulator is now able to test RSA signatures. |
| 292 | - There is an unimplemented `load_addr` header for future support for |
| 293 | RAM loading in the bootloader. |
| 294 | - Numerous documentation. |
| 295 | |
| 296 | ### Known issues |
| 297 | |
| 298 | None |
| 299 | |
| 300 | ## Version 0.9.0 |
| 301 | |
Carles Cufi | 90eda80 | 2018-01-29 18:33:20 +0100 | [diff] [blame] | 302 | This is the first release of MCUboot, a secure bootloader for 32-bit MCUs. |
David Brown | 37f8afd | 2017-09-12 10:59:39 -0600 | [diff] [blame] | 303 | It is designed to be operating system-agnostic and works over any transport - |
| 304 | wired or wireless. It is also hardware independent, and relies on hardware |
| 305 | porting layers from the operating system it works with. For the first release, |
| 306 | we have support for three open source operating systems: Apache Mynewt, Zephyr |
| 307 | and RIOT. |
| 308 | |
| 309 | ### About this release |
| 310 | |
| 311 | - This release supports building with and running Apache Mynewt and Zephyr |
| 312 | targets. |
| 313 | - RIOT is supported as a running target. |
| 314 | - Image integrity is provided with SHA256. |
| 315 | - Image originator authenticity is provided supporting the following |
| 316 | signature algorithms: |
| 317 | - RSA 2048 and RSA PKCS#1 v1.5 or v2.1 |
| 318 | - Elliptic curve DSA with secp224r1 and secp256r1 |
| 319 | - Two firmware upgrade algorithms are provided: |
| 320 | - An overwrite only which upgrades slot 0 with the image in slot 1. |
| 321 | - A swapping upgrade which enables image test, allowing for rollback to a |
| 322 | previous known good image. |
| 323 | - Supports both mbed-TLS and tinycrypt as backend crypto libraries. One of them |
| 324 | must be defined and the chosen signing algorithm will require a particular |
| 325 | library according to this list: |
| 326 | - RSA 2048 needs mbed TLS |
| 327 | - ECDSA secp224r1 needs mbed TLS |
| 328 | - ECDSA secp256r1 needs tinycrypt as well as the ASN.1 code from mbed TLS |
| 329 | (so still needs that present). |
| 330 | |
| 331 | ### Known issues |
| 332 | |
| 333 | - The image header and TLV formats are planned to change with release 1.0: |
| 334 | https://runtimeco.atlassian.net/browse/MCUB-66 |