RE: [PATCH v2] arm64/mm: avoid fixmap race condition when create pud mapping
From: Jianyong Wu <hidden>
Date: 2021-12-13 05:24:43
Also in:
lkml
Hi Catalin,
-----Original Message----- From: Catalin Marinas <catalin.marinas@arm.com> Sent: Friday, December 10, 2021 7:22 PM To: Jianyong Wu <redacted> Cc: will@kernel.org; Anshuman Khandual <redacted>; akpm@linux-foundation.org; ardb@kernel.org; linux- kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org; david@redhat.com; gshan@redhat.com; Justin He [off-list ref]; nd [off-list ref]; Mark Rutland [off-list ref] Subject: Re: [PATCH v2] arm64/mm: avoid fixmap race condition when create pud mapping On Fri, Dec 10, 2021 at 05:54:32PM +0800, Jianyong Wu wrote:quoted
fixmap is a global resource and is used recursively in create pud mapping. It may lead to race condition when alloc_init_pud is called concurrently. Fox example: alloc_init_pud is called when kernel_init. If memory hotplug thread, which will also call alloc_init_pud, happens during kernel_init, the race for fixmap occurs. The race condition flow can be: *************** begin ************** kerenl_init thread virtio-mem workqueue thread ================== ======== ================== alloc_init_pud(...) pudp = pud_set_fixmap_offset(..) alloc_init_pud(...) ... ... READ_ONCE(*pudp) //OK! pudp = pud_set_fixmap_offset( ... ... pud_clear_fixmap() //fixmap break READ_ONCE(*pudp) //CRASH! **************** end *************** Hence, a spin lock is introduced to protect the fixmap during create pdg mapping. Signed-off-by: Jianyong Wu <redacted>It looks fine to me: Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Do we need a cc stable? Fixmap was introduced in 4.6, so usually: Fixes: f4710445458c ("arm64: mm: use fixmap when creating page tables") Cc: <redacted> # 4.6.x
but I haven't checked when memory hotplug was added to be able to trigger the race. It may not need to go back that far.
For now, I only find the memory hotplug can conflict with it. I see that memory hotplug is enabled on arm64 in 4.20, thus what about changing "4.6" to "4.20". Thanks Jianyong
-- Catalin
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel