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> Link: https://patch.msgid.link/20240703134536.1161108-10-benjamin@sipsolutions.net Signed-off-by: Johannes Berg <johannes.berg@intel.com>
42 lines
971 B
C
42 lines
971 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
|
*/
|
|
|
|
#include <linux/stddef.h>
|
|
#include <linux/module.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/ptrace.h>
|
|
#include <linux/sched/mm.h>
|
|
#include <linux/sched/task.h>
|
|
#include <linux/sched/task_stack.h>
|
|
#include <linux/slab.h>
|
|
#include <asm/current.h>
|
|
#include <asm/processor.h>
|
|
#include <linux/uaccess.h>
|
|
#include <as-layout.h>
|
|
#include <mem_user.h>
|
|
#include <registers.h>
|
|
#include <skas.h>
|
|
#include <os.h>
|
|
|
|
void flush_thread(void)
|
|
{
|
|
arch_flush_thread(¤t->thread.arch);
|
|
|
|
get_safe_registers(current_pt_regs()->regs.gp,
|
|
current_pt_regs()->regs.fp);
|
|
|
|
__switch_mm(¤t->mm->context.id);
|
|
}
|
|
|
|
void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
|
|
{
|
|
PT_REGS_IP(regs) = eip;
|
|
PT_REGS_SP(regs) = esp;
|
|
clear_thread_flag(TIF_SINGLESTEP);
|
|
#ifdef SUBARCH_EXECVE1
|
|
SUBARCH_EXECVE1(regs->regs);
|
|
#endif
|
|
}
|
|
EXPORT_SYMBOL(start_thread);
|