[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