All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86, mpx: fix instruction decoder condition
@ 2015-12-01  0:31 Dave Hansen
  2015-12-05 17:54 ` [tip:x86/urgent] x86/mpx: Fix " tip-bot for Dave Hansen
  0 siblings, 1 reply; 2+ messages in thread
From: Dave Hansen @ 2015-12-01  0:31 UTC (permalink / raw)
  To: linux-kernel; +Cc: Dave Hansen, dave.hansen, dan.carpenter, stable, x86


From: Dave Hansen <dave.hansen@linux.intel.com>

MPX decodes instructions in order to tell which bounds register
was violated.  Part of this decoding involves looking at the "REX
prefix" which is a special instrucion prefix used to retrofit
support for new registers in to old instructions.

The X86_REX_*() macros are defined to return actual bit values:

	#define X86_REX_R(rex) ((rex) & 4)

*not* boolean values.  However, the MPX code was checking for
them like they were booleans.  This might have led to us
mis-decoding the "REX prefix" and giving false information out to
userspace about bounds violations.  X86_REX_B() actually is bit 1,
so this is really only broken for the X86_REX_X() case.

Fix the conditionals up to tolerate the non-boolean values.

Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: stable@vger.kernel.org
Cc: x86@kernel.org
---

 b/arch/x86/mm/mpx.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff -puN arch/x86/mm/mpx.c~mpx-rex arch/x86/mm/mpx.c
--- a/arch/x86/mm/mpx.c~mpx-rex	2015-11-30 15:33:32.393469377 -0800
+++ b/arch/x86/mm/mpx.c	2015-11-30 16:12:14.805379908 -0800
@@ -101,19 +101,19 @@ static int get_reg_offset(struct insn *i
 	switch (type) {
 	case REG_TYPE_RM:
 		regno = X86_MODRM_RM(insn->modrm.value);
-		if (X86_REX_B(insn->rex_prefix.value) == 1)
+		if (X86_REX_B(insn->rex_prefix.value))
 			regno += 8;
 		break;
 
 	case REG_TYPE_INDEX:
 		regno = X86_SIB_INDEX(insn->sib.value);
-		if (X86_REX_X(insn->rex_prefix.value) == 1)
+		if (X86_REX_X(insn->rex_prefix.value))
 			regno += 8;
 		break;
 
 	case REG_TYPE_BASE:
 		regno = X86_SIB_BASE(insn->sib.value);
-		if (X86_REX_B(insn->rex_prefix.value) == 1)
+		if (X86_REX_B(insn->rex_prefix.value))
 			regno += 8;
 		break;
 
_

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-12-05 17:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-01  0:31 [PATCH] x86, mpx: fix instruction decoder condition Dave Hansen
2015-12-05 17:54 ` [tip:x86/urgent] x86/mpx: Fix " tip-bot for Dave Hansen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.