UBUNTU-CVE-2024-35807
In the Linux kernel, the following vulnerability has been resolved: ext4: fix corruption during on-line resize We observed a corruption during on-line resize of a file system that is larger than 16 TiB with 4k block size. With having more then 2^32 blocks resize_inode is turned off by default by mke2fs. The issue can be reproduced on a smaller file system for convenience by explicitly turning off resize_inode. An on-line resize across an 8 GiB boundary (the size of a meta block group in this setup) then leads to a corruption: dev=/dev/<some_dev> # should be >= 16 GiB mkdir -p /corruption /sbin/mke2fs -t ext4 -b 4096 -O ^resize_inode $dev $((2 * 2**21 - 2**15)) mount -t ext4 $dev /corruption dd if=/dev/zero bs=4096 of=/corruption/test count=$((2*2**21 - 4*2**15)) sha1sum /corruption/test # 79d2658b39dcfd77274e435b0934028adafaab11 /corruption/test /sbin/resize2fs $dev $((2*2**21)) # drop page cache to force reload the block from disk echo 1 > /proc/sys/vm/drop_caches sha1sum /corruption/test # 3c2abc63cbf1a94c9e6977e0fbd72cd832c4d5c3 /corruption/test 2^21 = 2^15*2^6 equals 8 GiB whereof 2^15 is the number of blocks per block group and 2^6 are the number of block groups that make a meta block group. The last checksum might be different depending on how the file is laid out across the physical blocks. The actual corruption occurs at physical block 63*2^15 = 2064384 which would be the location of the backup of the meta block group's block descriptor. During the on-line resize the file system will be converted to meta_bg starting at s_first_meta_bg which is 2 in the example - meaning all block groups after 16 GiB. However, in ext4_flex_group_add we might add block groups that are not part of the first meta block group yet. In the reproducer we achieved this by substracting the size of a whole block group from the point where the meta block group would start. This must be considered when updating the backup block group descriptors to follow the non-meta_bg layout. The fix is to add a test whether the group to add is already part of the meta block group or not.
02 / AFFECTED SOFTWARE
Affected packages
11 explicit affected versions
31 explicit affected versions
45 explicit affected versions
50 explicit affected versions
6 explicit affected versions
12 explicit affected versions
19 explicit affected versions
6 explicit affected versions
54 explicit affected versions
4 explicit affected versions
40 explicit affected versions
61 explicit affected versions
51 explicit affected versions
40 explicit affected versions
10 explicit affected versions
3 explicit affected versions
47 explicit affected versions
191 explicit affected versions
7 explicit affected versions
46 explicit affected versions
88 explicit affected versions
13 explicit affected versions
85 explicit affected versions
35 explicit affected versions
7 explicit affected versions
14 explicit affected versions
18 explicit affected versions
9 explicit affected versions
118 explicit affected versions
34 explicit affected versions
5 explicit affected versions
90 explicit affected versions
13 explicit affected versions
4 explicit affected versions
121 explicit affected versions
23 explicit affected versions
7 explicit affected versions
1 explicit affected versions
21 explicit affected versions
16 explicit affected versions
10 explicit affected versions
45 explicit affected versions
5 explicit affected versions
7 explicit affected versions
12 explicit affected versions
111 explicit affected versions
38 explicit affected versions
12 explicit affected versions
14 explicit affected versions
7 explicit affected versions
78 explicit affected versions
12 explicit affected versions
93 explicit affected versions
101 explicit affected versions
12 explicit affected versions
89 explicit affected versions
120 explicit affected versions
10 explicit affected versions
10 explicit affected versions
37 explicit affected versions
13 explicit affected versions
10 explicit affected versions
27 explicit affected versions
1 explicit affected versions
31 explicit affected versions
26 explicit affected versions
13 explicit affected versions
144 explicit affected versions
6 explicit affected versions
1 explicit affected versions
29 explicit affected versions
81 explicit affected versions
13 explicit affected versions
51 explicit affected versions
1 explicit affected versions
77 explicit affected versions
49 explicit affected versions
93 explicit affected versions
11 explicit affected versions
33 explicit affected versions
23 explicit affected versions
10 explicit affected versions
188 explicit affected versions
11 explicit affected versions
12 explicit affected versions
7 explicit affected versions
12 explicit affected versions
92 explicit affected versions
138 explicit affected versions
2 explicit affected versions
39 explicit affected versions
32 explicit affected versions
132 explicit affected versions
48 explicit affected versions
165 explicit affected versions
154 explicit affected versions
10 explicit affected versions
26 explicit affected versions
6 explicit affected versions
27 explicit affected versions
1 explicit affected versions
6 explicit affected versions
13 explicit affected versions
5 explicit affected versions
139 explicit affected versions
51 explicit affected versions
16 explicit affected versions
51 explicit affected versions
6 explicit affected versions
40 explicit affected versions
116 explicit affected versions
3 explicit affected versions
93 explicit affected versions
1 explicit affected versions
2 explicit affected versions
58 explicit affected versions
51 explicit affected versions
92 explicit affected versions
3 explicit affected versions
12 explicit affected versions
37 explicit affected versions
27 explicit affected versions
23 explicit affected versions
1 explicit affected versions
1 explicit affected versions
98 explicit affected versions
8 explicit affected versions
12 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
81 explicit affected versions
13 explicit affected versions
45 explicit affected versions
7 explicit affected versions
140 explicit affected versions
94 explicit affected versions
43 explicit affected versions
10 explicit affected versions
12 explicit affected versions
12 explicit affected versions
80 explicit affected versions
44 explicit affected versions
16 explicit affected versions
3 explicit affected versions
13 explicit affected versions
26 explicit affected versions
37 explicit affected versions
37 explicit affected versions
6 explicit affected versions
14 explicit affected versions
38 explicit affected versions
167 explicit affected versions
40 explicit affected versions
9 explicit affected versions
40 explicit affected versions
11 explicit affected versions
48 explicit affected versions
7 explicit affected versions
21 explicit affected versions
97 explicit affected versions
52 explicit affected versions
121 explicit affected versions
4 explicit affected versions
1 explicit affected versions
1 explicit affected versions
46 explicit affected versions
13 explicit affected versions
43 explicit affected versions
46 explicit affected versions
10 explicit affected versions
8 explicit affected versions
1 explicit affected versions
14 explicit affected versions
81 explicit affected versions
4 explicit affected versions
70 explicit affected versions
11 explicit affected versions
1 explicit affected versions
69 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
In the Linux kernel, the following vulnerability has been resolved: ext4: fix corruption during on-line resize We observed a corruption during on-line resize of a file system that is larger than 16 TiB with 4k block size. With having more then 2^32 blocks resize_inode is turned off by default by mke2fs. The issue can be reproduced on a smaller file system for convenience by explicitly turning off resize_inode. An on-line resize across an 8 GiB boundary (the size of a meta block group in this setup) then leads to a corruption: dev=/dev/<some_dev> # should be >= 16 GiB mkdir -p /corruption /sbin/mke2fs -t ext4 -b 4096 -O ^resize_inode $dev $((2 * 2**21 - 2**15)) mount -t ext4 $dev /corruption dd if=/dev/zero bs=4096 of=/corruption/test count=$((2*2**21 - 4*2**15)) sha1sum /corruption/test # 79d2658b39dcfd77274e435b0934028adafaab11 /corruption/test /sbin/resize2fs $dev $((2*2**21)) # drop page cache to force reload the block from disk echo 1 > /proc/sys/vm/drop_caches sha1sum /corruption/test # 3c2abc63cbf1a94c9e6977e0fbd72cd832c4d5c3 /corruption/test 2^21 = 2^15*2^6 equals 8 GiB whereof 2^15 is the number of blocks per block group and 2^6 are the number of block groups that make a meta block group. The last checksum might be different depending on how the file is laid out across the physical blocks. The actual corruption occurs at physical block 63*2^15 = 2064384 which would be the location of the backup of the meta block group's block descriptor. During the on-line resize the file system will be converted to meta_bg starting at s_first_meta_bg which is 2 in the example - meaning all block groups after 16 GiB. However, in ext4_flex_group_add we might add block groups that are not part of the first meta block group yet. In the reproducer we achieved this by substracting the size of a whole block group from the point where the meta block group would start. This must be considered when updating the backup block group descriptors to follow the non-meta_bg layout. The fix is to add a test whether the group to add is already part of the meta block group or not.
05 / REFERENCES
Further evidence
- https://git.kernel.org/linus/a6b3bfe176e8a5b05ec4447404e412c2a3fc92cc
- https://git.kernel.org/stable/c/239c669edb2bffa1aa2612519b1d438ab35d6be6
- https://git.kernel.org/stable/c/37b6a3ba793bbbae057f5b991970ebcc52cb3db5
- https://git.kernel.org/stable/c/722d2c01b8b108f8283d1b7222209d5b2a5aa7bd
- https://git.kernel.org/stable/c/75cc31c2e7193b69f5d25650bda5bb42ed92f8a1
- https://git.kernel.org/stable/c/a6b3bfe176e8a5b05ec4447404e412c2a3fc92cc
- https://git.kernel.org/stable/c/b461910af8ba3bed80f48c2bf852686d05c6fc5c
- https://git.kernel.org/stable/c/e8e8b197317228b5089ed9e7802dadf3ccaa027a
- https://git.kernel.org/stable/c/ee4e9c1976147a850f6085a13fca95bcaa00d84c
- https://git.kernel.org/stable/c/fb1088d51bbaa0faec5a55d4f5818a9ab79e24df
- https://ubuntu.com/security/CVE-2024-35807
- 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-6878-1
- https://ubuntu.com/security/notices/USN-6896-1
- https://ubuntu.com/security/notices/USN-6896-2
- https://ubuntu.com/security/notices/USN-6896-3
- https://ubuntu.com/security/notices/USN-6896-4
- https://ubuntu.com/security/notices/USN-6896-5
- https://ubuntu.com/security/notices/USN-6898-1
- https://ubuntu.com/security/notices/USN-6898-2
- https://ubuntu.com/security/notices/USN-6898-3
- https://ubuntu.com/security/notices/USN-6898-4
- https://ubuntu.com/security/notices/USN-6917-1
- https://ubuntu.com/security/notices/USN-6919-1
- https://ubuntu.com/security/notices/USN-6927-1
- https://ubuntu.com/security/notices/USN-7019-1
- https://www.cve.org/CVERecord?id=CVE-2024-35807