Thread (34 messages) 34 messages, 6 authors, 2021-11-29

Re: [PATCH 0/3] Avoid live-lock in fault-in+uaccess loops with sub-page faults

From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2021-11-24 22:31:59
Also in: linux-arm-kernel, linux-fsdevel, lkml

On Wed, Nov 24, 2021 at 01:36:00PM -0800, Andrew Morton wrote:
On Wed, 24 Nov 2021 19:20:21 +0000 Catalin Marinas [off-list ref] wrote:
quoted
There are a few places in the filesystem layer where a uaccess is
performed in a loop with page faults disabled, together with a
fault_in_*() call to pre-fault the pages. On architectures like arm64
with MTE (memory tagging extensions) or SPARC ADI, even if the
fault_in_*() succeeded, the uaccess can still fault indefinitely.

In general this is not an issue since such code restarts the
fault_in_*() from where the uaccess failed, therefore guaranteeing
forward progress. The btrfs search_ioctl(), however, rewinds the
fault_in_*() position and it can live-lock. This was reported by Al
here:
Btrfs livelock on some-of-arm sounds fairly serious.
Luckily not much btrfs use on Arm mobile parts.
Should we
backport this?  If so, a48b73eca4ce ("btrfs: fix potential deadlock in
the search ioctl") appears to be a suitable Fixes: target?
This should be a suitable target together with a Cc stable to v4.4
(that's what the above commit had). Of course, the other two patches
need backporting as well and they won't apply cleanly.

Once we agreed on the fix, I'm happy to do the backports and send them
all to stable.

-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help