Description
In the Linux kernel, the following vulnerability has been resolved: ipv6: sr: restore network header before routing and forwarding ipv6_srh_rcv() runs with skb->data at the Segment Routing Header (SRH) while skb_network_header() points at the IPv6 header. When segments_left > 0, ipv6_srh_rcv() previously restored the skb->data position by pushing sizeof(struct ipv6hdr), assuming the SRH immediately followed the fixed IPv6 header. If another extension header (such as a Hop-by-Hop options header) precedes the SRH, skb_network_offset() remained negative. This led to two problems: 1. During ip6_route_input(), fib6_rules_early_flow_dissect() invokes __skb_flow_dissect() which passes the negative skb_network_offset() to flow dissection, breaking BPF and C flow dissector logic. 2. If forwarded via ip6_forward() or redirected via act_mirred, downstream handlers (like sch_fragment() or neighbour output) pass the negative offset as an unsigned length, triggering OOB memcpy or buffer overflows. Fix this by pushing -skb_network_offset(skb) before routing, ensuring skb_network_offset(skb) is 0 for route lookup / flow dissection as well as downstream forwarding. On the loopback path, pull skb_transport_offset(skb) to restore skb->data to the SRH before looping back.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
1ababeba4a21f3dba3da3523c670b207fb2feb62 to < f463c4786cf27376de7dfc0833a12e924a98f698affected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < 8f44d4160bcdb3136a9145a4b9c7816382976925affected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < 9cfbe2c381ab6d00a08e7a5b6028865adfb4e1bcaffected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < af08f62b5a5a446d6134a92d86771d3d12e0e3daaffected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < ce4c8beedc19aceeab0e7bdc6f34394fb158c47caffected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < 97b21ef57dfabbff660a4672c9fef7edfb720f47affected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < 3ad7dca5e03bd64c65983a19734337512fd75491affected1ababeba4a21f3dba3da3523c670b207fb2feb62 to < 975b5b067f525a1b1338c4a3bee1c46545801518affected
Linux Linux
Default version status: affected
4.10affected0 to < 4.10unaffected5.10.271 to ≤ 5.10.*unaffected5.15.222 to ≤ 5.15.*unaffected6.1.189 to ≤ 6.1.*unaffected6.6.158 to ≤ 6.6.*unaffected6.12.111 to ≤ 6.12.*unaffected6.18.53 to ≤ 6.18.*unaffected7.2.7 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/f463c4786cf27376de7dfc0833a12e924a98f698 ↗
- https://git.kernel.org/stable/c/8f44d4160bcdb3136a9145a4b9c7816382976925 ↗
- https://git.kernel.org/stable/c/9cfbe2c381ab6d00a08e7a5b6028865adfb4e1bc ↗
- https://git.kernel.org/stable/c/af08f62b5a5a446d6134a92d86771d3d12e0e3da ↗
- https://git.kernel.org/stable/c/ce4c8beedc19aceeab0e7bdc6f34394fb158c47c ↗
- https://git.kernel.org/stable/c/97b21ef57dfabbff660a4672c9fef7edfb720f47 ↗
- https://git.kernel.org/stable/c/3ad7dca5e03bd64c65983a19734337512fd75491 ↗
- https://git.kernel.org/stable/c/975b5b067f525a1b1338c4a3bee1c46545801518 ↗