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

Commit 95994bbc authored by Peng Du's avatar Peng Du Committed by Rohit Vaswani
Browse files

arm64: kernel: check mode for get_user in undefinstr



get_user() should be called only for user_mode undef instruction.

Bug 1536343

Change-Id: I710bc520eeae68fea6f691b9eb18bd04b9a081d3
Signed-off-by: default avatarPeng Du <pdu@nvidia.com>
Reviewed-on: http://git-master/r/441348


Reviewed-by: default avatarThomas Cherry <tcherry@nvidia.com>
Reviewed-by: default avatarBo Yan <byan@nvidia.com>
Git-repo: https://android.googlesource.com/kernel/tegra


Git-commit: 518317f3e09c794e14de49f1afe47a93f92787ab
Signed-off-by: default avatarRohit Vaswani <rvaswani@codeaurora.org>
parent 408d933c
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -308,6 +308,7 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
	/* check for AArch32 breakpoint instructions */
	if (!aarch32_break_handler(regs))
		return;
	if (user_mode(regs)) {
		if (compat_thumb_mode(regs)) {
			if (get_user(instr, (u16 __user *)pc))
				goto die_sig;
@@ -318,10 +319,13 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
				instr <<= 16;
				instr |= instr2;
			}

	} else if ((get_user(instr, (u32 __user *)pc))) {
		} else if (get_user(instr, (u32 __user *)pc)) {
			goto die_sig;
		}
	} else {
		/* kernel mode */
		instr = *((u32 *)pc);
	}

	if (call_undef_hook(regs, instr) == 0)
		return;