[PATCH v2 09/12] um: Do not flush MM in flush_thread

benjamin
2024-04-29T13:48:45Z

There should be no need to flush the memory in flush_thread. Doing this
likely worked around some issue where memory was still incorrectly
mapped when creating or cloning an MM.

With the removal of the special clone path, that isn't relevant anymore.
However, add the flush into MM initialization so that any new userspace
MM is guaranteed to be clean.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
---
arch/um/kernel/exec.c | 5 -----
arch/um/kernel/skas/mmu.c | 3 +++
2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c
index 5c8836b012e9..2c15bb2c104c 100644
--- a/arch/um/kernel/exec.c
+++ b/arch/um/kernel/exec.c
@@ -24,11 +24,6 @@ void flush_thread(void)
{
arch_flush_thread(&current->thread.arch);

- unmap(&current->mm->context.id, 0, TASK_SIZE);
- if (syscall_stub_flush(&current->mm->context.id) < 0) {
- printk(KERN_ERR "%s - clearing address space failed", __func__);
- force_sig(SIGKILL);
- }
get_safe_registers(current_pt_regs()->regs.gp,
current_pt_regs()->regs.fp);

diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index 76c0c7d600a8..9bfefcd33f36 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -39,6 +39,9 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
goto out_free;
}

+ /* Ensure the new MM is clean and nothing unwanted is mapped */
+ unmap(new_id, 0, TASK_SIZE);
+
return 0;

out_free:
--
2.44.0