Skip to content

V11.3.1

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Aug 17:36
· 0 commits to main since this release

Changes between FreeRTOS V11.3.0 and FreeRTOS V11.3.1 released August 2026

    + Add Symmetric Multiprocessing (SMP) support to the Armv8-M ports for the
      GCC, ArmClang and IAR toolchains. This adds per core critical nesting
      state, spinlocks, inter-core yield and wakeup using SEV/WFE, primary and
      secondary core bring up synchronization, and a core safe PendSV context
      switch. Single core builds are unchanged. We thank @AhmedIsmail02 for
      their contribution.
    + Add new xTaskPeriodicDelay API for periodic tasks. It supersedes
      xTaskDelayUntil by preventing run away of pxPreviousWakeTime, catching up
      skipped periods immediately while returning the number of periods skipped,
      and returning 0 when not enough ticks have elapsed. We thank @ntd for
      their contribution.
    + Add uxTaskCallForEachTask API, which invokes a caller supplied callback
      for each task in the system, and refactor uxTaskGetSystemState to use it.
      We thank @DRNadler for their contribution.
    + Add configIDLE_AFFINITY configuration option, which pins each Idle task to
      its corresponding core in SMP systems. It defaults to 0, which allows the
      scheduler to run Idle tasks on any available core. We thank @rus084 for
      their contribution.
    + Add validation to SecureContext_AllocateContext in the ARMv8-M secure side
      ports to ensure that the requested secure stack size plus the stack seal
      size does not overflow before allocating. We thank Jordan Mecom (Block,
      Inc.) for reporting this issue.
    + Add assertions to vQueueDelete to check that no tasks are blocked on the
      queue being deleted.
    + Add a link to the FreeRTOS Kernel threat model in SECURITY.md.
    + Add documentation clarifying that the MemoryRegion_t ulParameters macros
      are port specific, so applications must use the tskMPU_REGION_* or
      portMPU_REGION_* values that match their MPU port. We thank @Old-Ding for
      their contribution.
    + Add a comment documenting that a privileged task must revoke access
      permissions before deleting a kernel object when using Access Control
      Lists.
    + Update the ARM_CRx_No_GIC port to declare vPortYield as a weak symbol so
      that devices with a dedicated software interrupt register can substitute
      their own yield trigger. The default behavior is unchanged. We thank
      @maximdeclercq for their contribution.
    + Update the FreeRTOSConfig.h template to use a 32-bit tick type, which
      avoids compiler warnings on Windows where a 64-bit tick resolves to
      unsigned long long.
    + Update the deprecated CMake configuration warning to use INTERFACE rather
      than PUBLIC for the freertos_config interface library. We thank @Isla-jq
      for their contribution.
    + Fix vPortFreeSecureContext in the ARMv8-M ports to read xSecureContext at
      the correct offset. When the MPU is enabled, the first item in the TCB is
      the stored context location rather than the top of stack, so
      xSecureContext is located at a negative offset from that position.
    + Fix SecureContext_AllocateContext in the ARMv8-M secure side ports to
      reject a secure stack size smaller than the stack seal size.
    + Fix SecureContext_FreeContext in the ARMv8-M secure side ports to refuse
      to free the secure context that is currently loaded, as indicated by
      PSPLIM. Freeing it left the running task referencing freed secure memory.
      The task handle supplied by the non-secure side is untrusted, so it is
      now used only as an additional ownership check.
    + Fix the ARMv8-M ports to service the portSVC_START_SCHEDULER and
      portSVC_FREE_SECURE_CONTEXT supervisor calls only when they are raised
      from privileged code. When the MPU is enabled, both requests are now
      ignored unless the calling program counter lies within the privileged
      functions section.
    + Fix a type confusion in xQueueAddToSet by verifying that the object
      passed as the queue set really is a queue set, that is, that its item
      size is sizeof( Queue_t * ). Passing an ordinary queue now returns
      pdFAIL rather than allowing prvNotifyQueueSetContainer to copy item size
      bytes from a single pointer on the stack.
    + Fix xTimerGenericCommandFromTask to validate the lower bound of
      xCommandID in addition to the existing upper bound, so that only the
      valid task command range from tmrCOMMAND_START_DONT_TRACE to
      tmrCOMMAND_DELETE is accepted. Rejected commands return pdFAIL, and
      behavior for valid commands and for xTimerGenericCommandFromISR is
      unchanged.
    + Fix a kernel object pool entry leak by adding an MPU wrapper for the
      xTimerDelete API, so that the pool index is freed when a timer is deleted
      with MPU wrappers version 2.
    + Fix the MPU wrapper macro mapping for the ARMv8-M ports.
    + Fix silently failing critical sections in unprivileged tasks by
      disallowing configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS with MPU wrappers
      version 2 in the ARMv7-M MPU ports. The option now defaults to 0 under
      version 2, and explicitly setting it to 1 raises a compile time error.
      Behavior with MPU wrappers version 1 is unchanged.
    + Fix a time of check to time of use race condition in vTaskListTasks, where
      reading the volatile task count twice allowed a task to be created between
      the reads, resulting in an undersized allocation and a possible buffer
      overflow in uxTaskGetSystemState. We thank @srpatcha for their
      contribution.
    + Fix a spurious heap_5 assertion when configENABLE_HEAP_PROTECTOR is 1 and
      an allocation cannot be satisfied. The free block search reaching the end
      marker is a normal out of memory condition, so pvPortMalloc now returns
      NULL and invokes the malloc failed hook instead of asserting.
    + Fix batching stream buffers to unblock a receiver only after the buffered
      byte count exceeds, rather than reaches, the trigger level. Previously a
      receiver could be woken early and xStreamBufferReceive could return 0
      bytes. Stream buffer and message buffer semantics are unchanged. We thank
      @officialasishkumar for their contribution.
    + Fix MISRA C 2012 Rule 20.4 violation by replacing `#define static` with a
      STATIC macro, which also keeps the static variables in
      vApplicationGetIdleTaskMemory and vApplicationGetPassiveIdleTaskMemory
      static when portREMOVE_STATIC_QUALIFIER is defined. We thank @elsonwei for
      their contribution.
    + Fix undefined behavior in the MSVC-MingW port caused by left shifting a
      signed int by 31 or more bits.
    + Fix a duplicate Doxygen \defgroup identifier by giving
      uxTaskBasePriorityGet its own group instead of reusing the
      uxTaskPriorityGet group.
    + Fix the incorrect #endif comment after vPortSetupTimerInterrupt in the GCC
      and IAR RISC-V ports, which duplicated configMTIME_BASE_ADDRESS and
      omitted configMTIMECMP_BASE_ADDRESS. We thank @cuiweixie for their
      contribution.
    + Fix incorrect #endif comments in croutine.c and queue.c, which reversed
      the configUSE_CO_ROUTINES condition and named the wrong configuration
      option for configSUPPORT_DYNAMIC_ALLOCATION. We thank @Zepp-Hanzj for
      their contribution.
    + Fix the configLIST_VOLATILE #endif comment and the documented parameter
      names for uxListRemove in include/list.h. We thank @rakeshr-source for
      their contribution.
    + Fix the type and timeout values used in the xStreamBufferSend and
      xMessageBufferSend documentation examples. We thank @Isla-jq for their
      contribution.
    + Fix copy and paste comment typos in xTaskGetApplicationTaskTag and
      xTaskGetApplicationTaskTagFromISR, and a typo in the
      xTaskGenericNotifyWait comment. We thank @wanghengZzz for their
      contributions.
    + Fix comment typos in the queue.h, list.h and task.h documentation,
      including the xQueueReceiveFromISR and xQueueGenericSend examples, the
      listGET_ITEM_VALUE_OF_HEAD_ENTRY \page tag, and the uxIndexToCLear typo.
      We thank @zepp-chen for their contribution.
    + Fix the FreeRTOSConfig.h template path referenced in README.md. We thank
      @IClementI for their contribution.
    + Fix the missing V prefix in the release_tag and namespace-prefix inputs of
      the auto release workflow.
    + Fix long path failures in the Windows kernel demo builds by enabling
      Windows long path support in CI.
    + Remove an unnecessary const variable from the GCC and IAR RISC-V ports. We
      thank @IClementI for their contribution.