Commit 9061f0d
ext4: add positive int attr pointer to avoid sysfs variables overflow
We can easily trigger a BUG_ON by using the following commands:
mount /dev/$disk /tmp/test
echo 2147483650 > /sys/fs/ext4/$disk/mb_group_prealloc
echo test > /tmp/test/file && sync
==================================================================
kernel BUG at fs/ext4/mballoc.c:2029!
invalid opcode: 0000 [#1] PREEMPT SMP PTI
CPU: 3 PID: 320 Comm: kworker/u36:1 Not tainted 6.8.0-rc1 torvalds#462
RIP: 0010:mb_mark_used+0x358/0x370
[...]
Call Trace:
ext4_mb_use_best_found+0x56/0x140
ext4_mb_complex_scan_group+0x196/0x2f0
ext4_mb_regular_allocator+0xa92/0xf00
ext4_mb_new_blocks+0x302/0xbc0
ext4_ext_map_blocks+0x95a/0xef0
ext4_map_blocks+0x2b1/0x680
ext4_do_writepages+0x733/0xbd0
[...]
==================================================================
In ext4_mb_normalize_group_request():
ac->ac_g_ex.fe_len = EXT4_SB(sb)->s_mb_group_prealloc;
Here fe_len is of type int, but s_mb_group_prealloc is of type unsigned
int, so setting s_mb_group_prealloc to 2147483650 overflows fe_len to a
negative number, which ultimately triggers a BUG_ON() in mb_mark_used().
Therefore, we add attr_pointer_pi (aka positive int attr pointer) with a
value range of 0-INT_MAX to avoid the above problem. In addition to the
mb_group_prealloc sysfs interface, the following interfaces also have uint
to int conversions that result in overflows, and are also fixed.
err_ratelimit_burst
msg_ratelimit_burst
warning_ratelimit_burst
err_ratelimit_interval_ms
msg_ratelimit_interval_ms
warning_ratelimit_interval_ms
mb_best_avail_max_trim_order
CC: stable@vger.kernel.org
Signed-off-by: Baokun Li <libaokun1@huawei.com>1 parent 1a08ae1 commit 9061f0d
1 file changed
+17
-8
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
178 | 179 | | |
179 | 180 | | |
180 | 181 | | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
181 | 185 | | |
182 | 186 | | |
183 | 187 | | |
| |||
213 | 217 | | |
214 | 218 | | |
215 | 219 | | |
216 | | - | |
| 220 | + | |
217 | 221 | | |
218 | 222 | | |
219 | 223 | | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
227 | 231 | | |
228 | 232 | | |
229 | 233 | | |
| |||
376 | 380 | | |
377 | 381 | | |
378 | 382 | | |
| 383 | + | |
379 | 384 | | |
380 | 385 | | |
381 | 386 | | |
| |||
448 | 453 | | |
449 | 454 | | |
450 | 455 | | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
451 | 460 | | |
452 | 461 | | |
453 | 462 | | |
| |||
0 commit comments