Apache NuttX-13.0.1 Release Notes
What’s New In This Release Changes to Core OS
Sched #19479 sched/backtrace: fix cross-CPU buffer access under addrenv #19487 sched: avoid dumping raw memory at address 0 for tasks without kstack #19544 sched/addrenv: do not dereference a NULL address environment #19563 sched/sched_critmonitor: remove duplicate preemption start block #19587 sched/sched: Fix uninitialized sporadic params returned by nxsched_get_param()
MM #19581 mm/ubsan: fix signed inline value decoding
libs #19444 libs/libc: Fix divide-by-zero in stat() with large filesystem block sizes #19497 lib/math32: Avoid __uint128_t casts for LDC ImportC #19513 libs/libbuiltin/compiler-rt: skip unsupported Arm VFP builtins asm #19516 libc/time: Fix POSIX timezone string parsing
Tools #19477 tools/Zig.defs: Fix Zig builds on sim:x86_64 #19566 tools/mkallsyms.py: let the dependency error actually reach the user #19569 tools: fix stale archive members surviving a Kconfig-driven CSRCS change
Various Improvements Audio #19686 audio: fix private buffer allocation and document the upper half Crypto #19294 crypto: Support SHA2_224_HMAC #19396 crypto: Add standalone CHACHA20 stream cipher on the unified enc path #19403 crypto: add CRYPTO_CHACHA20_DJB variant (64-bit counter/nonce) Syscall #19727 syscall: add missing memory locking and clock_getres entries Video #19053 video/fb: Handle case of multiple displays where some do not require update #19466 video: fix EDID standard timing decode #19685 video/rgbcolors: Fix RGBTO8 to use the high bits of each component
Changes to the Build System Bug Fixes #19464 cmake: Sanitize NAME for _main symbol generation #19507 cmake: Do not link an executable to detect the compiler
Architectural Support Bug Fixes #19438 arch/common: fix host_flags_to_mode() O_RDONLY sentinel collision ARM #19565 arch/arm: carry CONTROL over to the fork child on Cortex-M #19486 arch/arm: set PSPLIM to top of TLS region to protect it from overflow #19691 arch/arm/kinetis/rtc: Enable global lock for all #19746 arch/arm/nrf53: fix I2C3 base #19542 arch/arm/nrf52,nrf53: don’t pass HCI messages under the lock #19378 arch/arm/rp2040,rp23xx: fix CDC-NCM bulk/notify endpoint handling #19452 arch/arm/rp2040/rp23xx: implement endpoint stall queueing and GET_STATUS responses #19574 arch/arm/rp2040/rp23xx: order the USB BUFF_STATUS clear before the AVAILABLE re-arm #19450 arch/arm/rp2040/rp23xx: preserve SIE_CTRL.PULLUP_EN in usbdev_register #19535 arch/arm/rp23xx: Fix six register/bit macro name clashes #19520 arch/arm/stm32: Detach GPIO IRQ callbacks upon clearing “setevent” #19385 arch/arm/stm32: fix H5 I2C kernel-clock register names #19383 arch/arm/stm32: make STM32_FOC depend on MOTOR_FOC #19395 arch/arm/stm32: make STM32_ETHMAC depend on NET #19382 arch/arm/stm32: STM32_DTS depends on SENSORS #19519 arch/arm/stm32g0: Fix FLASHIF typo #19495 arch/arm/stm32h7: fix MDIO RDA field in c22 write #19769 arch/arm/stm32h5: Fix handling of GPIO port I #19506 arch/arm/stm32h7: invalidate dcache after aligned SDMMC RX DMA #19701 arch/arm/stm32h5/serial: fix UART8 buffer guard typo ARM64 #19676 arch/arm64/imx9: Fix imx9 usdhc DMA initialization MIPS #19784 arch/mips/Makefile: Add nuttx build with CONFIG_ALLSYMS enabled RISC-V #19768 arch/risc-v/espressif: fix SPI IOMUX false positive without SPI2 #19439 arch/riscv: Fix RISC-V backtrace #19364 arch/risc-v: reject overlapping leaf PTE in riscv_fillpage #19377 arch/risc-v: kill faulting user task instead of panicking kernel #19468 arch/risc-v: qemu: don’t rewind interrupt stack sp on nested trap #19471 arch/risc-v: fix fault handler misattributing kernel faults to user #19718 arch/risc-v: fix uninitialized HW cmds and bus clock X86 #19567 arch/x86: default CROSSDEV on a macOS host X86_64 #19559 arch/x86_64: six fixes to make BUILD_KERNEL and the HPET alarm work #19692 arch/x86_64: fix page table levels in pgalloc #19791 arch/x86_64: fix kernel build issues found with LTP
Driver Support Bug Fixes #19184 drivers/serial: add job-control TTY ioctls #19371 drivers/usbdev: re-assert soft connect in cdcecm/cdcncm disconnect() #19373 drivers/i2s/i2schar: Fix return types #19386 drivers/i2c: I2C_SLAVE_DRIVER depends on I2C_SLAVE #19391 drivers/serial: hold xmit.lock around echo in uart_readv() #19411 drivers/net/w5500: fix variable names in receive error path and d_private #19415 drivers/spi/ice40: fix operator precedence in final clock cycle count #19416 drivers/efuse: Multiple Drivers Are Registered With World Writable #19419 drivers/contactless: fix uninitialized uid leak in mfrc522_read #19433 drivers/watchdog: fix capture automonitor notifier context #19437 drivers: Multiple Drivers Are Registered With World Writable (2) #19451 drivers/usbdev: fix composite-mode class requests and BOT short-response handling #19453 drivers: Multiple Drivers Are Registered With World Writable (3) #19470 drivers/usbdev/cdcncm: fix TX corruption/wedge under write buffers #19476 drivers/eeprom: I2C EEPROM Read/Write Kernel Operations Crash #19502 drivers/mmcsd: fix eMMC bus width switch sequencing #19522 drivers/video: zero message on MIPI DSI driver #19568 drivers/syslog: fix syslog_write() returning -EIO on every write #19571 drivers/ioexpander/iso1i813t: fix error startup condition #19577 drivers/input: partial fix of indistinguishable ASCII and special keycodes #19590 drivers/ioexpander: Fix GPIO expanders warnings #19604 drivers/mmcsd: Fix finfo print modifier #19632 drivers/usbdev/rndis: Fix reported MTU OID sizes #19740 drivers/usbdev/cdcacm: fix self-deadlock in cdcuart_txempty() [#19742](https://github.com/apache/nuttx/pull/19742} drivers/usbhost: Refuse to register the same class driver twice
Board Support Bug Fixes #19498 boards: Dropbear defconfig crypto deps #19492 boards: Fix/dropbear cryptodev defconfigs #19481 boards/dropbear: retain child exit status for NSH PTY session ARM #19538 boards/arm/mps2-an521: Correct the swapped UART0 TX and RX interrupts #19361 boards/arm/mps3-an547: Fix error caused by updating nsh Kconfig #19561 boards/arm/rp23xx: add missing rp23xx_st7735.c LCD board glue #19431 boards/arm/stm32{f1,f4}: drop duplicated reset.c/romfs #19454 boards/arm/stm32f3: nucleo-f302r8:ihm07m1_b16: enable LTO to fit flash #19483 boards/arm/stm32f746g-disco: Add Dropbear SSH server support #19257 boards/arm/stm32f746g-disco: Add support for Winbond W25Q128JVEQ flash chip #19389 boards/arm/stm32h7: switch board common to boards/arm/common/stm32 ARM64 #19427 boards/arm64/raspberrypi-4b/sd: Fix SD card issues RISC-V #19474 boards/risc-v/esp32c3-devkit/dropbear: enable SCHED_HAVE_PARENT SIM #19405 boards/sim: add dropbear board configuration #19576 boards/sim: add ROMFS passwd and crypto deps for NSH console login #19583 boards/sim: drop unused FSUTILS_PASSWD from sim defconfigs
File System Bug Fixes #19179 fs: widen ino_t to uint32_t and add d_ino to struct dirent #19212 fs/vfs: provide link fallback without softlinks - #19212 #19394 fs/procfs: fix environ read for another task under CONFIG_A #19704 fs/pseudofile: fix buffer sizing and sparse growth #19770 fs/romfs: fix node cache overflow in directories with >256 entries Networking Bug Fixes #18857 net/sixlowpan: Check if g_frame_hdrlen + IPv6_HDRLEN <= iob->io_len #19436 net/igmp: restore General Query handling broken by pointer compare #19564 net/tcp: don’t accept a reset connection as connected #19589 net/tcp: Remove work_available check when updating retransmit timer #19595 net: Fix IP fragment forwarding and L4 handling #19801 net/udp: fix d_len corruption for 2nd+ SO_REUSEADDR listener
Compatibility Concerns
#19209 !boards/nsh: Replace TEA password storage with PBKDF2-HMAC-SHA256 hashing
Replace reversible TEA password storage in /etc/passwd with one-way PBKDF2-HMAC-SHA256 hashing in modular crypt format (MCF):
$pbkdf2-sha256$
BREAKING CHANGE: TEA-encoded /etc/passwd entries no longer verify. Regenerate with tools/mkpasswd or NSH passwd/useradd after upgrading nuttx-apps.
Changes:
Add apps/crypto/pbkdf2 (PBKDF2-HMAC-SHA256; Mbed TLS backend when available, self-contained SHA-256 fallback otherwise) Rewrite passwd_encrypt.c / passwd_verify.c to use PBKDF2 and timingsafe_bcmp() for verification Add shared passwd_base64.c for base64url encode/decode Enforce password complexity when setting passwords (min 8 chars, upper, lower, digit, special character) Add testing/pbkdf2 (RFC 6070 vectors + passwd round-trip test)
Companion nuttx PR (host mkpasswd tool and ROMFS build integration): apache/nuttx-apps#3557
#19297 !arch/arm/src/stm32: unify the timer input clock board options
Replace the divergent board conventions for the timer input clock frequency with a single uniform convention provided by every board:
STM32_APBx_TIMn_CLKIN and BOARD_TIMn_FREQUENCY -> STM32_TIMn_CLKIN STM32_APBx_LPTIMn_CLKIN, BOARD_LPTIMn_FREQUENCY and STM32_LPTIMn_FREQUENCY -> STM32_LPTIMn_CLKIN
All STM32 consumers (tim/lptim/pwm/adc/dac/capture/sdadc/dfsdm/pulsecount) updated to match; the timer input clock is now bus-agnostic in the drivers.
Boards that carried the same timer clock in more than one convention now define STM32_TIMn_CLKIN exactly once, derived from the APB bus clock (PCLKx with the x2 doubler when the APB prescaler is greater than 1), instead of redefining it with a second, sometimes different, value.
BREAKING CHANGE: The timer input-clock board macros STM32_APBx_TIMn_CLKIN, BOARD_TIMn_FREQUENCY, STM32_APBx_LPTIMn_CLKIN, BOARD_LPTIMn_FREQUENCY and STM32_LPTIMn_FREQUENCY are removed in favor of STM32_TIMn_CLKIN and STM32_LPTIMn_CLKIN. Out-of-tree boards must define STM32_TIMn_CLKIN / STM32_LPTIMn_CLKIN (drop the APB bus from the name, keep the value), and out-of-tree drivers referencing the old names must be updated.
#19321 !boards: enforce secure ROMFS passwd and TEA key setup
Remove implicit default credentials and add build-time validation. Add check_passwd_keys.sh and gen_passwd_keys.sh; run key setup via passwd_keys.mk before config.h is generated. Mirror the same logic in cmake/nuttx_add_romfs.cmake for CMake builds.
BREAKING CHANGE: Builds with CONFIG_BOARD_ETC_ROMFS_PASSWD_ENABLE=y now require an explicit admin password and non-default TEA keys. The Kconfig default password “Administrator” and default TEA keys are no longer accepted. Fix: run make menuconfig, set Admin password under Board Selection -> Auto-generate /etc/passwd, enable random TEA keys or set CONFIG_FSUTILS_PASSWD_KEY1..4 manually, and use NSH login with Encrypted password file verification.