diff options
Diffstat (limited to 'mm/migrate.c')
| -rw-r--r-- | mm/migrate.c | 17 | 
1 files changed, 3 insertions, 14 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index 627671551873..e84eeb4e4356 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -41,6 +41,7 @@  #include <linux/page_idle.h>  #include <linux/page_owner.h>  #include <linux/sched/mm.h> +#include <linux/ptrace.h>  #include <asm/tlbflush.h> @@ -1652,7 +1653,6 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,  		const int __user *, nodes,  		int __user *, status, int, flags)  { -	const struct cred *cred = current_cred(), *tcred;  	struct task_struct *task;  	struct mm_struct *mm;  	int err; @@ -1676,14 +1676,9 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,  	/*  	 * Check if this process has the right to modify the specified -	 * process. The right exists if the process has administrative -	 * capabilities, superuser privileges or the same -	 * userid as the target process. +	 * process. Use the regular "ptrace_may_access()" checks.  	 */ -	tcred = __task_cred(task); -	if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) && -	    !uid_eq(cred->uid,  tcred->suid) && !uid_eq(cred->uid,  tcred->uid) && -	    !capable(CAP_SYS_NICE)) { +	if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) {  		rcu_read_unlock();  		err = -EPERM;  		goto out; @@ -1937,12 +1932,6 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm,  		put_page(new_page);  		goto out_fail;  	} -	/* -	 * We are not sure a pending tlb flush here is for a huge page -	 * mapping or not. Hence use the tlb range variant -	 */ -	if (mm_tlb_flush_pending(mm)) -		flush_tlb_range(vma, mmun_start, mmun_end);  	/* Prepare a page as a migration target */  	__SetPageLocked(new_page);  |