Description
The PSA Protected Storage credential backend (subsys/net/lib/tls_credentials/tls_credentials_trusted.c) declared its credential-store mutex as a plain zero-filled static struct k_mutex credential_lock; and never called k_mutex_init() on it. A statically zero-filled k_mutex has an uninitialized wait queue (its dlist head/tail are NULL instead of the self-referential sentinels that k_mutex_init/K_MUTEX_DEFINE install). The uncontended lock path does not touch the wait queue, so the defect is latent and serialized use behaves correctly.

When two execution contexts contend on the lock, k_mutex_lock() pends the blocking thread on the wait queue via z_pend_curr(), which calls sys_dlist_append() on the zeroed list and dereferences a NULL tail pointer (tail->next = node), faulting the kernel. The lock is held during TLS handshake credential loading and by all credential add/get/delete operations, so a deployment performing concurrent TLS handshakes (for example a server handling multiple simultaneous connections from a remote peer) or a credential-management operation concurrent with a handshake can trigger the dereference.

The impact is a denial of service: a deterministic kernel panic / device reset on the first contention. There is no memory corruption beyond the NULL dereference and no confidentiality or integrity impact; mutual exclusion on the fast path remains correct. Exposure is limited to builds with CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE enabled (PSA Protected Storage / TF-M platforms); the default volatile RAM backend initializes its lock correctly and is unaffected.

The fix initializes the mutex statically with K_MUTEX_DEFINE(credential_lock), providing a valid wait queue so the contended path no longer touches a NULL list.
Published: 2026-08-12
Score: 5.9 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A static mutex used by the PSA Protected Storage TLS credential backend was zero‑initialized but never properly constructed, leaving its wait‑queue list pointers NULL. When multiple threads attempted to acquire the lock simultaneously, the blocking path appended a node to this malformed list and dereferenced a NULL tail pointer, triggering a kernel panic and device reset. The fault occurs deterministically on the first contention and does not corrupt memory beyond the dereference, so no confidentiality or integrity impact exists; the vulnerability simply halts the system.

Affected Systems

Environments that build the Zephyr Project kernel with CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE enabled – particularly PSA Protected Storage or TF‑M based platforms – are affected. The default volatile RAM credential backend initializes its lock correctly and is not impacted.

Risk and Exploitability

The CVSS score of 5.9 reflects a moderate severity denial of service. EPSS data is not available and the vulnerability is not listed in CISA’s KEV catalog, so the publicly known exploitation probability remains uncertain. Attackers can trigger the crash by inducing concurrent TLS handshakes or credential operations, for example by generating multiple simultaneous connections to an embedded server that uses this backend.

Generated by OpenCVE AI on August 12, 2026 at 13:05 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the upstream patch from commit 29581d586f3d68ec8bb1448b522e5470d4a06aa9 or the release that includes this change.
  • For new builds, replace the static mutex declaration with K_MUTEX_DEFINE(credential_lock) to ensure the wait‑queue is initialized properly.
  • If the protected‑storage backend is not required, disable CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE or switch to the volatile RAM backend.

Generated by OpenCVE AI on August 12, 2026 at 13:05 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 12 Aug 2026 04:30:00 +0000

Type Values Removed Values Added
Description The PSA Protected Storage credential backend (subsys/net/lib/tls_credentials/tls_credentials_trusted.c) declared its credential-store mutex as a plain zero-filled static struct k_mutex credential_lock; and never called k_mutex_init() on it. A statically zero-filled k_mutex has an uninitialized wait queue (its dlist head/tail are NULL instead of the self-referential sentinels that k_mutex_init/K_MUTEX_DEFINE install). The uncontended lock path does not touch the wait queue, so the defect is latent and serialized use behaves correctly. When two execution contexts contend on the lock, k_mutex_lock() pends the blocking thread on the wait queue via z_pend_curr(), which calls sys_dlist_append() on the zeroed list and dereferences a NULL tail pointer (tail->next = node), faulting the kernel. The lock is held during TLS handshake credential loading and by all credential add/get/delete operations, so a deployment performing concurrent TLS handshakes (for example a server handling multiple simultaneous connections from a remote peer) or a credential-management operation concurrent with a handshake can trigger the dereference. The impact is a denial of service: a deterministic kernel panic / device reset on the first contention. There is no memory corruption beyond the NULL dereference and no confidentiality or integrity impact; mutual exclusion on the fast path remains correct. Exposure is limited to builds with CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE enabled (PSA Protected Storage / TF-M platforms); the default volatile RAM backend initializes its lock correctly and is unaffected. The fix initializes the mutex statically with K_MUTEX_DEFINE(credential_lock), providing a valid wait queue so the contended path no longer touches a NULL list.
Title Uninitialized mutex in TLS trusted-credential backend causes kernel NULL-deref DoS under contention
Weaknesses CWE-665
References
Metrics cvssV3_1

{'score': 5.9, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-08-12T03:54:38.100Z

Reserved: 2026-06-15T01:56:02.937Z

Link: CVE-2026-12233

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-12T05:17:42.010

Modified: 2026-08-12T05:17:42.010

Link: CVE-2026-12233

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-12T13:15:04Z

Weaknesses