{"id":26429,"date":"2026-09-19T00:31:36","date_gmt":"2026-09-18T16:31:36","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-16514"},"modified":"2026-09-19T00:31:36","modified_gmt":"2026-09-18T16:31:36","slug":"cve-2026-16514","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-16514","title":{"rendered":"CVE-2026-16514 [MEDIUM] &#8211; gptp_mi_qualify_announce() in subsys\/net\/l2\/ethernet\/gptp\/gptp_mi.c walks the Path Trace T"},"content":{"rendered":"<p>gptp_mi_qualify_announce() in subsys\/net\/l2\/ethernet\/gptp\/gptp_mi.c walks the Path Trace TLV of a received IEEE 802.1AS Announce message, comparing each clock identity against the local one. The loop bound was taken solely from the attacker-controlled wire field announce-&gt;steps_removed (accepted up to 254), never from announce-&gt;tlv.len, which is the field that states how many identities the TLV actually carries. Because path_sequence is the flexible member of the wire TLV (struct gptp_path_trace_tlv) and GPTP_ANNOUNCE() yields a raw pointer into the received packet buffer, the memcmp() inside the loop can address memory well past the end of the received frame.<\/p>\n<p>The stack&#8217;s only length validation, GPTP_ANNOUNCE_CHECK_LEN(), requires the received gPTP payload to be exactly 68 + tlv.len bytes \u2014 so it does not constrain the loop, it guarantees the data is absent. An unauthenticated attacker on the same Ethernet segment can send a single Announce frame declaring tlv.len = 0 with steps_removed = 254; the frame passes the length check and reception path (net_gptp_recv() \u2192 gptp_handle_msg() \u2192 gptp_mi_qualify_announce()), which performs no authentication, and the loop then reads 255 entries of 8 bytes each \u2014 about 2 KB \u2014 beyond the end of the network buffer.<\/p>\n<p>The impact is an out-of-bounds read. The bytes read are only used as a memcmp() operand and are never returned to the attacker, so there is no meaningful information disclosure; the practical risk is that the overread crosses a network buffer pool boundary into unmapped or MPU-protected memory and faults the networking RX thread, causing a denial of service. Exposure is limited to builds that enable the opt-in, experimental CONFIG_NET_GPTP (TSN\/AVB deployments) and to attackers with layer-2 adjacency, since gPTP frames are sent to a link-local multicast address and are not routed.<\/p>\n<p>The fix computes the true entry count as tlv.len \/ GPTP_CLOCK_ID_LEN and rejects the announce when steps_removed + 1 exceeds it, so the loop can no longer run past the data the packet-length check proved present.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>gptp_mi_qualify_announce() in subsys\/net\/l2\/ethernet\/gptp\/gptp_mi.c walks the Path Trace TLV of a received IEEE 802.1AS Announce message, comparing each clock identity against the local one. The loop <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-26429","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/26429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}