---
id: CVE-2026-10657
title: >-
  Out-of-bounds read in Zephyr DNS resolver mDNS suffix check (memcmp past
  string NUL)
summary: >-
  Zephyr's DNS resolver detects mDNS (.local) queries in
  dns_resolve_name_internal() (subsys/net/lib/dns/resolve.c) with
  memcmp(strrchr(query, '.'), ".local", 7), which always reads a fixed 7 bytes
  from the suffix pointer. When the resolve…
severity: low
cvss: 3.7
cvssVector: 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L'
cvssSource: cna
cwe:
  - CWE-125
vendor: zephyrproject
product: zephyr
affected:
  - zephyr >= 1.10.0 < 4.3.1
  - zephyr >= 4.4.0 < 4.4.2
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-07-06T18:51:45.471859Z'
published: '2026-07-05'
updated: '2026-10-15'
sourceUpdated: '2026-10-15T22:10:09.785Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-10657'
references:
  - url: >-
      https://github.com/zephyrproject-rtos/zephyr/commit/448a21da12c9ea28f7fd12c6894e03a987b17a27
    label: Fix commit
  - url: >-
      https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-76jh-3j5f-9vq4
    label: GHSA-76jh-3j5f-9vq4
tags:
  - cve.org
epss: 0.00403
epssPercentile: 0.32878
ingestedAt: '2026-10-15T22:48:25.567Z'
---

## Overview

Zephyr's DNS resolver detects mDNS (.local) queries in dns_resolve_name_internal() (subsys/net/lib/dns/resolve.c) with memcmp(strrchr(query, '.'), ".local", 7), which always reads a fixed 7 bytes from the suffix pointer. When the resolved hostname's final label is shorter than 7 bytes (e.g. names ending in .org, .com, .net, .io, or a trailing dot), the comparison reads 1-2 bytes past the string's NUL terminator.

The hostname (query) is the caller-supplied name passed through the standard getaddrinfo()/dns_get_addr_info()/dns_resolve_name() path and is influenceable by operators or remote inputs (server names from configuration, parsed URLs, or app-facing interfaces).

On a tightly-sized buffer with no slack (for example a userspace getaddrinfo call where the hostname is copied with k_usermode_string_alloc_copy to exactly strlen+1 bytes), the over-read crosses the allocation boundary; if that boundary is unmapped (guard page, memory-domain boundary under MPU, or an address sanitizer) the over-read faults, causing a denial of service. The over-read bytes are never returned, so there is no information disclosure.

The flaw is compiled only when CONFIG_MDNS_RESOLVER is enabled, exists since v1.10.0, and is fixed by replacing the fixed-length memcmp with a NUL-safe strcmp(ptr, ".local").

## Affected

- `zephyr >= 1.10.0 < 4.3.1`
- `zephyr >= 4.4.0 < 4.4.2`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
