[lvc-project] [PATCH 5.10 2/2] gfs2: Fix slab-use-after-free in gfs2_qd_dealloc
Vasiliy Kovalev
kovalev at altlinux.org
Wed Jan 22 00:54:40 MSK 2025
21.01.2025 19:45, Fedor Pchelkin wrote:
> 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/
Да, к тому же этот патч продолжает "жить" с версии 6.1.97 и за это время
должно быть протестирован
>> 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 коммитов?
Патч f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw") [1]
зависит от b77b4a4815a965 ("gfs2: Rework freeze / thaw logic") [2]
и думаю, что оба должны рассматриваться отдельно при анализе упомянутой
ошибки "BUG: KASAN: use-after-free in qd_unlock", а текущая серия (like
6.1) достаточна.
[1] https://github.com/torvalds/linux/commit/f66af88e33212b
[2] https://github.com/torvalds/linux/commit/b77b4a4815a965
>> }
>> 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
--
--
Thanks,
Vasiliy
More information about the lvc-project
mailing list