Commit Graph

1044 Commits

Author SHA1 Message Date
Jamie McCrae 827118f2e4 boot: serial_recovery: Add image hash support
Adds support for outputting the image hash TLV in serial recovery
mode, which is needed to comply with the img_mgmt MCUmgr group
requirements.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-03-23 10:25:38 +01:00
Piotr Dymacz f5e7753b9e boot_serial: support fragmentation for outgoing SMP packets
The mcumgr packet sent over serial should be fragmented into frames of
up to 127 bytes, including 2-bytes frame start header and 1-byte for
terminating newline [1], resulting in up to 124 bytes for the base64
encoded payload.

Current implementation doesn't fulfill above requirement and transmits
single frames, without considering their length. This change introduces
support for fragmenting as defined in 'SMP over console' specification.

[1] github.com/apache/mynewt-mcumgr/blob/master/transport/smp-console.md

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
2023-03-21 15:10:12 +01:00
Dominik Ermel 1090d8ffc0 zephyr: Check zephyr,uart-mcumgr as candidate for serial recovery
The commit modifies selection of boot serial UART by first checking
the Zephyr chosen zephyr,uart-mcumgr and then reverting to the
zephyr,console, as a secondary candidate.
In case when both nodes are present and point to the same device,
error will be reported.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-20 17:16:42 +01:00
Dominik Ermel 143485e35b zephyr: Add missing Kconfig dependencies for USB DFU
USB DFU depends on MULTITHREADING and STREAM_FLASH, and these
should be explicitly selected.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-17 15:30:58 +01:00
Szymon Janc 874a0ab4d5 boot_serial: Fix Mynewt tests build
__packed may not be available in all environments. In such
case just fallback to  __attribute__((__packed__)).

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2023-03-17 07:53:19 -03:00
Dominik Ermel c89a94f120 mynewt: Add flash_area_get_sector
Simple stub of flash_area_get_sector using system provided
flash_area_sector_from_off.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-15 20:15:58 +01:00
Stephane Le Roy 259d989f2e bootutil: Fix erase of trailer when located in scratch area
Trailer is temporary located in scratch when data of image goes up to last
sector of primary slot. At the end of the swap procedure, the temporary
trailer in scratch must be erased to prevent mcuboot from reading a stale
status from the scratch area. The erase tentative was not correct, this
is fixed.Issue is easily reproduced with an image size of one sector.

Signed-off-by: Stephane Le Roy <stephane.leroy@st.com>
Signed-off-by: Michel Jaouen <michel.jaouen@st.com>
2023-03-15 15:12:24 -03:00
Jamie McCrae e8294b2af5 boot_serial: Add packed to struct
Adds a packed attribute to the nmgr struct to avoid issues on
architectures that do not support unaligned memory access.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-03-15 09:23:04 +01:00
Dominik Ermel 68dcc0ee10 zephyr: single_loader: Switch to flash_area_get_sector
Use flash_area_get_sector instead of flash_area_sector_from_off.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-14 08:13:20 -06:00
Dominik Ermel 2476988309 boot: Switch to flash_area_get_sector.
Replace flash_area_sector_from_off calls with flash_area_get_sector.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-14 08:13:20 -06:00
Dominik Ermel bd0d94ce4b espressif: Add flash_area_get_sector
Commits adds implementation of flash_area_get_sector that
is supposed to replace flash_area_sector_from_off.
The flash_area_get_sector gets additional parameter of flash_area
type, while flash_area_sector_from_off uses hardcoded flash_area.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-14 08:13:20 -06:00
Dominik Ermel 069aea48a2 zephry: Add flash_area_get_sector
Commits adds implementation of flash_area_get_sector that
is supposed to replace flash_area_sector_from_off.
The flash_area_get_sector gets additional parameter of flash_area
type, while flash_area_sector_from_off uses hardcoded flash_area.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-14 08:13:20 -06:00
Jamie McCrae 9551b6ef03 boot: zephyr: Remove deprecated GPIO Kconfig entries
Removes the old deprecated Kconfig items for configuring GPIO ports
and pins for entering serial recovery/USB DFU mode. These were
deprecated almost a year ago and should not be used as device tree
has long replaced them.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-03-13 13:22:37 +01:00
Jamie McCrae dc8ef87932 zephyr: serial_recovery: Use Zephyr manifest zcbor files
Switches from using the zcbor files in-tree to using the ones that
are part of the zephyr manifest, this prevents using old and
potentially buggy versions of the zcbor library.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-03-13 13:19:27 +01:00
Jamie McCrae b56a65f5cb zephyr: serial_recovery: Fix missing limit on buffer size
Fixes an issue whereby the unaligned memory buffer does not
have limits applied to it.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-03-01 15:39:54 +01:00
Dominik Ermel 0119cdb570 zephyr: Add missing flash_map.h to sysflash.h
The sysflash.h defines FLASH_AREA_ macros using FIXED_PARTITION
macros that are provided by flash_map.h, but it does not include
the required header.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-03-01 15:37:22 +01:00
INFINEON\DovhalA 94360d5b2f Fix possible array index overflow in loader.c: fill_rsp()
Signed-off-by: INFINEON\DovhalA <Artem.Dovhal@infineon.com>
2023-02-28 08:08:35 -07:00
Dominik Ermel 472d4c7fed bootutil: Pass flash_area to boot_read_swap_size
Modifies boot_read_swap_size and boot_read_enc_key to use
flash_area object pointer instead of image index.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-28 08:06:10 -07:00
Jamie McCrae 9e8eddcecb boot: zephyr: Clean up before chainloading by default
This changes the default mcuboot configuration for zephyr
applications to clean up before booting the user application. The
reason for this change is that mcuboot may configure protection (e.g.
MPU stack guard) which is then used by the user application during
its startup code prior to cleaning the configuration up, this can
lead to a unbootable application and potentially irrecoverable
module, therefore cleaning up is now being enabled by default.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-02-27 15:20:50 +01:00
Sherry Zhang 120b7182ae FIH: Fix possible static check error caused by FIH_DECLARE
Signed-off-by: Sherry Zhang <sherry.zhang2@arm.com>
Change-Id: I970582777018094d0cbf83d3131a7d5c576035e5
2023-02-27 11:25:33 +01:00
Dominik Ermel c68a600403 bootutil: Little rework of boot_find_status
In rework:
  - size has been removed from array, as it has been making array
    at least of two elements, even if scratch partition not used;
  - some variables have been localized and some removed;
  - no longer returning rc codes from flash_area_ functions on
    failure, just single point of failure-exit - it made no sense
    anyway as we can not recover from flash failure;
  - flash area pointer is now NULLified on failure, or when
    status not found.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-22 08:51:18 -07:00
Dominik Ermel 23a7a2e61f bootutil: Move duplicate static inline functions to one header
The commit moves static common functions that have duplicate
definitions in bootutil_public.c and bootutil_misc.c to header
file to be included by both files.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-22 08:49:31 -07:00
Jamie McCrae aee388aefa zephyr: serial_recovery: Fix confusing/wrong Kconfig values
Fixes some confusing Kconfig values to have values that make
sense for the underlying SMP transport.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-02-17 15:53:57 +01:00
Jamie McCrae cde363926b zephyr: serial_recovery: Make receive buffers configurable
This allows making the number of receive buffers configurable
instead of being fixed at 2.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-02-17 15:53:57 +01:00
Dominik Ermel 453e8bd7de flash_map_backend: Remove flash_area_id_to_image_slot
The function has not been in use and some ports have not been
implementing it anyway.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-14 16:40:21 -07:00
Dominik Ermel b26fc487ee boot/boot_serial: Add boot_reset_request_hook to bs_reset
When hooks are enabled then boot_reset_request_hook will be
called to check whether it is allowed to reset a device.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-14 16:33:34 -07:00
Dominik Ermel ad35e2b227 boot/bootutil: Provide prototype for boot_reset_request_hook
Provide prototype for a new hook boot_reset_request_hook
which is called when device is requested to reboot.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-14 16:33:34 -07:00
Dominik Ermel a4c725109d zephyr: Remove FLASH_AREA_IMAGE_SCRATCH from single app config
Does not have to be set anymore when CONFIG_SINGLE_APPLICATION_SLOT
is set.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-14 08:42:15 -07:00
Dominik Ermel d546079707 bootutil: Don't default to scratch when single app is used
When MCUBOOT_SINGLE_APPLICATION_SLOT is set then the app can
only be overwritten with new image and scratch algorithm
is not used. The configuration logic would default
MCUBOOT_SWAP_USING_SCRATCH to 1 because it was lacking
check for MCUBOOT_SINGLE_APPLICATION_SLOT.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2023-02-14 08:42:15 -07:00
Daniel DeGrasse 8e8b5455bc boot: zephyr: add support for RT595
Add support for RT595 to MCUBoot. A larger number of max sectors is
required due to the large flash size present on the RT595 EVK.

Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
2023-02-14 08:33:53 -07:00
Jamie McCrae 9315654d79 zephyr: Disable and deprecate flash erase
This deprecates the flash erase Kconfig for zephyr, if this action
is required then the board should be flashed using west with the
`--erase` argument supplied instead.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-02-14 10:48:27 +01:00
Fabio Utzig 74530753b4 bootutil: fix swap with move reset issue
Fix a swap corruption which occurs on the swap move algorithm when a
reset happens exactly at the point after the last move up, and its
status update. On restart the image headers should be read at the 2nd
sector of the primary slot, but due to lacking initialization it is
read on the first sector, and then fails. This error was masked on the
simulator because of the use of a global variable, which retained its
value on a "reset simulation".

Fixes #1588

Signed-off-by: Fabio Utzig <utzig@apache.org>
2023-02-09 20:15:02 -03:00
Almir Okato bfdf934e3a espressif: ci: Add new building jobs configs for Espressif chips
Add jobs for testing build ESP32-XX within more features:
Serial Recovery, Multi Image and Multi Boot

Signed-off-by: Almir Okato <almir.okato@espressif.com>
2023-02-03 18:05:07 -03:00
Michael Grand 5047f032c9 fih: Hardening of fault injection countermeasures
Returned values are now hardcoded. Indeed, while it is not
strictly needed (few return values different from SUCCESS
or FAILURE) complexity added by encoding return values might
cause the software to be vulnerable to fault attacks.

Return type changed from fih_int to fih_ret to make
the whole thing much simpler and therefore more robust
to fault attacks. In addition, its easier to predict
compiler behavior.

Affectation of sentive variables has been hardened using macro
FIH_SET (affectation + check wether write access has been properly
done). FIH_DECLARE() is added to ease the declaration of sentive
variables.

Equality tests fih_eq() and fih_not_eq() are now macros because
inlining produce more complex code (and weaker) than macros.
In addition fih_not_eq is modified to be the negation of fih_eq
which was not the case until now.

when FIH_NOT_EQ is used , FIH_SET(fih_rc, FIH_FAILURE) has been added
in some part of the code.

variable image_mask (bootutil_priv.h) is now volatile because a
double IF test is made on it.

some others parts of the code have been hardenned (eg. loop on images)

Signed-off-by: Michael Grand <m.grand@trustngo.tech>
2023-01-30 09:34:34 -07:00
Almir Okato 78d50b2f07 espressif:ESP32-S3: Fix multiboot APP CPU start
Add missing function for starting the APP CPU when booting the
second image (multi image).

Signed-off-by: Almir Okato <almir.okato@espressif.com>
2023-01-24 22:56:02 -03:00
Piotr Dymacz 4427e4c977 boot: zephyr: allow timeout based recovery with CDC ACM
This makes it possible to enable timeout (BOOT_SERIAL_WAIT_FOR_DFU) mode
for the serial recovery when using CDC ACM based serial device. This was
runtime tested on nRF52840-Dongle.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
2023-01-16 10:37:16 +01:00
Joakim Andersson 90b8f69040 boot: zephyr: Only call sys_clock_disable when supported
Only call sys_clock_disable when the system clock driver support
this feature.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2023-01-13 16:49:10 +01:00
Fabio Utzig 4a748bfefa mynewt: add flash sector requirement for swap move
Add basic flash_sector struct and offset calculation routines. This
fixes the build using swap move, because this data is required to
calculate the maximum image size.

Fixes #1567

Signed-off-by: Fabio Utzig <utzig@apache.org>
2023-01-06 17:41:03 -03:00
Jamie McCrae 9d3fd7f7eb boot_serial: Add unaligned stack buffer writing
Fixes a bug when writing to devices which have memory alignment
requirements with data being using directly from a zcbor-response
whereby the alignment of the buffer data does not meet the
requirements of the flash driver.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023-01-03 12:18:54 +01:00
Jamie McCrae d165e9b2a5 boot: zephyr: boards: nrf52840dk: Fix overlay
Fixes an issue with a node which has been removed from zephyr.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2022-12-20 15:25:07 +01:00
Almir Okato 84da51b646 espressif: add downgrade prevention feature
Signed-off-by: Almir Okato <almir.okato@espressif.com>
2022-12-19 11:02:55 -03:00
Jamie McCrae ad1fb3dde2 boot_serial: Allow using a buffer larger than 512 bytes
There are 3 levels of buffers and only the first one seems to be
configurable, this fixes that issue.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2022-12-04 13:20:46 +01:00
Jamie McCrae 0b6d3439bb boot_serial: Fix rc not being returned as a signed value
Fixes an issue whereby rc is a signed variable but is returned as
an unsigned variable in the zcbor functions.

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2022-12-02 22:52:48 +01:00
Mark Horvath 7ebf0e8277 bootutil: Fix bootutil_find_key return value
The return value of bootutil_find_key is used as the key_id in the
bootutil_img_validate function, and negative key_id value used in case
of errors. If MCUBOOT_HW_KEY is set, than the key hash is read by
boot_retrieve_public_key_hash function, but the exceptation is only to
return nonzero on failure, so its error code should not be propagated
up to the caller. Instead, bootutil_find_key should return -1 in case
of a platform error.

Change-Id: I8e2bd12a5cf53787e10ae45c2ab556e8a856692d
Signed-off-by: Mark Horvath <mark.horvath@arm.com>
2022-11-25 17:54:03 +01:00
Torsten Rasmussen 82ee5d0bb9 zephyr: fix handling of devicetree overlays in mcuboot
The current specific setting of devicetree overlay files using `set()`
has a couple of built-in flaws.

It keeps readding the overlay file on each subsequent CMake invocation.
The build command (make/ninja), will automatically invoke CMake if there
are any changes to files used as configure time dependencies.

This can easily be seen by manually re-invoking CMake:
```
 # First invocation
$ cmake -DBOARD=nrf52840dk_nrf52840  -DDTC_OVERLAY_FILE=custom.dts ..
Loading Zephyr default modules (Zephyr workspace).
-- Application: /projects/github/ncs/bootloader/mcuboot/boot/zephyr
...
-- Found devicetree overlay: custom.dts
-- Found devicetree overlay: bootloader/mcuboot/boot/zephyr/dts.overlay

 # Second invocation
$ cmake -DBOARD=nrf52840dk_nrf52840  -DDTC_OVERLAY_FILE=custom.dts ..
Loading Zephyr default modules (Zephyr workspace).
-- Application: /projects/github/ncs/bootloader/mcuboot/boot/zephyr
...
-- Found devicetree overlay: custom.dts
-- Found devicetree overlay: mcuboot/boot/zephyr/dts.overlay
-- Found devicetree overlay: mcuboot/boot/zephyr/dts.overlay
```

Zephyr has built-in support for application specific overlay config
which gets automatically applied when the overlay file is named:
`app.overlay`.

Therefore rename `dts.overlay` to `app.overlay`.
Ref: https://docs.zephyrproject.org/3.2.0/build/dts/howtos.html \
  #set-devicetree-overlays

This change further allows users of mcuboot to place their mcuboot
configuration out-of-tree of the sample by using the
`APPLICATION_CONFIG_DIR` setting.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
2022-11-24 08:55:20 +01:00
Dominik Ermel e009e19bd9 zephyr: Explicitly select CONFIG_CRC for CONFIG_MCUBOOT_SERIAL
The serial recovery depends on CRC from Zephyr, which it should
have been selecting explicitly.

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
2022-11-21 16:25:34 +01:00
Kamil Piszczek a1de4e55ef boot: zephyr: remove thingy53_nrf5340_cpuapp.conf board configuration
Removed the board configuration for Thingy:53 Application Core as it
contains references to the Kconfig modules that are not available in
the upstream Zephyr. The current configuration is set up to work
in the nRF Connect SDK environment and should be moved there.

Signed-off-by: Kamil Piszczek <Kamil.Piszczek@nordicsemi.no>
2022-11-15 10:41:36 +01:00
Xiang Xiao 36bac4f6a5 Fix error: format '%u' expects argument of type 'unsigned int', but argument 5 has type 'uint32_t'
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
2022-11-14 11:10:08 -03:00
Thomas Stranger aa217e2313 boot: zephyr: prefer swap move if scratch_partition not enabled
With the exception of nrf targets BOOT_SWAP_USING_SCRATCH mode was
still the default algorithm.

Changing the preferred mode in cases where no scratch_partition is
defined will allow successfully building mcuboot for such boards w/o
the need for any board specific overlays.

Signed-off-by: Thomas Stranger <thomas.stranger@outlook.com>
2022-11-14 14:38:41 +01:00
Almir Okato fc1eabf6bb boot_serial: espressif: ESP32-S3 serial recovery mode interface
Add the serial adapter for ESP32-S3 for boot recovery and MCUMGR
communication.

Signed-off-by: Almir Okato <almir.okato@espressif.com>
2022-11-11 11:22:00 -03:00