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

Commit aefab2b4 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

signal/arm64: For clarity separate the 3 signal sending cases in do_page_fault



It gets easy to confuse what is going on when some code is shared and some not
so stop sharing the trivial bits of signal generation to make future updates
easier to understand.

Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Tested-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent 9ea3a974
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -567,16 +567,16 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
		return 0;
	}

	clear_siginfo(&si);
	si.si_addr = (void __user *)addr;

	if (fault & VM_FAULT_SIGBUS) {
		/*
		 * We had some memory, but were unable to successfully fix up
		 * this page fault.
		 */
		clear_siginfo(&si);
		si.si_signo	= SIGBUS;
		si.si_code	= BUS_ADRERR;
		si.si_addr = (void __user *)addr;
		__do_user_fault(&si, esr);
	} else if (fault & (VM_FAULT_HWPOISON_LARGE | VM_FAULT_HWPOISON)) {
		unsigned int lsb;

@@ -584,20 +584,25 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
		if (fault & VM_FAULT_HWPOISON_LARGE)
			lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));

		clear_siginfo(&si);
		si.si_signo	= SIGBUS;
		si.si_code	= BUS_MCEERR_AR;
		si.si_addr = (void __user *)addr;
		si.si_addr_lsb	= lsb;
		__do_user_fault(&si, esr);
	} else {
		/*
		 * Something tried to access memory that isn't in our memory
		 * map.
		 */
		clear_siginfo(&si);
		si.si_signo	= SIGSEGV;
		si.si_code	= fault == VM_FAULT_BADACCESS ?
				  SEGV_ACCERR : SEGV_MAPERR;
		si.si_addr = (void __user *)addr;
		__do_user_fault(&si, esr);
	}

	__do_user_fault(&si, esr);
	return 0;

no_context: