Re: [PATCH] efi/capsule-loader: Replace kmap() with kmap_local_page()
From: Ard Biesheuvel
Date: Thu Sep 10 2026 - 03:46:48 EST
On Fri, 4 Sep 2026, at 17:31, Danish Khateeb wrote:
> kmap() is deprecated in favour of kmap_local_page(), as described in
> Documentation/mm/highmem.rst.
>
> The conversion is safe here. efi_capsule_write() maps the page and
> releases it within the same call, on both the success and the fail_unmap
> error path, so the mapping never escapes the thread that created it and
> the stack-based unmap ordering is preserved. No atomic context is
> involved: the page is allocated with alloc_page(GFP_KERNEL) just above,
> and the copy_from_user() performed while the page is mapped is fine
> because faults are permitted in a local kmap region.
> efi_capsule_setup_info() also runs while the mapping is live, but only
> reads through the pointer.
>
> kunmap_local() is handed a pointer that has been advanced into the page,
> which is fine as it masks the address back down to the page boundary.
>
> Build-tested only, on i386 with CONFIG_HIGHMEM=y -- where
> kmap_local_page() actually establishes a mapping rather than returning
> the direct-map address -- and on x86_64. No new gcc or sparse warnings.
>
> Assisted-by: LLM sparse
> Signed-off-by: Danish Khateeb <danishkhateeb03@xxxxxxxxx>
> ---
> drivers/firmware/efi/capsule-loader.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
Queued up in efi/next - thanks.