]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
um: remove copy_from_kernel_nofault_allowed
authorBenjamin Berg <benjamin.berg@intel.com>
Mon, 10 Feb 2025 16:09:26 +0000 (17:09 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 18 Mar 2025 10:03:29 +0000 (11:03 +0100)
There is no need to override the default version of this function
anymore as UML now has proper _nofault memory access functions.

Doing this also fixes the fact that the implementation was incorrect as
using mincore() will incorrectly flag pages as inaccessible if they were
swapped out by the host.

Fixes: f75b1b1bedfb ("um: Implement probe_kernel_read()")
Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Link: https://patch.msgid.link/20250210160926.420133-3-benjamin@sipsolutions.net
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
arch/um/include/shared/os.h
arch/um/kernel/Makefile
arch/um/kernel/maccess.c [deleted file]
arch/um/os-Linux/process.c

index 5babad8c5f75ed826269bbc853c7d5fb7acba631..bc02767f0639788e08543917ed9e62b282b95216 100644 (file)
@@ -213,7 +213,6 @@ extern int os_protect_memory(void *addr, unsigned long len,
 extern int os_unmap_memory(void *addr, int len);
 extern int os_drop_memory(void *addr, int length);
 extern int can_drop_memory(void);
-extern int os_mincore(void *addr, unsigned long len);
 
 void os_set_pdeathsig(void);
 
index f8567b933ffaa902ee7e17f766cc289e5cd3cff2..4df1cd0d20179e09d907e6350b72d25b652d6ad1 100644 (file)
@@ -17,7 +17,7 @@ extra-y := vmlinux.lds
 obj-y = config.o exec.o exitcode.o irq.o ksyms.o mem.o \
        physmem.o process.o ptrace.o reboot.o sigio.o \
        signal.o sysrq.o time.o tlb.o trap.o \
-       um_arch.o umid.o maccess.o kmsg_dump.o capflags.o skas/
+       um_arch.o umid.o kmsg_dump.o capflags.o skas/
 obj-y += load_file.o
 
 obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o
diff --git a/arch/um/kernel/maccess.c b/arch/um/kernel/maccess.c
deleted file mode 100644 (file)
index 8ccd568..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2013 Richard Weinberger <richrd@nod.at>
- */
-
-#include <linux/uaccess.h>
-#include <linux/kernel.h>
-#include <os.h>
-
-bool copy_from_kernel_nofault_allowed(const void *src, size_t size)
-{
-       void *psrc = (void *)rounddown((unsigned long)src, PAGE_SIZE);
-
-       if ((unsigned long)src < PAGE_SIZE || size <= 0)
-               return false;
-       if (os_mincore(psrc, size + src - psrc) <= 0)
-               return false;
-       return true;
-}
index 9f086f9394202d15776db4594c91cb51a405781c..184566edeee99723c834c5293cbae6b77c6690e1 100644 (file)
@@ -142,57 +142,6 @@ out:
        return ok;
 }
 
-static int os_page_mincore(void *addr)
-{
-       char vec[2];
-       int ret;
-
-       ret = mincore(addr, UM_KERN_PAGE_SIZE, vec);
-       if (ret < 0) {
-               if (errno == ENOMEM || errno == EINVAL)
-                       return 0;
-               else
-                       return -errno;
-       }
-
-       return vec[0] & 1;
-}
-
-int os_mincore(void *addr, unsigned long len)
-{
-       char *vec;
-       int ret, i;
-
-       if (len <= UM_KERN_PAGE_SIZE)
-               return os_page_mincore(addr);
-
-       vec = calloc(1, (len + UM_KERN_PAGE_SIZE - 1) / UM_KERN_PAGE_SIZE);
-       if (!vec)
-               return -ENOMEM;
-
-       ret = mincore(addr, UM_KERN_PAGE_SIZE, vec);
-       if (ret < 0) {
-               if (errno == ENOMEM || errno == EINVAL)
-                       ret = 0;
-               else
-                       ret = -errno;
-
-               goto out;
-       }
-
-       for (i = 0; i < ((len + UM_KERN_PAGE_SIZE - 1) / UM_KERN_PAGE_SIZE); i++) {
-               if (!(vec[i] & 1)) {
-                       ret = 0;
-                       goto out;
-               }
-       }
-
-       ret = 1;
-out:
-       free(vec);
-       return ret;
-}
-
 void init_new_thread_signals(void)
 {
        set_handler(SIGSEGV);