{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2023-53517","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-10-01T11:39:39.406Z","datePublished":"2025-10-01T11:46:04.673Z","dateUpdated":"2026-08-05T09:14:33.974Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T09:14:33.974Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ntipc: do not update mtu if msg_max is too small in mtu negotiation\n\nWhen doing link mtu negotiation, a malicious peer may send Activate msg\nwith a very small mtu, e.g. 4 in Shuang's testing, without checking for\nthe minimum mtu, l->mtu will be set to 4 in tipc_link_proto_rcv(), then\nn->links[bearer_id].mtu is set to 4294967228, which is a overflow of\n'4 - INT_H_SIZE - EMSG_OVERHEAD' in tipc_link_mss().\n\nWith tipc_link.mtu = 4, tipc_link_xmit() kept printing the warning:\n\n tipc: Too large msg, purging xmit list 1 5 0 40 4!\n tipc: Too large msg, purging xmit list 1 15 0 60 4!\n\nAnd with tipc_link_entry.mtu 4294967228, a huge skb was allocated in\nnamed_distribute(), and when purging it in tipc_link_xmit(), a crash\nwas even caused:\n\n  general protection fault, probably for non-canonical address 0x2100001011000dd: 0000 [#1] PREEMPT SMP PTI\n  CPU: 0 PID: 0 Comm: swapper/0 Kdump: loaded Not tainted 6.3.0.neta #19\n  RIP: 0010:kfree_skb_list_reason+0x7e/0x1f0\n  Call Trace:\n   <IRQ>\n   skb_release_data+0xf9/0x1d0\n   kfree_skb_reason+0x40/0x100\n   tipc_link_xmit+0x57a/0x740 [tipc]\n   tipc_node_xmit+0x16c/0x5c0 [tipc]\n   tipc_named_node_up+0x27f/0x2c0 [tipc]\n   tipc_node_write_unlock+0x149/0x170 [tipc]\n   tipc_rcv+0x608/0x740 [tipc]\n   tipc_udp_recv+0xdc/0x1f0 [tipc]\n   udp_queue_rcv_one_skb+0x33e/0x620\n   udp_unicast_rcv_skb.isra.72+0x75/0x90\n   __udp4_lib_rcv+0x56d/0xc20\n   ip_protocol_deliver_rcu+0x100/0x2d0\n\nThis patch fixes it by checking the new mtu against tipc_bearer_min_mtu(),\nand not updating mtu if it is too small."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":9.8,"baseSeverity":"CRITICAL"},"scenarios":[{"lang":"en","value":"AV:N - The vulnerable code is reached from `tipc_udp_recv()` → `tipc_rcv()` → `tipc_link_proto_rcv()`, i.e. attacker-supplied TIPC link-protocol packets arriving on the UDP bearer (default port 6118), which is routable across networks — exactly the path in the reported crash trace. TIPC UDP bearers are used for clustered/cloud deployments spanning L3 segments, so no same-segment adjacency is required.\nAC:L - The attacker deterministically controls the whole sequence: send an unauthenticated LINK_CONFIG discovery packet to create the node/link, then reply to the peer's RESET with an ACTIVATE carrying `max_pkt = 4`, and the u32 underflow plus wrapped skb allocation follow with certainty. No race, no memory-layout luck, and the only preconditions (default net_id 4711, session numbers) are attacker-supplied or default.\nPR:N - TIPC neighbour discovery and link establishment are entirely unauthenticated — `tipc_disc_rcv()` validates only net_id and address scope, and `tipc_link_validate_msg()` only checks session numbers supplied by the same attacker. CONFIG_TIPC_CRYPTO is optional and unkeyed by default, so no credentials of any kind are needed.\nUI:N - The malicious ACTIVATE message is processed in softirq context on packet receive, and the resulting `tipc_named_node_up()` bulk publication is emitted automatically when the link comes up. No local user action is involved.\nS:U - The integer underflow, undersized skb allocation, and heap overflow all occur within the kernel's own security authority on the target node. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - The wrapped `tipc_buf_acquire()` yields an skb whose `skb->len` is ~4 GiB while its backing slab object is only a few hundred bytes, and `skb->data` is placed past `skb->end`; the resulting heap corruption and oversized-length skb give an attacker leverage to read adjacent kernel heap memory. Per the memory-corruption guidance this warrants High.\nI:H - This is a genuine out-of-bounds heap write — `tipc_msg_init()`'s memset and the `publ_to_item()` loop write past the undersized buffer, corrupting `skb_shared_info` and neighbouring slab objects. The attacker tunes the wrap by choosing `msg_max_pkt` in 4-byte steps, selecting the target slab cache and write offset, which is a strong primitive for control-flow hijacking.\nA:H - The commit documents a reproducible `general protection fault ... kfree_skb_list_reason` from dereferencing the corrupted skb_shared_info, plus an endless \"Too large msg, purging xmit list\" storm that wedges the link. A remote unauthenticated attacker can panic the node at will."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/tipc/link.c"],"versions":[{"version":"ed193ece2649c194a87a9d8470195760d367c075","lessThan":"2bd4ff4ffb92113f8acd04dbaed83269172c24b4","status":"affected","versionType":"git"},{"version":"ed193ece2649c194a87a9d8470195760d367c075","lessThan":"575e84d90a74c0b091b3417ba763ebb237aa0a8c","status":"affected","versionType":"git"},{"version":"ed193ece2649c194a87a9d8470195760d367c075","lessThan":"259683001d7e879fea4b42084fb6560dd9408a7e","status":"affected","versionType":"git"},{"version":"ed193ece2649c194a87a9d8470195760d367c075","lessThan":"1dd7ae5e0cf5a56e513f7ab7ab9570b7496281d2","status":"affected","versionType":"git"},{"version":"ed193ece2649c194a87a9d8470195760d367c075","lessThan":"56077b56cd3fb78e1c8619e29581ba25a5c55e86","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/tipc/link.c"],"versions":[{"version":"4.1","status":"affected"},{"version":"0","lessThan":"4.1","status":"unaffected","versionType":"semver"},{"version":"5.10.181","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.113","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.30","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.3.4","lessThanOrEqual":"6.3.*","status":"unaffected","versionType":"semver"},{"version":"6.4","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"5.10.181"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"5.15.113"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.1.30"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.3.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.4"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/2bd4ff4ffb92113f8acd04dbaed83269172c24b4"},{"url":"https://git.kernel.org/stable/c/575e84d90a74c0b091b3417ba763ebb237aa0a8c"},{"url":"https://git.kernel.org/stable/c/259683001d7e879fea4b42084fb6560dd9408a7e"},{"url":"https://git.kernel.org/stable/c/1dd7ae5e0cf5a56e513f7ab7ab9570b7496281d2"},{"url":"https://git.kernel.org/stable/c/56077b56cd3fb78e1c8619e29581ba25a5c55e86"}],"title":"tipc: do not update mtu if msg_max is too small in mtu negotiation","x_generator":{"engine":"bippy-1.2.0"}}}}