惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
L
LangChain Blog
C
Check Point Blog
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
美团技术团队
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
腾讯CDC
B
Blog
G
Google Developers Blog
The Cloudflare Blog
P
Proofpoint News Feed

dnsmasq-discuss

[Dnsmasq-discuss] Announce: dnsmasq-2.92rc2 Re: [Dnsmasq-discuss] [PATCH] Fix arguments order for chaos subdomain check Re: [Dnsmasq-discuss] patch: block-file/allow-file - for review/feedback Re: [Dnsmasq-discuss] patch: block-file/allow-file - for review/feedback Re: [Dnsmasq-discuss] patch: block-file/allow-file - for review/feedback Re: [Dnsmasq-discuss] patch: block-file/allow-file - for review/feedback [Dnsmasq-discuss] patch: block-file/allow-file - for review/feedback Re: [Dnsmasq-discuss] server= with interface parameter changes behavior over time [Dnsmasq-discuss] NFTsets and hosts-files [Dnsmasq-discuss] [PATCH] Allow expired RRSIGs when stale caching is enabled [Dnsmasq-discuss] [PATCH] Fix local host records being overridden by upstream NXDOMAIN [Dnsmasq-discuss] [PATCH] Fix arguments order for chaos subdomain check Re: [Dnsmasq-discuss] Malformed RRSIG Can Crash dnsmasq [Dnsmasq-discuss] Malformed NSEC/NSEC3 Can Hang dnsmasq [Dnsmasq-discuss] Malformed RRSIG Can Crash dnsmasq [Dnsmasq-discuss] Security - IMPORTANT Re: [Dnsmasq-discuss] Issue with circuit-id matching on dhcp requests Re: [Dnsmasq-discuss] Issue with circuit-id matching on dhcp requests Re: [Dnsmasq-discuss] Issue with circuit-id matching on dhcp requests [Dnsmasq-discuss] Issue with circuit-id matching on dhcp requests Re: [Dnsmasq-discuss] [PATCH] bpf.c: fix memory leak in arp_enumerate() on BSD Re: [Dnsmasq-discuss] [PATCH] bpf.c: fix memory leak in arp_enumerate() on BSD Re: [Dnsmasq-discuss] dnssec problem here and now Re: [Dnsmasq-discuss] dnssec problem here and now [Dnsmasq-discuss] dnssec problem here and now Re: [Dnsmasq-discuss] server= with interface parameter changes behavior over time Re: [Dnsmasq-discuss] [PATCH] bpf.c: fix memory leak in arp_enumerate() on BSD Re: [Dnsmasq-discuss] [PATCH] bpf.c: fix memory leak in arp_enumerate() on BSD Re: [Dnsmasq-discuss] [PATCH] Preserve existing log file permissions when adding group-write bit. [Dnsmasq-discuss] server= with interface parameter changes behavior over time
[Dnsmasq-discuss] [Bug] Buffer underflow in hostname_issu...
Critizero Chen · 2026-04-21 · via dnsmasq-discuss
Hi all,

I am reporting an issue found in src/util.c. This is a pointer underflow
vulnerability in the hostname_issubdomain() function, which I have verified
on the latest development version: *dnsmasq 2.93test4-11-gcf08eee*.
Summary

The function hostname_issubdomain(char *a, char *b) fails to handle cases
where the parameter b is an empty string. When b is empty, the pointer bp
underflows during the first iteration of the do-while loop, leading to an
out-of-bounds read.
Root Cause Analysis

In src/util.c (around line 436 in the current master):

  /* move to the end */
  for (bp = b; *bp; bp++); // If b is "", bp remains equal to b
  ...
  do
    {
      c1 = (unsigned char) *(--ap);
      c2 = (unsigned char) *(--bp);  // BUG: bp becomes b-1 (Underflow)
      ...
    } while (bp != b); // Since bp is already < b, this condition stays true

When b is an empty string (length 0), the initialization loop for bp does
nothing. The subsequent do-while loop immediately decrements bp to b-1,
reading memory outside the allocated buffer.
Trigger Path & Verification

This can be triggered by sending a CHAOS class DNS query for the root
domain (.):

   1.

   extract_name() parses the root domain as an empty string "".
   2.

   In src/rfc1035.c, it calls hostname_issubdomain("bind", name).
   3.

   With name as "", the underflow occurs.

*Reproducer:* dig @127.0.0.1 -p [PORT] -c CH -t TXT .
Severity & Impact

I performed dynamic testing with >100,000 queries. While a persistent
infinite loop (DoS) is difficult to achieve because the loop usually breaks
when c1 != c2 (random stack data), Valgrind consistently reports an *Invalid
read of size 1*.

This memory safety issue leads to *Undefined Behavior* and potential minor
information leakage from the stack or heap area immediately preceding the
buffer.
Evidence (Valgrind Output)
==73== Invalid read of size 1
==73==    at 0x11E139: hostname_issubdomain (in /root/dnsmasq/src/dnsmasq)
==73==    by 0x11B424: answer_request (in /root/dnsmasq/src/dnsmasq)
==73==    by 0x12FE31: receive_query (in /root/dnsmasq/src/dnsmasq)
==73==    by 0x1129D4: main (in /root/dnsmasq/src/dnsmasq)
==73==  Address 0x4a8b48f is 1 bytes before a block of size 2,051 alloc'd
==73==    at 0x484DA83: calloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==73==    by 0x11DE34: safe_malloc (in /root/dnsmasq/src/dnsmasq)
==73==    by 0x12AB68: read_opts (in /root/dnsmasq/src/dnsmasq)
==73==    by 0x1113F1: main (in /root/dnsmasq/src/dnsmasq)
_______________________________________________
Dnsmasq-discuss mailing list
[email protected]
https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss