UBUNTU-CVE-2024-26885
In the Linux kernel, the following vulnerability has been resolved: bpf: Fix DEVMAP_HASH overflow check on 32-bit arches The devmap code allocates a number hash buckets equal to the next power of two of the max_entries value provided when creating the map. When rounding up to the next power of two, the 32-bit variable storing the number of buckets can overflow, and the code checks for overflow by checking if the truncated 32-bit value is equal to 0. However, on 32-bit arches the rounding up itself can overflow mid-way through, because it ends up doing a left-shift of 32 bits on an unsigned long value. If the size of an unsigned long is four bytes, this is undefined behaviour, so there is no guarantee that we'll end up with a nice and tidy 0-value at the end. Syzbot managed to turn this into a crash on arm32 by creating a DEVMAP_HASH with max_entries > 0x80000000 and then trying to update it. Fix this by moving the overflow check to before the rounding up operation.
02 / AFFECTED SOFTWARE
Affected packages
11 explicit affected versions
29 explicit affected versions
43 explicit affected versions
50 explicit affected versions
6 explicit affected versions
12 explicit affected versions
19 explicit affected versions
6 explicit affected versions
52 explicit affected versions
4 explicit affected versions
38 explicit affected versions
68 explicit affected versions
49 explicit affected versions
38 explicit affected versions
10 explicit affected versions
3 explicit affected versions
45 explicit affected versions
7 explicit affected versions
46 explicit affected versions
95 explicit affected versions
13 explicit affected versions
35 explicit affected versions
5 explicit affected versions
14 explicit affected versions
18 explicit affected versions
7 explicit affected versions
33 explicit affected versions
5 explicit affected versions
97 explicit affected versions
13 explicit affected versions
4 explicit affected versions
23 explicit affected versions
7 explicit affected versions
21 explicit affected versions
16 explicit affected versions
10 explicit affected versions
52 explicit affected versions
5 explicit affected versions
7 explicit affected versions
12 explicit affected versions
36 explicit affected versions
12 explicit affected versions
14 explicit affected versions
7 explicit affected versions
85 explicit affected versions
12 explicit affected versions
100 explicit affected versions
108 explicit affected versions
12 explicit affected versions
96 explicit affected versions
10 explicit affected versions
37 explicit affected versions
13 explicit affected versions
10 explicit affected versions
25 explicit affected versions
1 explicit affected versions
35 explicit affected versions
26 explicit affected versions
13 explicit affected versions
4 explicit affected versions
29 explicit affected versions
88 explicit affected versions
13 explicit affected versions
49 explicit affected versions
83 explicit affected versions
47 explicit affected versions
100 explicit affected versions
9 explicit affected versions
33 explicit affected versions
23 explicit affected versions
10 explicit affected versions
11 explicit affected versions
12 explicit affected versions
7 explicit affected versions
12 explicit affected versions
98 explicit affected versions
37 explicit affected versions
30 explicit affected versions
46 explicit affected versions
10 explicit affected versions
26 explicit affected versions
6 explicit affected versions
34 explicit affected versions
1 explicit affected versions
6 explicit affected versions
13 explicit affected versions
5 explicit affected versions
58 explicit affected versions
16 explicit affected versions
49 explicit affected versions
6 explicit affected versions
39 explicit affected versions
3 explicit affected versions
1 explicit affected versions
2 explicit affected versions
65 explicit affected versions
51 explicit affected versions
3 explicit affected versions
12 explicit affected versions
35 explicit affected versions
27 explicit affected versions
21 explicit affected versions
1 explicit affected versions
8 explicit affected versions
10 explicit affected versions
5 explicit affected versions
8 explicit affected versions
1 explicit affected versions
10 explicit affected versions
2 explicit affected versions
13 explicit affected versions
87 explicit affected versions
13 explicit affected versions
52 explicit affected versions
7 explicit affected versions
41 explicit affected versions
10 explicit affected versions
12 explicit affected versions
12 explicit affected versions
87 explicit affected versions
44 explicit affected versions
16 explicit affected versions
3 explicit affected versions
13 explicit affected versions
26 explicit affected versions
35 explicit affected versions
37 explicit affected versions
6 explicit affected versions
14 explicit affected versions
38 explicit affected versions
39 explicit affected versions
9 explicit affected versions
38 explicit affected versions
11 explicit affected versions
46 explicit affected versions
7 explicit affected versions
20 explicit affected versions
59 explicit affected versions
4 explicit affected versions
1 explicit affected versions
1 explicit affected versions
44 explicit affected versions
13 explicit affected versions
43 explicit affected versions
53 explicit affected versions
10 explicit affected versions
8 explicit affected versions
1 explicit affected versions
14 explicit affected versions
88 explicit affected versions
4 explicit affected versions
77 explicit affected versions
11 explicit affected versions
1 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
In the Linux kernel, the following vulnerability has been resolved: bpf: Fix DEVMAP_HASH overflow check on 32-bit arches The devmap code allocates a number hash buckets equal to the next power of two of the max_entries value provided when creating the map. When rounding up to the next power of two, the 32-bit variable storing the number of buckets can overflow, and the code checks for overflow by checking if the truncated 32-bit value is equal to 0. However, on 32-bit arches the rounding up itself can overflow mid-way through, because it ends up doing a left-shift of 32 bits on an unsigned long value. If the size of an unsigned long is four bytes, this is undefined behaviour, so there is no guarantee that we'll end up with a nice and tidy 0-value at the end. Syzbot managed to turn this into a crash on arm32 by creating a DEVMAP_HASH with max_entries > 0x80000000 and then trying to update it. Fix this by moving the overflow check to before the rounding up operation.
05 / REFERENCES
Further evidence
- https://git.kernel.org/linus/281d464a34f540de166cee74b723e97ac2515ec3
- https://git.kernel.org/stable/c/22079b3a423382335f47d9ed32114e6c9fe88d7c
- https://git.kernel.org/stable/c/225da02acdc97af01b6bc6ce1a3e5362bf01d3fb
- https://git.kernel.org/stable/c/250051acc21f9d4c5c595e4fcb55986ea08c4691
- https://git.kernel.org/stable/c/281d464a34f540de166cee74b723e97ac2515ec3
- https://git.kernel.org/stable/c/c826502bed93970f2fd488918a7b8d5f1d30e2e3
- https://git.kernel.org/stable/c/e89386f62ce9a9ab9a94835a9890883c23d9d52c
- https://git.kernel.org/stable/c/edf7990baa48de5097daa9ac02e06cb4c798a737
- https://ubuntu.com/security/CVE-2024-26885
- https://ubuntu.com/security/notices/USN-6816-1
- https://ubuntu.com/security/notices/USN-6817-1
- https://ubuntu.com/security/notices/USN-6817-2
- https://ubuntu.com/security/notices/USN-6817-3
- https://ubuntu.com/security/notices/USN-6820-1
- https://ubuntu.com/security/notices/USN-6820-2
- https://ubuntu.com/security/notices/USN-6821-1
- https://ubuntu.com/security/notices/USN-6821-2
- https://ubuntu.com/security/notices/USN-6821-3
- https://ubuntu.com/security/notices/USN-6821-4
- https://ubuntu.com/security/notices/USN-6828-1
- https://ubuntu.com/security/notices/USN-6871-1
- https://ubuntu.com/security/notices/USN-6878-1
- https://ubuntu.com/security/notices/USN-6892-1
- https://ubuntu.com/security/notices/USN-6919-1
- https://ubuntu.com/security/notices/USN-7088-1
- https://ubuntu.com/security/notices/USN-7088-2
- https://ubuntu.com/security/notices/USN-7088-3
- https://ubuntu.com/security/notices/USN-7088-4
- https://ubuntu.com/security/notices/USN-7088-5
- https://ubuntu.com/security/notices/USN-7119-1
- https://www.cve.org/CVERecord?id=CVE-2024-26885