Description
In the Linux kernel, the following vulnerability has been resolved: hfs/hfsplus: fix u32 overflow in check_and_correct_requested_length check_and_correct_requested_length() compares (off + len) against node_size using u32 arithmetic. When the caller passes a large len value (e.g. from an underflowed subtraction in hfs_brec_remove()), off + len can wrap past 2^32 and produce a small result, causing the bounds check to pass when it should fail. For example, with off=14 and len=0xFFFFFFF2 (underflowed from data_off - keyoffset - size in hfs_brec_remove), off + len wraps to 6, which is less than a typical node_size of 512, so the check passes and the subsequent memmove reads ~4GB past the node buffer. Fix this by widening the addition to u64 before comparing against node_size. This prevents the u32 wrap while keeping the logic straightforward.
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
67ecc81f6492275c9c54280532f558483c99c90e to < c8dd112173c02adf539fe2ad34a45f5e0068780daffecteda1a60e79502279f996e55052f50cc14919020475 to < fc9d1447ca3cdc78d2e4ace1ce1f3a7c77ca08b1affectedfe2891a9c43ab87d1a210d61e6438ca6936e2f62 to < 671c3fcc2ad31c1311ea6414382a2d95104ae1b9affected384a66b89f9540a9a8cb0f48807697dfabaece4c to < b6a481642ea1977be2f84dc08c5affd742c177e7affectedefc095b35b23297e419c2ab4fc1ed1a8f0781a29 to < 7399c3baee7bb622a92f0b895cd4d3009a693f2baffecteda431930c9bac518bf99d6b1da526a7f37ddee8d8 to < 607217f7ad419b53926f71e3f75001813bbc08adaffecteda431930c9bac518bf99d6b1da526a7f37ddee8d8 to < c25d3c931a63e762fcaa9cb125b901c53b62403faffecteda431930c9bac518bf99d6b1da526a7f37ddee8d8 to < 966cb76fb2857a4242cab6ea2ea17acf818a3da7affectede7d2dc2421e821e4045775e6dc226378328de6f6affectedfc7f732984ec91f30be3e574e0644066d07f2b78affectedeec522fd0d28106b14a59ab2d658605febe4a3bbaffected5.10.241 to < 5.10.261affected5.15.190 to < 5.15.212affected6.1.149 to < 6.1.178affected6.6.103 to < 6.6.145affected6.12.43 to < 6.12.97affected5.4.297 to < 5.5affected6.15.11 to < 6.16affected6.16.2 to < 6.17affected
Linux Linux
Default version status: affected
6.17affected0 to < 6.17unaffected5.10.261 to ≤ 5.10.*unaffected5.15.212 to ≤ 5.15.*unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.4 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/c8dd112173c02adf539fe2ad34a45f5e0068780d ↗
- https://git.kernel.org/stable/c/fc9d1447ca3cdc78d2e4ace1ce1f3a7c77ca08b1 ↗
- https://git.kernel.org/stable/c/671c3fcc2ad31c1311ea6414382a2d95104ae1b9 ↗
- https://git.kernel.org/stable/c/b6a481642ea1977be2f84dc08c5affd742c177e7 ↗
- https://git.kernel.org/stable/c/7399c3baee7bb622a92f0b895cd4d3009a693f2b ↗
- https://git.kernel.org/stable/c/607217f7ad419b53926f71e3f75001813bbc08ad ↗
- https://git.kernel.org/stable/c/c25d3c931a63e762fcaa9cb125b901c53b62403f ↗
- https://git.kernel.org/stable/c/966cb76fb2857a4242cab6ea2ea17acf818a3da7 ↗