Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a1dfe6e authored by Ingo Molnar's avatar Ingo Molnar
Browse files

x86/mm: unify init task OOM handling



Linus noticed that the "again:" versus "survive:" OOM logic for
the init task was arbitrarily different.

The 64-bit codepath is the better one, because it correctly re-lookups
the vma after having dropped the ->mmap_sem.

Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 891cffbd
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -671,7 +671,8 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
		goto bad_area_nosemaphore;

again:
	/* When running in the kernel we expect faults to occur only to
	/*
	 * When running in the kernel we expect faults to occur only to
	 * addresses in user space.  All other faults represent errors in the
	 * kernel and should generate an OOPS.  Unfortunately, in the case of an
	 * erroneous fault occurring in a code path which already holds mmap_sem
@@ -734,9 +735,6 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
			goto bad_area;
	}

#ifdef CONFIG_X86_32
survive:
#endif
	/*
	 * If for any reason at all we couldn't handle the fault,
	 * make sure we exit gracefully rather than endlessly redo
@@ -871,12 +869,11 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
	up_read(&mm->mmap_sem);
	if (is_global_init(tsk)) {
		yield();
#ifdef CONFIG_X86_32
		down_read(&mm->mmap_sem);
		goto survive;
#else
		/*
		 * Re-lookup the vma - in theory the vma tree might
		 * have changed:
		 */
		goto again;
#endif
	}

	printk("VM: killing process %s\n", tsk->comm);