[SRU][J][PATCH 0/2] CVE-2024-47691 and CVE-2024-53218
Massimiliano Pellizzer
massimiliano.pellizzer at canonical.com
Mon Oct 27 21:19:53 UTC 2025
https://ubuntu.com/security/CVE-2024-47691
https://ubuntu.com/security/CVE-2024-53218
[ Impact ]
CVE-2024-47691
f2fs: fix to avoid use-after-free in f2fs_stop_gc_thread()
The root cause is below race condition, it may cause use-after-free
issue in sbi->gc_th pointer.
- remount
- f2fs_remount
- f2fs_stop_gc_thread
- kfree(gc_th)
- f2fs_ioc_shutdown
- f2fs_do_shutdown
- f2fs_stop_gc_thread
- kthread_stop(gc_th->f2fs_gc_task)
: sbi->gc_thread = NULL;
We will call f2fs_do_shutdown() in two paths:
- for f2fs_ioc_shutdown() path, we should grab sb->s_umount semaphore
for fixing.
- for f2fs_shutdown() path, it's safe since caller has already grabbed
sb->s_umount semaphore.
CVE-2024-53218
f2fs: fix race in concurrent f2fs_stop_gc_thread
The root cause is a race condition in f2fs_stop_gc_thread() called from
different f2fs shutdown paths:
[CPU0] [CPU1]
---------------------- -----------------------
f2fs_stop_gc_thread f2fs_stop_gc_thread
gc_th = sbi->gc_thread
gc_th = sbi->gc_thread
kfree(gc_th)
sbi->gc_thread = NULL
< gc_th != NULL >
kthread_stop(gc_th->f2fs_gc_task) //UAF
The commit c7f114d864ac ("f2fs: fix to avoid use-after-free in
f2fs_stop_gc_thread()") attempted to fix this issue by using a read
semaphore to prevent races between shutdown and remount threads, but
it fails to prevent all race conditions.
Fix it by converting to write lock of s_umount in f2fs_do_shutdown().
[ Fix ]
Backport from upstream the fix commits:
- c7f114d864ac f2fs: fix to avoid use-after-free in f2fs_stop_gc_thread()
- 7b0033dbc483 f2fs: fix race in concurrent f2fs_stop_gc_thread
[ Test Plan ]
Compile and boot tested.
Stress tested a f2fs partition:
```
$ sudo parted -s /dev/vdb mklabel gpt
$ sudo parted -s /dev/vdb mkpart primary 0% 100%
$ sudo mkfs.f2fs -l test /dev/vdb1
$ sudo mkdir /mnt/test
$ sudo mount -t f2fs /dev/vdb1 /mnt/test/
$ cd /mnt/test/
$ sudo stress-ng --class filesystem --sequential 4 --timeout 15s --aggressive --metrics-brief
```
Tested issuing multiple shudown ioctls in parallel:
```
for i in $(seq 1 10); do
f2fs_io shutdown 0 /mnt/temp/test.txt &
done
```
[ Regression Potential ]
The fix serialized concurrent shutdowns and remount paths by taking
sbi->s_umount for write around GC thread teardown, ensuring only one
caller can observe amd operate on sbi->gc_thread at a time.
An issue with this patch could change how long remount and shutdown
take, making certain fs commands block longer or timeout. Under heavy
load an issue may also reveal lock-order bugs.
Chao Yu (1):
f2fs: fix to avoid use-after-free in f2fs_stop_gc_thread()
Long Li (1):
f2fs: fix race in concurrent f2fs_stop_gc_thread
fs/f2fs/file.c | 8 ++++++++
1 file changed, 8 insertions(+)
--
2.51.0
More information about the kernel-team
mailing list