[lvc-project] [PATCH 5.10 2/2] gfs2: Fix slab-use-after-free in gfs2_qd_dealloc
Fedor Pchelkin
pchelkin at ispras.ru
Tue Jan 21 19:45:43 MSK 2025
On Fri, 10. Jan 21:32, Vasiliy Kovalev wrote:
> From: Juntong Deng <juntong.deng at outlook.com>
>
> commit bdcb8aa434c6d36b5c215d02a9ef07551be25a37 upstream.
Этот коммит делает чуть меньше, чем проводимые в патче изменения, то
есть не учитывая f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for
withdraw"). Возможно этот коммит тоже нужен в 5.10 (и в 6.1)?
По крайней мере ошибка "BUG: KASAN: use-after-free in qd_unlock",
исправляемая им, провоцируема в 5.10.
https://syzkaller.appspot.com/bug?extid=3f6a670108ce43356017
>
> In gfs2_put_super(), whether withdrawn or not, the quota should
> be cleaned up by gfs2_quota_cleanup().
>
> Otherwise, struct gfs2_sbd will be freed before gfs2_qd_dealloc (rcu
> callback) has run for all gfs2_quota_data objects, resulting in
> use-after-free.
>
> Also, gfs2_destroy_threads() and gfs2_quota_cleanup() is already called
> by gfs2_make_fs_ro(), so in gfs2_put_super(), after calling
> gfs2_make_fs_ro(), there is no need to call them again.
>
> Reported-by: syzbot+29c47e9e51895928698c at syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=29c47e9e51895928698c
> Signed-off-by: Juntong Deng <juntong.deng at outlook.com>
> Signed-off-by: Andreas Gruenbacher <agruenba at redhat.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> Signed-off-by: Clayton Casciato <majortomtosourcecontrol at gmail.com>
> (cherry picked from commit 7ad4e0a4f61c57c3ca291ee010a9d677d0199fba)
Полагаю, связано с этим.. В [1] должно быть пояснено, но всё равно
возникают вопросы. Какая-то слишком радикальная адаптация
upstream-коммита от Clayton Casciato.
[1]: https://lore.kernel.org/stable/54398cb8-92e0-4ed2-8691-38f6d48efc9a@gmail.com/
> Signed-off-by: Vasiliy Kovalev <kovalev at altlinux.org>
> ---
> fs/gfs2/super.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
> index a9e3956a5b4698..d4399bec7b5b12 100644
> --- a/fs/gfs2/super.c
> +++ b/fs/gfs2/super.c
> @@ -623,6 +623,8 @@ static void gfs2_put_super(struct super_block *sb)
>
> if (!sb_rdonly(sb)) {
> gfs2_make_fs_ro(sdp);
> + } else {
> + gfs2_quota_cleanup(sdp);
Вызов gfs2_quota_cleanup() добавляется другим upstream-коммитом
f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw").
Предпочтительнее, думаю, выглядит выделение этого в бэкпортирование
с адаптацией двух соответствующих upstream коммитов?
> }
> WARN_ON(gfs2_withdrawing(sdp));
>
> --
> 2.33.8
>
>
> _______________________________________________
> lvc-project mailing list
> lvc-project at linuxtesting.org
> http://linuxtesting.org/cgi-bin/mailman/listinfo/lvc-project
More information about the lvc-project
mailing list