Description
In the Linux kernel, the following vulnerability has been resolved: ipv4: reject undersized MTUs in ip_do_fragment() ip_do_fragment() subtracts the IPv4 header length from the effective MTU and passes the resulting payload MTU to ip_frag_next(). If the effective MTU is smaller than hlen + 8, ip_frag_next() rounds the fragment payload length down to zero. The fragmentation state then never makes forward progress: state->left, state->ptr and state->offset stay unchanged while ip_do_fragment() keeps allocating and transmitting header-only fragments until the softlockup detector fires. This is reproducible with a route installed using "mtu lock 20", but it is also reproducible without route MTU lock, for example by forwarding a packet to a device whose MTU is 20. Fix it in ip_do_fragment() by rejecting mtu < hlen + 8 with -EMSGSIZE, matching the existing IPv6 fragmentation check.
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
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < a716a64a4ba68cd46f2745fba2b1099fe8e0aa59affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 515b6816ba0c12d8415c88e5f41e6ec029e35cfaaffected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 74ce7389f8f562d39015f59a00ef7ad6acd37803affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < b0ea911453ce7210e8200a07a94d2458bd1e6430affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 36e0741833bd823866f8cb9f112f37cea1a70b60affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < d9d1a676b033acabf8e5645f730486d1f8204a3faffected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < 3556beb8ca86677af2aca5bfbed6f8e790fccc83affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < c8a74adccaf028223054633b532593101dfcc581affected1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to < c0726f0caf8c6b3208552949e17d23634a2f3129affected
Linux Linux
Default version status: affected
2.6.12affected0 to < 2.6.12unaffected5.10.267 to ≤ 5.10.*unaffected5.15.218 to ≤ 5.15.*unaffected6.1.185 to ≤ 6.1.*unaffected6.6.154 to ≤ 6.6.*unaffected6.12.106 to ≤ 6.12.*unaffected6.18.47 to ≤ 6.18.*unaffected7.1.11 to ≤ 7.1.*unaffected7.2.1 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/a716a64a4ba68cd46f2745fba2b1099fe8e0aa59 ↗
- https://git.kernel.org/stable/c/515b6816ba0c12d8415c88e5f41e6ec029e35cfa ↗
- https://git.kernel.org/stable/c/74ce7389f8f562d39015f59a00ef7ad6acd37803 ↗
- https://git.kernel.org/stable/c/b0ea911453ce7210e8200a07a94d2458bd1e6430 ↗
- https://git.kernel.org/stable/c/36e0741833bd823866f8cb9f112f37cea1a70b60 ↗
- https://git.kernel.org/stable/c/d9d1a676b033acabf8e5645f730486d1f8204a3f ↗
- https://git.kernel.org/stable/c/3556beb8ca86677af2aca5bfbed6f8e790fccc83 ↗
- https://git.kernel.org/stable/c/c8a74adccaf028223054633b532593101dfcc581 ↗
- https://git.kernel.org/stable/c/c0726f0caf8c6b3208552949e17d23634a2f3129 ↗