public inbox for [email protected]
 help / color / mirror / Atom feed
* [PATCH] fs: Call kmap_local_page() in copy_string_kernel()
@ 2022-07-10 10:01 Fabio M. De Francesco
  2022-07-22  0:14 ` Ira Weiny
  0 siblings, 1 reply; 3+ messages in thread
From: Fabio M. De Francesco @ 2022-07-10 10:01 UTC (permalink / raw)
  To: Benjamin LaHaise, Alexander Viro, Eric Biederman, Kees Cook,
	Dan Williams, Matthew Wilcox, Jan Kara, Jeff Layton, Chuck Lever,
	Jens Axboe, Pavel Begunkov, Thomas Gleixner, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Nathan Chancellor, Nick Desaulniers,
	Tom Rix, linux-aio, linux-fsdevel, linux-kernel, linux-mm, nvdimm,
	io-uring, linux-riscv, llvm
  Cc: Fabio M. De Francesco, Ira Weiny

The use of kmap_atomic() is being deprecated in favor of kmap_local_page().

With kmap_local_page(), the mappings are per thread, CPU local, not
globally visible and can take page faults. Furthermore, the mappings can be
acquired from any context (including interrupts).

Therefore, use kmap_local_page() in copy_string_kernel() instead of
kmap_atomic().

Tested with xfstests on a QEMU + KVM 32-bits VM booting a kernel with
HIGHMEM64GB enabled.

Suggested-by: Ira Weiny <[email protected]>
Signed-off-by: Fabio M. De Francesco <[email protected]>
---

I sent a first patch to fs/exec.c for converting kmap() and kmap_atomic()
to kmap_local_page():
https://lore.kernel.org/lkml/[email protected]/

Some days ago, Ira Weiny, while he was reviewing that patch, made me notice
that I had overlooked a second kmap_atomic() in the same file (thanks):
https://lore.kernel.org/lkml/YsiQptk19txHrG4c@iweiny-desk3/

I've been asked to send this as an additional change. This is why there will
not be any second version of that previous patch.

 fs/exec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/exec.c b/fs/exec.c
index 4a2129c0d422..5fa652ca5823 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -639,11 +639,11 @@ int copy_string_kernel(const char *arg, struct linux_binprm *bprm)
 		page = get_arg_page(bprm, pos, 1);
 		if (!page)
 			return -E2BIG;
-		kaddr = kmap_atomic(page);
+		kaddr = kmap_local_page(page);
 		flush_arg_page(bprm, pos & PAGE_MASK, page);
 		memcpy(kaddr + offset_in_page(pos), arg, bytes_to_copy);
 		flush_dcache_page(page);
-		kunmap_atomic(kaddr);
+		kunmap_local(kaddr);
 		put_arg_page(page);
 	}
 
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-07-23  1:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-10 10:01 [PATCH] fs: Call kmap_local_page() in copy_string_kernel() Fabio M. De Francesco
2022-07-22  0:14 ` Ira Weiny
2022-07-23  1:02   ` Fabio M. De Francesco

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox