Linux: net: ipv6: keep room for the mac header in dst_dev_overhead()
What fixes it
- 36c07127924f11fc5741a780abcaaf808fe9ef13LinuxCVE List
- 87cd6b717e4069dca34e0866e57eaeb44d3b173eLinuxCVE List
- 6.13LinuxCVE List
- 6.14LinuxCVE List
- 5.16LinuxCVE List
- 6.2LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
net: ipv6: keep room for the mac header in dst_dev_overhead()
The seg6, ioam6 and rpl lwtunnels size their skb_cow_head() request as the length they are about to push plus dst_dev_overhead(), then push the new headers and rebuild the mac header below them with skb_mac_header_rebuild(). That rebuild needs skb->mac_len of headroom, but dst_dev_overhead() leaves LL_RESERVED_SPACE() of the egress device, 16 bytes for plain Ethernet.
Where the mac header is longer than that, as it is on ingress through a VLAN device with reorder_hdr off, the rebuild runs out of room: skb_set_mac_header(skb, -skb->mac_len) computes a negative offset, stores it unchecked in the u16 skb->mac_header, and the memmove that follows writes skb->mac_len bytes about 64 KB past skb->head. Forwarding plain ping6 traffic through such a device reproduces it on all five seg6 encapsulation modes and on the rpl and ioam6 inline paths; skb->mac_header comes back as 65534 on a 704-byte head.
Return the larger of the two. The helper already returns skb->mac_len when it has no dst, so this only makes the other branch agree, and it covers every caller rather than each call site in turn.
Text from CVE List
Affected versions 25
- Linuxaffected: dce525185bc92864e5a318040285ee070563fe34 before 36c07127924f11fc5741a780abcaaf808fe9ef13CVE List
- Linuxaffected: dce525185bc92864e5a318040285ee070563fe34 before 87cd6b717e4069dca34e0866e57eaeb44d3b173eCVE List
- Linuxaffected: 8471e228448a818e4c27cab4b681b2e758e46cf5CVE List
- Linuxaffected: c432cd18a07b623651ed15ea167bd303467004ccCVE List
- Linuxaffected: 634710a372ba65bee667c2f6e58a97658c639eabCVE List
- Linuxaffected: c447c5a9c47bb4858ab12bf90879fe595d2b7f46CVE List
- Linuxaffected: ab9de9c48316d2622d3bf353916b99971570e2c9CVE List
- Linuxaffected: 2fcc9f3798ef82399564d247458e69abd10e683bCVE List
- Linuxaffected: 371d8dc298b4f59e99b4564ac5d906fce0932c69CVE List
- Linuxaffected: b26f015dfb07b6be12d005a0ed0c5c43b7bedbf3CVE List
- Linuxaffected: c0b11dc50590e10590b39dcda79835cd32f49d00CVE List
- Linuxaffected: 4c12c3c8abd8b888945d31e7bdbb0d8b73032fc5CVE List
- Linuxaffected: 25d8e065c7972dc98fd7a4cac322d5367eaede88CVE List
- Linuxaffected: 4a855c5aec41bf84922224ab7a74e088776e3ac4CVE List
- Linuxaffected: a9f0407414e16176fdbbbd298c9e18d6dfdf96bcCVE List
- Linuxaffected: 6.12.16 before 6.13CVE List
- Linuxaffected: 6.13.4 before 6.14CVE List
- Linuxaffected: 5.15.179 before 5.16CVE List
- Linuxaffected: 6.1.130 before 6.2CVE List
- Linuxaffected: 6.6.81 before 6.7CVE List
- Linuxaffected: 5.10.235 before 5.11CVE List
- Linuxaffected: 6.14CVE List
- Linuxunaffected: all versions before 6.14CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List