In the Linux kernel, the following vulnerability has been resolved:
md: fix soft lockup in status_resync
status_resync() will calculate 'curr_resync - recovery_active' to show user a progress bar like following:
[============>........] resync = 61.4%
'curr_resync' and 'recovery_active' is updated in md_do_sync(), and status_resync() can read them concurrently, hence it's possible that 'curr_resync - recovery_active' can overflow to a huge number. In this case status_resync() will be stuck in the loop to print a large amount of '=', which will end up soft lockup.
Fix the problem by setting 'resync' to MD_RESYNC_ACTIVE in this case, this way resync in progress will be reported to user.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 2.6.12.1 | 6.1.30 |
| linux / linux_kernel | 6.2 | 6.3.4 |
| linux / linux_kernel | 2.6.12 | 2.6.12.x |
| linux / linux_kernel | 2.6.12-rc2 | 2.6.12-rc2.x |
| linux / linux_kernel | 2.6.12-rc3 | 2.6.12-rc3.x |
| linux / linux_kernel | 2.6.12-rc4 | 2.6.12-rc4.x |
| linux / linux_kernel | 2.6.12-rc5 | 2.6.12-rc5.x |