ACK: [SRU][J][PATCH 0/2] CVE-2024-47691 and CVE-2024-53218
Tim Whisonant
tim.whisonant at canonical.com
Tue Oct 28 00:51:18 UTC 2025
On Mon, Oct 27, 2025 at 10:19:53PM +0100, Massimiliano Pellizzer wrote:
> 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
>
Acked-by: Tim Whisonant <tim.whisonant at canonical.com>
More information about the kernel-team
mailing list