Commit 080d3b2
CKI KWF Bot
Merge: CVE-2025-39881: kernfs: Fix UAF in polling when open file is released
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-10/-/merge_requests/1542
JIRA: https://issues.redhat.com/browse/RHEL-119145
CVE: CVE-2025-39881
```
commit 3c9ba27
Author: Chen Ridong <chenridong@huawei.com>
Date: Fri Aug 22 07:07:14 2025 +0000
kernfs: Fix UAF in polling when open file is released
A use-after-free (UAF) vulnerability was identified in the PSI (Pressure
Stall Information) monitoring mechanism:
BUG: KASAN: slab-use-after-free in psi_trigger_poll+0x3c/0x140
Read of size 8 at addr ffff3de3d50bd308 by task systemd/1
psi_trigger_poll+0x3c/0x140
cgroup_pressure_poll+0x70/0xa0
cgroup_file_poll+0x8c/0x100
kernfs_fop_poll+0x11c/0x1c0
ep_item_poll.isra.0+0x188/0x2c0
Allocated by task 1:
cgroup_file_open+0x88/0x388
kernfs_fop_open+0x73c/0xaf0
do_dentry_open+0x5fc/0x1200
vfs_open+0xa0/0x3f0
do_open+0x7e8/0xd08
path_openat+0x2fc/0x6b0
do_filp_open+0x174/0x368
Freed by task 8462:
cgroup_file_release+0x130/0x1f8
kernfs_drain_open_files+0x17c/0x440
kernfs_drain+0x2dc/0x360
kernfs_show+0x1b8/0x288
cgroup_file_show+0x150/0x268
cgroup_pressure_write+0x1dc/0x340
cgroup_file_write+0x274/0x548
Reproduction Steps:
1. Open test/cpu.pressure and establish epoll monitoring
2. Disable monitoring: echo 0 > test/cgroup.pressure
3. Re-enable monitoring: echo 1 > test/cgroup.pressure
The race condition occurs because:
1. When cgroup.pressure is disabled (echo 0 > cgroup.pressure), it:
- Releases PSI triggers via cgroup_file_release()
- Frees of->priv through kernfs_drain_open_files()
2. While epoll still holds reference to the file and continues polling
3. Re-enabling (echo 1 > cgroup.pressure) accesses freed of->priv
epolling disable/enable cgroup.pressure
fd=open(cpu.pressure)
while(1)
...
epoll_wait
kernfs_fop_poll
kernfs_get_active = true echo 0 > cgroup.pressure
... cgroup_file_show
kernfs_show
// inactive kn
kernfs_drain_open_files
cft->release(of);
kfree(ctx);
...
kernfs_get_active = false
echo 1 > cgroup.pressure
kernfs_show
kernfs_activate_one(kn);
kernfs_fop_poll
kernfs_get_active = true
cgroup_file_poll
psi_trigger_poll
// UAF
...
end: close(fd)
To address this issue, introduce kernfs_get_active_of() for kernfs open
files to obtain active references. This function will fail if the open file
has been released. Replace kernfs_get_active() with kernfs_get_active_of()
to prevent further operations on released file descriptors.
Fixes: 34f26a1 ("sched/psi: Per-cgroup PSI accounting disable/re-enable interface")
Cc: stable <stable@kernel.org>
Reported-by: Zhang Zhaotian <zhangzhaotian@huawei.com>
Signed-off-by: Chen Ridong <chenridong@huawei.com>
Acked-by: Tejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/20250822070715.1565236-2-chenridong@huaweicloud.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
```
Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>
---
<small>Created 2025-10-03 12:52 UTC by backporter - [KWF FAQ](https://red.ht/kernel_workflow_doc) - [Slack #team-kernel-workflow](https://redhat-internal.slack.com/archives/C04LRUPMJQ5) - [Source](https://gitlab.com/cki-project/kernel-workflow/-/blob/main/webhook/utils/backporter.py) - [Documentation](https://gitlab.com/cki-project/kernel-workflow/-/blob/main/docs/README.backporter.md) - [Report an issue](https://issues.redhat.com/secure/CreateIssueDetails!init.jspa?pid=12334433&issuetype=1&priority=4&summary=backporter+webhook+issue&components=kernel-workflow+/+backporter)</small>
Approved-by: Pavel Reichl <preichl@redhat.com>
Approved-by: Brian Foster <bfoster@redhat.com>
Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com>
Merged-by: CKI GitLab Kmaint Pipeline Bot <26919896-cki-kmaint-pipeline-bot@users.noreply.gitlab.com>2 files changed
+39
-20
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
73 | 91 | | |
74 | 92 | | |
75 | 93 | | |
| |||
139 | 157 | | |
140 | 158 | | |
141 | 159 | | |
142 | | - | |
| 160 | + | |
143 | 161 | | |
144 | 162 | | |
145 | 163 | | |
| |||
152 | 170 | | |
153 | 171 | | |
154 | 172 | | |
155 | | - | |
| 173 | + | |
156 | 174 | | |
157 | 175 | | |
158 | 176 | | |
| |||
238 | 256 | | |
239 | 257 | | |
240 | 258 | | |
241 | | - | |
| 259 | + | |
242 | 260 | | |
243 | 261 | | |
244 | 262 | | |
| |||
252 | 270 | | |
253 | 271 | | |
254 | 272 | | |
255 | | - | |
| 273 | + | |
256 | 274 | | |
257 | 275 | | |
258 | 276 | | |
| |||
323 | 341 | | |
324 | 342 | | |
325 | 343 | | |
326 | | - | |
| 344 | + | |
327 | 345 | | |
328 | 346 | | |
329 | 347 | | |
| |||
335 | 353 | | |
336 | 354 | | |
337 | 355 | | |
338 | | - | |
| 356 | + | |
339 | 357 | | |
340 | 358 | | |
341 | 359 | | |
| |||
357 | 375 | | |
358 | 376 | | |
359 | 377 | | |
360 | | - | |
| 378 | + | |
361 | 379 | | |
362 | 380 | | |
363 | 381 | | |
364 | 382 | | |
365 | 383 | | |
366 | | - | |
| 384 | + | |
367 | 385 | | |
368 | 386 | | |
369 | 387 | | |
| |||
375 | 393 | | |
376 | 394 | | |
377 | 395 | | |
378 | | - | |
| 396 | + | |
379 | 397 | | |
380 | 398 | | |
381 | 399 | | |
382 | 400 | | |
383 | 401 | | |
384 | 402 | | |
385 | | - | |
| 403 | + | |
386 | 404 | | |
387 | 405 | | |
388 | 406 | | |
| |||
395 | 413 | | |
396 | 414 | | |
397 | 415 | | |
398 | | - | |
| 416 | + | |
399 | 417 | | |
400 | 418 | | |
401 | 419 | | |
| |||
404 | 422 | | |
405 | 423 | | |
406 | 424 | | |
407 | | - | |
| 425 | + | |
408 | 426 | | |
409 | 427 | | |
410 | 428 | | |
| |||
418 | 436 | | |
419 | 437 | | |
420 | 438 | | |
421 | | - | |
| 439 | + | |
422 | 440 | | |
423 | 441 | | |
424 | 442 | | |
425 | 443 | | |
426 | 444 | | |
427 | 445 | | |
428 | | - | |
| 446 | + | |
429 | 447 | | |
430 | 448 | | |
431 | 449 | | |
| |||
455 | 473 | | |
456 | 474 | | |
457 | 475 | | |
458 | | - | |
| 476 | + | |
459 | 477 | | |
460 | 478 | | |
461 | 479 | | |
| |||
490 | 508 | | |
491 | 509 | | |
492 | 510 | | |
493 | | - | |
| 511 | + | |
494 | 512 | | |
495 | 513 | | |
496 | 514 | | |
| |||
851 | 869 | | |
852 | 870 | | |
853 | 871 | | |
854 | | - | |
| 872 | + | |
855 | 873 | | |
856 | 874 | | |
857 | 875 | | |
858 | 876 | | |
859 | 877 | | |
860 | 878 | | |
861 | 879 | | |
862 | | - | |
| 880 | + | |
863 | 881 | | |
864 | 882 | | |
865 | 883 | | |
| |||
874 | 892 | | |
875 | 893 | | |
876 | 894 | | |
877 | | - | |
| 895 | + | |
878 | 896 | | |
879 | 897 | | |
880 | 898 | | |
| |||
885 | 903 | | |
886 | 904 | | |
887 | 905 | | |
888 | | - | |
| 906 | + | |
889 | 907 | | |
890 | 908 | | |
891 | 909 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4109 | 4109 | | |
4110 | 4110 | | |
4111 | 4111 | | |
| 4112 | + | |
4112 | 4113 | | |
4113 | 4114 | | |
4114 | 4115 | | |
| |||
0 commit comments