Re: [PATCH] ext4: avoid huge mmp update interval value

From: Pavel Skripkin
Date: Thu Aug 05 2021 - 16:12:48 EST


On 8/5/21 10:45 PM, Theodore Ts'o wrote:
On Thu, Aug 05, 2021 at 06:14:18PM +0300, Pavel Skripkin wrote:
Syzbot reported task hung bug in ext4_fill_super(). The problem was in
too huge mmp update interval.

Syzkaller reproducer setted s_mmp_update_interval to 39785 seconds. This
update interaval is unreasonable huge and it can cause tasks to hung on
kthread_stop() call, since it will wait until timeout timer expires.

I must be missing something. kthread_stop() should wake up the
kmmpd() thread, which should see kthread_should_stop(), and then it
should exit. What is causing it to wait until the timeout timer
expires?

- Ted



Hi, Ted!

I guess, I've explained my idea badly, sorry :)

I mean, that there is a chance to hit this situation:

CPU0 CPU1
kthread_should_stop() <-- false
kthread_stop()
set_bit(KTHREAD_SHOULD_STOP)
wake_up_process()
wait_for_completion()
schedule_timeout_interruptible()

*waits until timer expires*


Since there wasn't any validation checks for mmp_update_interval, CPU0 will wait for up to (1 << 16) seconds (s_mmp_update_interval it __le16).


With regards,
Pavel Skripkin