A zero-sized kernel nofault copy does not enter an access loop, but it still disables and re-enables page faults. Zero sizes are valid. BPF probe-read helpers accept them, and KGDB memory packets may carry a zero length. Return before changing page-fault state when there is nothing to copy. For reads, keep architecture-specific address validation before the fast path so its behavior is unchanged. Signed-off-by: Muhammad Usama Anjum --- mm/maccess.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mm/maccess.c b/mm/maccess.c index 486559d688583..c59a0e092d24a 100644 --- a/mm/maccess.c +++ b/mm/maccess.c @@ -35,6 +35,8 @@ long copy_from_kernel_nofault(void *dst, const void *src, size_t size) if (!copy_from_kernel_nofault_allowed(src, size)) return -ERANGE; + if (!size) + return 0; pagefault_disable(); if (!(align & 7)) @@ -65,6 +67,9 @@ long copy_to_kernel_nofault(void *dst, const void *src, size_t size) { unsigned long align = 0; + if (!size) + return 0; + if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)) align = (unsigned long)dst | (unsigned long)src; -- 2.47.3