The latest development version of this page may be more current than this released 2.7.5 version.

Zephyr 2.7.5

This is an LTS maintenance release with fixes.

Issues Fixed

These GitHub issues were addressed since the previous 2.7.4 tagged release:

  • 41111 - utils: tmcvt: fix integer overflow after 6.4 days with gettimeofday() and z_tmcvt()

  • 51663 - tests: kernel: increase coverage for kernel and mmu tests

  • 53124 - bmake: fix argument passing in zephyr_check_compiler_flag() cmake function

  • 53315 - net: tcp: fix possible underflow in tcp_flags().

  • 53981 - scripts: fixes for gen_syscalls and gen_app_partitions

  • 53983 - init: correct early init time calls to k_current_get() when TLS is enabled

  • 54140 - net: fix BUS FAULT when running nmap towards echo_async sample

  • 54325 - coredump: support out-of-tree coredump backend definition

  • 54386 - kernel: correct SMP scheduling with more than 2 CPUs

  • 54527 - tests: kernel: remove faulty test from tests/kernel/poll

  • 55019 - bluetooth: initialize backport of #54905 failed

  • 55068 - net: ipv6: validate arguments in net_if_ipv6_set_reachable_time()

  • 55069 - net: core: net pkt shell command missing input validation

  • 55323 - logging: fix userspace runtime filtering

  • 55490 - cxx: fix compile error in C++ project for bad flags -Wno-pointer-sign and -Werror=implicit-int

  • 56071 - security: MbedTLS: update to v2.28.3

  • 56729 - posix: SCHED_RR valid thread priorities

  • 57210 - drivers: pcie: endpoint: pcie_ep_iproc: correct use of optional devicetree binding

  • 57419 - tests: dma: support 64-bit addressing in tests

  • 57710 - posix: support building eventfd on arm-clang


Moving mbedTLS to 2.28.x series (2.28.3 precisely). This is a LTS release that will be supported with bug fixes and security fixes until the end of 2024.

Detailed information can be found in:

This version is incompatible with TF-M and because of this TF-M is no longer supported in Zephyr LTS. If TF-M is required it can be manually added back changing the mbedTLS revision on west.yaml to the previous one (5765cb7f75a9973ae9232d438e361a9d7bbc49e7). This should be carefully assessed by a security expert to ensure that the know vulnerabilities in that version don’t affect the product.

Vulnerabilities addressed in this update:

  • MBEDTLS_AESNI_C, which is enabled by default, was silently ignored on builds that couldn’t compile the GCC-style assembly implementation (most notably builds with Visual Studio), leaving them vulnerable to timing side-channel attacks. There is now an intrinsics-based AES-NI implementation as a fallback for when the assembly one cannot be used.

  • Fix potential heap buffer overread and overwrite in DTLS if MBEDTLS_SSL_DTLS_CONNECTION_ID is enabled and MBEDTLS_SSL_CID_IN_LEN_MAX > 2 * MBEDTLS_SSL_CID_OUT_LEN_MAX.

  • An adversary with access to precise enough information about memory accesses (typically, an untrusted operating system attacking a secure enclave) could recover an RSA private key after observing the victim performing a single private-key operation if the window size used for the exponentiation was 3 or smaller. Found and reported by Zili KOU, Wenjian HE, Sharad Sinha, and Wei ZHANG. See “Cache Side-channel Attacks and Defenses of the Sliding Window Algorithm in TEEs” - Design, Automation and Test in Europe 2023.

  • Zeroize dynamically-allocated buffers used by the PSA Crypto key storage module before freeing them. These buffers contain secret key material, and could thus potentially leak the key through freed heap.

  • Fix a potential heap buffer overread in TLS 1.2 server-side when MBEDTLS_USE_PSA_CRYPTO is enabled, an opaque key (created with mbedtls_pk_setup_opaque()) is provisioned, and a static ECDH ciphersuite is selected. This may result in an application crash or potentially an information leak.

  • Fix a buffer overread in DTLS ClientHello parsing in servers with MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE enabled. An unauthenticated client or a man-in-the-middle could cause a DTLS server to read up to 255 bytes after the end of the SSL input buffer. The buffer overread only happens when MBEDTLS_SSL_IN_CONTENT_LEN is less than a threshold that depends on the exact configuration: 258 bytes if using mbedtls_ssl_cookie_check(), and possibly up to 571 bytes with a custom cookie check function. Reported by the Cybeats PSI Team.

  • Zeroize several intermediate variables used to calculate the expected value when verifying a MAC or AEAD tag. This hardens the library in case the value leaks through a memory disclosure vulnerability. For example, a memory disclosure vulnerability could have allowed a man-in-the-middle to inject fake ciphertext into a DTLS connection.

  • In psa_cipher_generate_iv() and psa_cipher_encrypt(), do not read back from the output buffer. This fixes a potential policy bypass or decryption oracle vulnerability if the output buffer is in memory that is shared with an untrusted application.

  • Fix a double-free that happened after mbedtls_ssl_set_session() or mbedtls_ssl_get_session() failed with MBEDTLS_ERR_SSL_ALLOC_FAILED (out of memory). After that, calling mbedtls_ssl_session_free() and mbedtls_ssl_free() would cause an internal session buffer to be free()’d twice.

  • Fix a bias in the generation of finite-field Diffie-Hellman-Merkle (DHM) private keys and of blinding values for DHM and elliptic curves (ECP) computations.

  • Fix a potential side channel vulnerability in ECDSA ephemeral key generation. An adversary who is capable of very precise timing measurements could learn partial information about the leading bits of the nonce used for the signature, allowing the recovery of the private key after observing a large number of signature operations. This completes a partial fix in Mbed TLS 2.20.0.

Zephyr 2.7.4

This is an LTS maintenance release with fixes.

Issues Fixed

These GitHub issues were addressed since the previous 2.7.3 tagged release:

  • 25417 - net: socket: socketpair: check for ISR context

  • 41012 - irq_enable() doesn’t support enabling NVIC IRQ number more than 127

  • 44070 - west spdx TypeError: ‘NoneType’ object is not iterable

  • 46072 - subsys/hawkBit: Debug log error in hawkbit example “CONFIG_LOG_STRDUP_MAX_STRING”

  • 48056 - Possible null pointer dereference after k_mutex_lock times out

  • 49102 - hawkbit - dns name randomly not resolved

  • 49139 - can’t run west or DT tests on windows / py 3.6

  • 49564 - Newer versions of pylink are not supported in latest zephyr 2.7 release

  • 49569 - Backport cmake string cache fix to v2.7 branch

  • 50221 - tests: debug: test case subsys/debug/coredump failed on acrn_ehl_crb on branch v2.7

  • 50467 - Possible memory corruption on ARC when userspace is enabled

  • 50468 - Incorrect Z_THREAD_STACK_BUFFER in arch_start_cpu for Xtensa

  • 50961 - drivers: counter: Update counter_set_channel_alarm documentation

  • 51714 - Bluetooth: Application with buffer that cannot unref it in disconnect handler leads to advertising issues

  • 51776 - POSIX API is not portable across arches

  • 52247 - mgmt: mcumgr: image upload, then image erase, then image upload does not restart upload from start

  • 52517 - lib: posix: sleep() does not return the number of seconds left if interrupted

  • 52518 - lib: posix: usleep() does not follow the POSIX spec

  • 52542 - lib: posix: make sleep() and usleep() standards-compliant

  • 52591 - mcumgr user data size out of sync with net buffer user data size

  • 52829 - kernel/sched: Fix SMP race on pend

  • 53088 - Unable to chage initialization priority of logging subsys

Security Vulnerability Related

The following security vulnerabilities (CVEs) were addressed in this release:

More detailed information can be found in:

Zephyr 2.7.3

This is an LTS maintenance release with fixes.

Issues Fixed

These GitHub issues were addressed since the previous 2.7.2 tagged release:

  • 39882 - Bluetooth Host qualification on 2.7 branch

  • 41074 - can_mcan_send sends corrupted CAN frames with a byte-by-byte memcpy implementation

  • 43479 - Bluetooth: Controller: Fix per adv scheduling issue

  • 43694 - drivers: spi: stm32 spi with dma must enable cs after periph

  • 44089 - logging: shell backend: null-deref when logs are dropped

  • 45341 - Add new EHL SKUs for IBECC

  • 45529 - GdbStub get_mem_region bugfix

  • 46621 - drivers: i2c: Infinite recursion in driver unregister function

  • 46698 - sm351 driver faults when using global thread

  • 46706 - add missing checks for segment number

  • 46757 - Bluetooth: Controller: Missing validation of unsupported PHY when performing PHY update

  • 46807 - lib: posix: semaphore: use consistent timebase in sem_timedwait

  • 46822 - L2CAP disconnected packet timing in ecred reconf function

  • 46994 - Incorrect Xtensa toolchain path resolution

  • 47356 - cpp: global static object initialisation may fail for MMU and MPU platforms

  • 47609 - posix: pthread: descriptor leak with pthread_join

  • 47955 - drivers: can: various RTR fixes

  • 48249 - boards: nucleo_wb55rg: documentation BLE binary compatibility issue

  • 48271 - net: Possible net_pkt leak in ipv6 multicast forwarding

Security Vulnerability Related

The following security vulnerabilities (CVEs) were addressed in this release:

More detailed information can be found in:

Zephyr 2.7.2

This is an LTS maintenance release with fixes.

Issues Fixed

These GitHub issues were addressed since the previous 2.7.1 tagged release:

  • 23419 - posix: clock: No thread safety clock_getime / clock_settime

  • 30367 - TCP2 does not send our MSS to peer

  • 37389 - nucleo_g0b1re: Swapping image in mcuboot results in hard fault and softbricks the device

  • 38268 - Multiple defects in “Multi Producer Single Consumer Packet Buffer” library

  • 38576 - net shell: self-connecting to TCP might lead to a crash

  • 39184 - HawkBit hash mismatch

  • 39242 - net: sockets: Zephyr Fatal in dns_resolve_cb if dns request was attempted in offline state

  • 39399 - linker: Missing align __itcm_load_start / __dtcm_data_load_start linker symbols

  • 39608 - stm32: lpuart: 9600 baudrate doesn’t work

  • 39609 - spi: slave: division by zero in timeout calculation

  • 39660 - poll() not notified when a TLS/TCP connection is closed without TLS close_notify

  • 39687 - sensor: qdec_nrfx: PM callback has incorrect signature

  • 39774 - modem: uart mux reading optimization never used

  • 39882 - Bluetooth Host qualification on 2.7 branch

  • 40163 - Use correct clock frequency for systick+DWT

  • 40464 - Dereferencing NULL with getsockname() on TI Simplelink Platform

  • 40578 - MODBUS RS-485 transceiver support broken on several platforms due to DE race condition

  • 40614 - poll: the code judgment condition is always true

  • 40640 - drivers: usb_dc_native_posix: segfault when using composite USB device

  • 40730 - More power supply modes on STM32H7XX

  • 40775 - stm32: multi-threading broken after #40173

  • 40795 - Timer signal thread execution loop break SMP on ARM64

  • 40925 - mesh_badge not working reel_board_v2

  • 40985 - net: icmpv6: Add support for Route Info option in Router Advertisement

  • 41026 - LoRa: sx126x: DIO1 interrupt left enabled in sleep mode

  • 41077 - console: gsm_mux: could not send more than 128 bytes of data on dlci

  • 41089 - power modes for STM32H7

  • 41095 - libc: newlib: ‘gettimeofday’ causes stack overflow on non-POSIX builds

  • 41237 - drivers: ieee802154_dw1000: use dedicated workqueue

  • 41240 - logging can get messed up when messages are dropped

  • 41284 - pthread_cond_wait return value incorrect

  • 41339 - stm32, Unable to read UART while checking from Framing error.

  • 41488 - Stall logging on nrf52840

  • 41499 - drivers: iwdg: stm32: WDT_OPT_PAUSE_HALTED_BY_DBG might not work

  • 41503 - including net/socket.h fails with redefinition of struct zsock_timeval (sometimes :-) )

  • 41529 - documentation: generate Doxygen tag file

  • 41536 - Backport STM32 SMPS Support to v2.7.0

  • 41582 - stm32h7: CSI as PLL source is broken

  • 41683 - http_client: Unreliable rsp->body_start pointer

  • 41915 - regression: Build fails after switching logging to V2

  • 41942 - k_delayable_work being used as k_work in work’s handler

  • 41952 - Log timestamp overflows when using LOGv2

  • 42164 - tests/bluetooth/tester broken after switch to logging v2

  • 42271 - drivers: can: m_can: The can_set_bitrate() function doesn’t work.

  • 42299 - spi: nRF HAL driver asserts when PM is used

  • 42373 - add k_spin_lock() to doxygen prior to v3.0 release

  • 42581 - include: drivers: clock_control: stm32 incorrect DT_PROP is used for xtpre

  • 42615 - Bluetooth: Controller: Missing ticks slot offset calculation in Periodic Advertising event scheduling

  • 42622 - pm: pm_device structure bigger than nessecary when PM_DEVICE_RUNTIME not set

  • 42631 - Unable to identify owner of net_mgmt_lock easily

  • 42825 - MQTT client disconnection (EAGAIN) on publish with big payload

  • 42862 - Bluetooth: L2CAP: Security check on l2cap request is wrong

  • 43117 - Not possible to create more than one shield.

  • 43130 - STM32WL ADC idles / doesn’t work

  • 43176 - net/icmpv4: client possible to ddos itself when there’s an error for the broadcasted packet

  • 43177 - net: shell: errno not cleared before calling the strtol

  • 43178 - net: ip: route: log_strdup misuse

  • 43179 - net: tcp: forever loop in tcp_resend_data

  • 43180 - net: tcp: possible deadlock in tcp_conn_unref()

  • 43181 - net: sockets: net_pkt leak in accept

  • 43182 - net: arp: ARP retransmission source address selection

  • 43183 - net: mqtt: setsockopt leak on failure

  • 43184 - arm: Wrong macro used for z_interrupt_stacks declaration in stack.h

  • 43185 - arm: cortex-m: uninitialised ptr_esf in get_esf() in fault.c

  • 43470 - wifi: esp_at: race condition on mutex’s leading to deadlock

  • 43490 - net: sockets: userspace accept() crashes with NULL addr/addrlen pointer

  • 43548 - gen_relocate_app truncates files on incremental builds

  • 43572 - stm32: wrong clock the LSI freq for stm32l0x mcus

  • 43580 - hl7800: tcp stack freezes on slow response from modem

  • 43807 - Test “cpp.libcxx.newlib.exception” failed on platforms which use zephyr.bin to run tests.

  • 43839 - Bluetooth: controller: missing NULL assign to df_cfg in ll_adv_set

  • 43853 - X86 MSI messages always get to BSP core (need a fix to be backported)

  • 43858 - mcumgr seems to lock up when it receives command for group that does not exist

  • 44107 - The SMP nsim boards are started incorrectly when launching on real HW

  • 44310 - net: gptp: type mismatch calculation error in gptp_mi

  • 44336 - nucleo_wb55rg: stm32cubeprogrammer runner is missing for twister tests

  • 44337 - twister: Miss sn option to stm32cubeprogrgammer runner

  • 44352 - stm32l5x boards missing the openocd runner

  • 44497 - Add guide for disabling MSD on JLink OB devices and link to from smp_svr page

  • 44531 - bl654_usb without mcuboot maximum image size is not limited

  • 44886 - Unable to boot Zephyr on FVP_BaseR_AEMv8R

  • 44902 - x86: FPU registers are not initialised for userspace (eager FPU sharing)

  • 45869 - doc: update requirements

  • 45870 - drivers: virt_ivshmem: Allow multiple instances of ivShMem devices

  • 45871 - ci: split Bluetooth workflow

  • 45872 - ci: make git credentials non-persistent

  • 45873 - soc: esp32: use PYTHON_EXECUTABLE from build system

Security Vulnerability Related

The following security vulnerabilities (CVEs) were addressed in this release:

More detailed information can be found in:

Zephyr 2.7.1

This is an LTS maintenance release with fixes.

Issues Fixed

These GitHub issues were addressed since the previous 2.7.0 tagged release:

  • 36558 - Use of CMAKE_<lang>_COMPILER_FORCED on host-builds flag breaks third-party libraries

  • 36852 - acrn_ehl_crb: the test of tests/subsys/cpp/libcxx/ failed

  • 38181 - tests/drivers/uart/uart_basic_api/drivers.uart.cdc_acm fails to build

  • 38612 - Fault with assertions enabled prevents detailed output because of ISR() assertion check in shell function

  • 38972 - logging: Cleaning references to tracing in logging

  • 38999 - Bluetooth: Controller: Fix HCI command parameter check failures

  • 39022 - tests/drivers/uart/uart_basic_api/drivers.uart.cdc_acm fails to build

  • 39297 - Lorawan regression in v2.7rc4 for US915 and AU915 regions

  • 39361 - BL5340 image is broken on documentation page

  • 39409 - runners: canopen: program download fails with slow flash access and/or congested CAN nets

  • 39523 - task watchdog crash/asset on NRF52840 - need to reorder task_wdt_feed() in task_wdt_add()

  • 39541 - can: mcux_flexcan: wrong timing calculation

  • 39575 - k_mutex_lock and k_sem_take with K_FOREVER return -EAGAIN value

  • 39594 - Possible bug or undocumented behaviour of spi_write

  • 39609 - spi: slave: division by zero in timeout calculation

  • 39687 - sensor: qdec_nrfx: PM callback has incorrect signature

  • 39704 - Using OpenThread makes the system unresponsive after 49.7 days

  • 39817 - drivers: pwm: nxp: (potentially) Incorrect return value on API function

  • 39851 - [Coverity CID: 240242] Dereference after null check in tests/bluetooth/tester/src/l2cap.c

  • 39882 - Bluetooth Host qualification on 2.7 branch

  • 40133 - mimxrt1060-evk flash shell command causes shell deadlock

  • 40244 - hci_spi sample cannot be built for nrf51dk_nrf51422 and 96b_carbon_nrf51

  • 40290 - CAN_STM32: Build error with CONFIG_CAN_AUTO_BUS_OFF_RECOVERY=n

  • 40844 - gen_app_partitions scans object files unrelated to current image

  • 41237 - drivers: ieee802154_dw1000: use dedicated workqueue

Security Vulnerability Related

The following security vulnerabilities (CVEs) were addressed in this release:

More detailed information can be found in:

Zephyr 2.7.0

We are pleased to announce the release of Zephyr RTOS version 2.7.0 (LTS2).

Major enhancements since v2.6.0 include:

  • Bluetooth Audio, Direction Finding, and Mesh improvements

  • Support for Bluetooth Advertisement PDU Chaining

  • Added support for armclang / armlinker toolchain

  • Added support for MWDT C / C++ toolchain

  • Update to CMSIS v5.8.0 (Core v5.5.0, DSP v1.9.0)

  • Support for M-Profile Vector Extensions (MVE) on ARMv8.1-M

  • Improved thread safety for Newlib and C++ on SMP-capable systems

  • IEEE 802.15.4 Software Address Filtering

  • New Action-based Power Management API

  • USB Device Framework now includes all Chapter 9 defines and structures

  • Generic System Controller (syscon) driver and emulator

  • Linker Support for Tightly-Coupled Memory in RISC-V

  • Additional Blocking API calls for LoRa

  • Support for extended PCI / PCIe capabilities, improved MIS-X support

  • Added Support for Service Type Enumeration (STE) with mDNS / DNS Service Discovery

  • Added Zephyr Thread Awareness for OpenOCD to West

  • EEPROM now can be emulated in flash

  • Added both Ethernet MDIO and Ethernet generic PHY drivers

Additional Major enhancements since v1.14.0 (LTS1) include:

  • The kernel now supports both 32- and 64-bit architectures

  • We added support for SOCKS5 proxy

  • Introduced support for 6LoCAN, a 6Lo adaption layer for Controller Area Networks

  • We added support for Point-to-Point Protocol (PPP)

  • We added support for UpdateHub, an end-to-end solution for over-the-air device updates

  • We added support for ARM Cortex-R Architecture

  • Normalized APIs across all architectures

  • Expanded support for ARMv6-M architecture

  • Added support for numerous new boards and shields

  • Added numerous new drivers and sensors

  • Added BLE support on Vega platform

  • Memory size improvements to Bluetooth host stack

  • We added initial support for 64-bit ARMv8-A architecture

  • CANopen protocol support through 3rd party CANopenNode stack

  • LoRa support was added along with the SX1276 LoRa modem driver

  • A new Zephyr CMake package has been introduced

  • A new Devicetree API which provides access to virtually all DT nodes and properties

  • The kernel timeout API has been overhauled

  • A new k_heap/sys_heap allocator, with improved performance

  • Zephyr now integrates with the TF-M (Trusted Firmware M) PSA-compliant framework

  • The Bluetooth Low Energy Host now supports LE Advertising Extensions

  • The CMSIS-DSP library is now included and integrated

  • Introduced initial support for virtual memory management

  • Added Bluetooth host support for periodic advertisement and isochronous channels.

  • Added a new TCP stack which improves network protocol testability

  • Introduced a new toolchain abstraction with initial support for GCC and LLVM/Clang

  • Moved to using C99 integer types and deprecate Zephyr integer types

  • Introduced support for the SPARC architecture and the LEON implementation

  • Added Thread Local Storage (TLS) support

  • Added support for per thread runtime statistics

  • Added support for building with LLVM on X86

  • Added new synchronization mechanisms using Condition Variables

  • Add support for demand paging, initial support on X86

  • Logging subsystem overhauled

  • Added support for 64-bit ARCv3

  • Split ARM32 and ARM64, ARM64 is now a top-level architecture

  • Added initial support for Arm v8.1-m and Cortex-M55

  • Removed legacy TCP stack support which was deprecated in 2.4

  • Tracing subsystem overhaul / added support for Percepio Tracealyzer

  • Device runtime power management (PM) completely overhauled

  • Automatic SPDX SBOM generation has been added to West

  • Added an example standalone Zephyr application

The following sections provide detailed lists of changes by component.

Security Vulnerability Related

The following CVEs are addressed by this release:

More detailed information can be found in:

Known issues

You can check all currently known issues by listing them using the GitHub interface and listing all issues with the bug label.

API Changes

Deprecated in this release

Modified in this release

  • The following Bluetooth macros and structures in hci.h have been modified to align with the inclusive naming in the v5.3 specification:









    • bt_hci_rp_le_read_wl_size is now bt_hci_rp_le_read_fal_size

    • bt_hci_rp_le_read_wl_size::wl_size is now bt_hci_rp_le_read_fal_size::fal_size



    • bt_hci_cp_le_add_dev_to_wl is now bt_hci_cp_le_add_dev_to_fal


    • bt_hci_cp_le_rem_dev_from_wl is now bt_hci_cp_le_rem_dev_from_fal







    • m_* structure members are now c_*

    • s_* structure members are now p_*




Changes in this release

Removed APIs in this release

  • Removed support for the deprecated DEVICE_INIT and DEVICE_AND_API_INIT macros.

  • Removed support for the deprecated BUILD_ASSERT_MSG macro.

  • Removed support for the deprecated GET_ARG1, GET_ARG2 and GET_ARGS_LESS_1 macros.

  • Removed support for the deprecated Kconfig PRINTK64 option.

  • Removed support for the deprecated bt_set_id_addr function.

  • Removed support for the Kconfig USB option. Option USB_DEVICE_STACK is sufficient to enable USB device support.


  • Removed CONFIG_BT_UART_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,bt-uart.

  • Removed CONFIG_BT_MONITOR_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,bt-mon-uart.

  • Removed CONFIG_MODEM_GSM_UART_NAME Kconfig option in favor of direct use of chosen node zephyr,gsm-ppp.

  • Removed CONFIG_UART_MCUMGR_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,uart-mcumgr.

  • Removed CONFIG_UART_CONSOLE_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,console.

  • Removed CONFIG_UART_SHELL_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,shell-uart.

Stable API changes in this release



  • ARC

    • Add SMP support to ARCv3 HS6x

    • Add MWDT C library support

    • Add basic C++ support with MWDT toolchain

    • Add MPUv3 and MPUv6 support

    • Remove dead PM code from ARC core interrupt controller driver

    • Add updating arc connect debug mask dynamically

  • ARM

    • AARCH32

      • Updated CMSIS version to 5.8.0

      • Added support for FPU in QEMU for Cortex-M, allowing to build and execute tests in CI with FPU and FPU_SHARING options enabled.

      • Added MPU support for Cortex-R

    • AARCH64

  • RISC-V

    • Added support to RISC-V CPU devicetree compatible bindings

    • Added support to link with ITCM & DTCM sections

  • x86


  • Updated all APIs and internal implementation to be conformant with the new inclusive terminology in version 5.3 of the Bluetooth Core Specification

  • Audio

    • Added the Microphone Input Control Service and client.

    • Changed the connected isochronous API to use a group-based opaque struct

    • Split the configuration options into connected and broadcast groups

    • Added support for a new sent callback to be notified when an SDU has been transmitted

  • Direction Finding

    • Added configurability for conditional CTE RX support

    • Added support for CTE periodic advertising chain transmissions

  • Host

    • Added support for setting more than 251 bytes of advertising data

    • Added new callbacks on ATT MTU update

    • Added a new call to retrieve the handle of an advertising set

    • Fixed key overwrite algorithm when working with multiple connections

    • Added configuration support for GATT security re-establishment

    • Added support for writing a long device name

    • OTS: Added object name write capability

  • Mesh

    • Added return value for opcode callback

    • Added support for OOB Public Key in the provisionee role

    • Added a new API to manually store pending RPL entries

    • Added support for application access to mesh messages

    • Refactored the Mesh Model Extensions

  • Bluetooth LE split software Controller

    • Added support for advertising PDU chaining, implementing advertising trains for Direction Finding

    • Added support for adding or removing the ACAD field in Common Extended Header Format to support BIGInfo

    • Refactored the legacy, extended and periodic advertising time reservation slot calculations

    • Implemented CSA#2 in Extended Advertising and Broadcast ISO sub-events

    • Added support for Extended Active Scanning

    • Added support for advertising on the S2 and S8 coding schemes

    • Added support for the Periodic Advertising channel map update indication

  • HCI Driver

    • Removed all CONFIG_BT_*_ON_DEV_NAME Kconfig options, use Devicetree instead

Boards & SoC Support

  • Added support for these SoC series:

    • Added STM32U5 basic SoC support

  • Removed support for these SoC series:

  • Made these changes in other SoC series:

    • Added Atmel SAM0 pinctrl support

    • Added Atmel SAM4L USBC device controller

    • Added Atmel GMAC support for MDIO driver

    • Added Atmel GMAC support to use generic PHY driver

    • Added Atmel SAM counter (TC) Driver

    • Added Atmel SAM DAC (DACC) driver

    • Enabled Atmel SAM clock-frequency support from devicetree

    • Free Atmel SAM TRACESWO pin when unused

    • Enabled Cypress PSoC-6 Cortex-M4 support

    • Added low power support to STM32L0, STM32G0 and STM32WL series

    • STM32: Enabled ART Flash accelerator by default when available (F2, F4, F7, H7, L5)

    • STM32: Added Kconfig option to enable STM32Cube asserts (CONFIG_USE_STM32_ASSERT)

    • NXP FRDM-K82F: Added arduino_i2c and arduino_spi aliases

    • NXP i.MX RT series: Added support for flash controller with XIP

    • NXP i.MX RT series: Added TRNG support

    • NXP i.MX RT1170: Added LPSPI driver support

    • NXP i.MX RT1170: Added ADC driver support

    • NXP i.MX RT1170: Enabled Segger RTT/SystemView

    • NXP i.MX RT1170: Added MCUX FlexCan support

    • NXP i.MX RT1064: Added watchdog driver support

    • NXP i.MX RT1064: Added DMA driver support

    • NXP i.MX RT600: Added arduino serial port

    • NXP i.MX RT600: Add mcuboot flash partitions

    • NXP i.MX RT600: Added counter support

    • NXP i.MX RT600: Added PWM support

    • NXP i.MX RT600: Added disk driver support

    • NXP i.MX RT600: Added USB driver support

    • NXP i.MX RT600: Added LPADC driver support

    • NXP i.MX RT600: Added CTimer Counter support

    • NXP KE1xF: Added SoC Power Management support

    • NXP LPC55s69: Added USB driver support

    • NXP LPC55s69: Added ctimer driver support

    • NXP LPC55s69: Added I2S driver support

  • Changes for ARC boards:

    • Implement ‘run’ command for SMP nSIM simulation board

    • Enable upstream verification on QEMU ARCv3 HS6x board (qemu_arc_hs6x)

    • Implement creg GPIO driver and add it to hsdk and em_starterkit boards

  • Changes for ARM boards:

    • Added SPI support on Arduino standard SPI when possible

  • Added support for these ARM boards:

    • Dragino NBSN95 NB-IoT Sensor Node

    • Seeedstudio LoRa-E5 Dev Board

    • ST B_U585I_IOT02A Discovery kit

    • ST Nucleo F446ZE

    • ST Nucleo U575ZI Q

    • ST STM32H735G Discovery

    • PJRC Teensy 4 Board

  • Added support for these ARM64 boards:

  • Removed support for these ARM boards:

  • Removed support for these X86 boards:

  • Made these changes in other boards:

    • arduino_due: Added support for TC driver

    • atsame54_xpro: Added support for PHY driver

    • sam4l_ek: Added support for TC driver

    • sam4e_xpro: Added support for PHY driver

    • sam4e_xpro: Added support for TC driver

    • sam4s_xplained: Added support for TC driver

    • sam_e70_xplained: Added support for DACC driver

    • sam_e70_xplained: Added support for PHY driver

    • sam_e70_xplained: Added support for TC driver

    • sam_v71_xult: Added support for DACC driver

    • sam_v71_xult: Added support for PHY driver

    • sam_v71_xult: Added support for TC driver

    • sam_v71_xult: Enable pwm on LED0

    • cy8ckit_062_ble: Added arduino’s nexus map

  • Added support for these following shields:

    • 4.2inch epaper display (GDEW042T2)

    • X-NUCLEO-EEPRMA2 EEPROM memory expansion board

Drivers and Sensors

  • ADC

    • Added STM32WL ADC driver

    • STM32: Added support for oversampling

    • Added driver for Microchip MEC172x

  • Audio

    • Added DMIC driver for nRF PDM peripherals

  • Bluetooth

  • CAN

    • Renesas R-Car driver added

  • Clock Control

  • Console

  • Counter

    • Add Atmel SAM counter (TC) Driver

    • Added STM32WL RTC counter driver

  • Crypto

    • STM23: Add support for SOCs with AES hardware block (STM32G0, STM32L5 and STM32WL)

  • DAC

    • Added Atmel SAM DAC (DACC) driver

    • Added support for Microchip MCP4725

    • Added support for STM32F3 series

  • Disk

    • Added SDMMC support on STM32L4+

    • STM32 SDMMC now supports SDIO enabled devices

    • Added USDHC support for i.MX RT685

  • Display

    • Added support for ST7735R

  • DMA

    • Added Atmel SAM XDMAC reload support

    • Added support on STM32F3, STM32G0, STM32H7 and STM32L5

    • STM32: Reviewed bindings definitions, “st,stm32-dma-v2bis” introduced.


    • Added support for EEPROM emulated in flash.

  • Entropy

    • Added support for STM32F2, STM32G0, STM32WB and STM32WL

  • ESPI

    • Added support for Microchip eSPI SAF

  • Ethernet

    • Added Atmel SAM/SAM0 GMAC devicetree support

    • Added Atmel SAM/SAM0 MDIO driver

    • Added MDIO driver

    • Added generic PHY driver

  • Flash

    • Added STM32F2, STM32L5 and STM32WL Flash driver support

    • STM32: Max erase time parameter was moved to device tree

    • Added quad SPI support for STM32F4

  • GPIO

  • Hardware Info

  • I2C

  • I2S

    • Added Atmel SAM I2S driver support to XDMAC reload

    • Added driver for nRF I2S peripherals

  • IEEE 802.15.4

  • IPM

    • STM32: Add HSEM based IPM driver for STM32H7 series

  • Interrupt Controller

  • LED

  • LoRa

    • lora_send now blocks until the transmission is complete. lora_send_async can be used for the previous, non-blocking behaviour.

    • Enabled support for STM32WL series

  • MEMC

    • Added STM32F4 support

  • Modem

    • Added gsm_ppp devicetree support

  • PCI/PCIe

    • Fixed an issue that MSI-X was used even though it is not available.

    • Improved MBAR retrieval for MSI-X.

    • Added ability to retrieve extended PCI/PCIe capabilities.

  • Pinmux

    • Added Atmel SAM0 pinctrl support

    • STM32: Deprecated definitions like ‘STM32F2_PINMUX_FUNC_PA0_UART4_TX’ are now removed.

  • PWM

    • Property “st,prescaler” of binding “st,stm32-pwm” now defaults to “0”.

    • Added driver for ITE IT8XXX2 series

    • Added driver for NXP LPC devices

    • Added driver for Telink B91

  • Sensor

    • Refactored various drivers to use _dt_spec.

    • Refactored various drivers to support multiple instances.

    • Enhanced TI HDC20XX driver to support DRDY/INT pin.

    • Updated temperature conversion formula in TI HDC20XX driver.

    • Enhanced MS5607 pressure sensor driver to support I2C.

    • Fixed temperature compensation in MS5607 pressure sensor driver.

    • Refactored ST LIS2DW12 driver to move range, power, and trigger configuration from Kconfig to dts.

    • Enhanced TI BQ274XX fuel gauge driver to support power management.

    • Aligned ST sensor drivers to use STMEMC HAL I/F v2.00.

    • Added Sensirion SGP40 multipixel gas sensor driver.

    • Added Sensirion SHTCX humidity sensor driver.

    • Added Sensirion SHT4X temperature and humidity sensor driver.

    • Added SiLabs SI7270 hall effect magnetic position and temperature sensor driver.

    • Added ST I3G4250D gyroscope driver.

    • Added TI INA219 and INA23X current/power monitor drivers.

    • Added TI LM75 and LM77 temperature sensor drivers.

    • Added TI HDC20XX humidity and temperature sensor driver.

  • Serial

    • Added kconfig to disable runtime re-configuration of UART to reduce footprint if so desired.

    • Added ESP32-C3 polling only UART driver.

    • Added ESP32-S2 polling only UART driver.

    • Added Microchip XEC UART driver.

  • SPI

  • Timer

  • USB

    • Added Atmel SAM4L USBC device controller driver

    • Added support for NXP LPC USB controller

    • Adapted drivers use new USB framework header

  • Watchdog

    • Added STM32L5 watchdog support

  • WiFi


  • 802.15.4 L2:

    • Fixed a bug, where the net_pkt structure contained invalid LL address pointers after being processed by 802.15.4 L2.

    • Added an optional destination address filtering in the 802.15.4 L2.

  • CoAP:

    • Added user_data field to the coap_packet structure.

    • Fixed processing of out-of-order notifications.

    • Fixed coap_packet_get_payload() function.

    • Converted CoAP test suite to ztest API.

    • Improved coap_packet_get_payload() function to minimize number of RNG calls.

    • Fixed retransmissions in the coap_server sample.

    • Fixed observer removal in the coap_server sample (on notification timeout).

  • DHCPv4:

    • Fixed a bug, where DHPCv4 library removed statically configured gateway before obtaining a new one from the server.

  • DNS:

    • Fixed a bug, where the same IP address was used to populate the result address info entries, when multiple IP addresses were obtained from the server.

  • DNS-SD:

    • Added Service Type Enumeration support (_services._dns_sd._udp.local)

  • HTTP:

    • Switched the library to use zsock_* API, to improve compatibility with various POSIX configurations.

    • Fixed a bug, where HTTP_DATA_FINAL notification was triggered even for intermediate response fragments.

  • IPv6:

    • Multiple IPv6 fixes, addressing failures in IPv6Ready compliance tests.

  • LwM2M:

    • Added support for notification timeout reporting to the application.

    • Fixed a bug, where a multi instance resource with only one active instance was incorrectly encoded on reads.

    • Fixed a bug, where notifications were generated on changes to non-readable resources.

    • Added mutex protection for the state variable of the lwm2m_rd_client module.

    • Removed LWM2M_RES_TYPE_U64 type, as it’s not possible to encode it properly for large values.

    • Fixed a bug, where large unsigned integers were incorrectly encoded in TLV.

    • Multiple fixes for FLOAT type processing in the LwM2M engine and encoders.

    • Fix a bug, where IPSO Push Button counter resource was not triggering notification on incrementation.

    • Fixed a bug, where Register failures were reported as success to the application.

  • Misc:

    • Added RX/TX timeout on a socket in big_http_download sample.

    • Introduced net_pkt_remove_tail() function. Added IEEE 802.15.4 security-related flags to the net_pkt structure.

    • Added bridging support to the Ethernet L2.

    • Fixed a bug in mDNS, where an incorrect address type could be set as a response destination.

    • Added an option to suppress ICMP destination unreachable errors.

    • Fixed possible assertion in net nbr shell command.

    • Major refactoring of the TFTP library.

  • MQTT:

    • Added an option to register a custom transport type.

    • Fixed a bug in mqtt_abort(), where the function could return without releasing a lock.

  • OpenThread:

    • Update OpenThread module up to commit 9ea34d1e2053b6b2a80e1d46b65a6aee99fc504a. Added several new Kconfig options to align with new OpenThread configurations.

    • Added OpenThread API mutex protection during initialization.

    • Converted OpenThread thread to a dedicated work queue.

    • Implemented missing otPlatAssertFail() platform function.

    • Fixed a bug, where NONE level OpenThread logs were not processed.

    • Added possibility to disable CSL sampling, when used.

    • Fixed a potential bug, where invalid error code could be returned by the platform radio layer to OpenThread.

    • Reworked UART configuration in the OpenThread Coprocessor sample.

  • Socket:

    • Added microsecond accuracy in zsock_select() function.

    • Reworked zsock_select() into a syscall.

    • Fixed a bug, where poll() events were not signalled correctly for socketpair sockets.

    • Fixed a bug, where socket mutex could be used after being initialized by a new owner after being deallocated in zsock_close().

    • Fixed a possible assert after enabling CAN sockets.

    • Fixed IPPROTO_RAW usage in packet socket implementation.

  • TCP:

    • Fixed a bug, where unacked_len could be set to a negative value.

    • Fixed possible assertion failure in tcp_send_data().

    • Fixed a bug, where [FIN, PSH, ACK] was not handled properly in TCP_FIN_WAIT_2 state.

  • TLS:

    • Reworked TLS sockets to use secure random generator from Zephyr.

    • Fixed busy looping during DTLS handshake with offloaded sockets.

    • Fixed busy looping during TLS/DTLS handshake on non blocking sockets.

    • Reset mbed TLS session on timed out DTLS handshake, to allow a retry without closing a socket.

    • Fixed TLS/DTLS sendmsg() implementation for larger payloads.

    • Fixed TLS/DTLS sockets POLLHUP notification.

  • WebSocket:

    • Fixed poll() implementation for WebSocket, which did not work correctly with offloaded sockets.

    • Fixed ioctl() implementation for WebSocket, which did not work correctly with offloaded sockets.


  • Added new header file where all defines and structures from Chapter 9 (USB Device Framework) should be included.

  • Revised configuraiton of USB device support. Removed Kconfig option CONFIG_USB and introduced Kconfig option CONFIG_USB_DEVICE_DRIVER to enable USB device controller drivers, which is selected when option CONFIG_USB_DEVICE_STACK is enabled.

  • Enhanced verification of the control request in device stack, classes, and samples.

  • Added support to store alternate interface setting.

  • Added zephyr_udc0 nodelabel to all boards with USB support to allow generic USB device support samples to be build.

  • Reworked descriptors, config, and data definitions macros in CDC ACM class.

  • Changed CDC ACM UART implementation to get configuration from devicetree. With this change, many CONFIG_*_ON_DEV_NAME options were removed and applications revised. See USB device stack CDC ACM support for more information.

Build and Infrastructure

Libraries / Subsystems

  • Disk

  • Management

  • CMSIS subsystem

  • Power management

    • The APIs to set/clear/check if devices are busy from a power management perspective have been moved to the PM subsystem. Their naming and signature has also been adjusted to follow common conventions. Below you can find the equivalence list.

      • device_busy_set -> pm_device_busy_set

      • device_busy_clear -> pm_device_busy_clear

      • device_busy_check -> pm_device_is_busy

      • device_any_busy_check -> pm_device_is_any_busy

    • The device power management callback (pm_device_control_callback_t) has been largely simplified to work based on actions, resulting in simpler and more natural implementations. This principle is also used by other OSes like the Linux Kernel. As a result, the callback argument list has been reduced to the device instance and an action (e.g. PM_DEVICE_ACTION_RESUME). Other improvements include specification of error codes, removal of some unused/unclear states, or guarantees such as avoid calling a device for suspend/resume if it is already at the right state. All these changes together have allowed simplifying multiple device power management callback implementations.

    • Introduced a new API to allow devices capable of wake up the system register themselves was wake up sources. This permits applications to select the most appropriate way to wake up the system when it is suspended. Devices marked as wake up source are not suspended by the kernel when the system is idle. It is possible to declare a device wake up capable direct in devicetree like this example:

      &gpio0 {
              compatible = "zephyr,gpio-emul";
      • Removed PM_DEVICE_STATE_FORCE_SUSPEND device power state.because it is an action and not a state.

      • Removed PM_DEVICE_STATE_RESUMING and PM_DEVICE_STATE_SUSPENDING. They were transitional states and only used in device runtime. Now the subsystem is using device flag to keep track of a transition.

      • Implement constraint API as weak symbols so applications or platform can override them. Platforms can have their own way to set/release constraints in their drivers that are not part of Zephyr code base.

  • Logging


    • Changed server handler to copy Transaction and Protocol Identifiers to response header.

  • Random

    • xoroshiro128+ PRNG deprecated in favor of xoshiro128++

  • Shell

  • Storage

  • Task Watchdog

  • Tracing

  • Debug

  • OS


  • HALs are now moved out of the main tree as external modules and reside in their own standalone repositories.

Trusted Firmware-m

  • Renamed psa_level_1 sample to psa_crypto. Extended the use of the PSA Cryptography 1.0 API in the sample code to demonstrate additional crypto functionality.

  • Added a new sample to showcase the PSA Protecter Storage service.


  • Kconfig options need to be referenced using the :kconfig: Sphinx role. Previous to this change, :option: was used for this purpose.

  • Doxygen alias @config{} has been deprecated in favor of @kconfig{}.

Tests and Samples