[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