From: Julian Seward Date: Wed, 24 May 2017 14:28:25 +0000 (+0000) Subject: Handle x86 CET prefixes (64 bit only). Fixes #379525. X-Git-Tag: svn/VALGRIND_3_13_0^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d8741daa46133aa99a77f6ab335d99a99d2f891;p=thirdparty%2Fvalgrind.git Handle x86 CET prefixes (64 bit only). Fixes #379525. Patch from tatyana.a.mineeva@intel.com. git-svn-id: svn://svn.valgrind.org/vex/trunk@3383 --- diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index ef6f1ea7fc..9073e1d36e 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -21830,13 +21830,22 @@ Long dis_ESC_0F ( } return delta; + case 0x19: + case 0x1C: + case 0x1D: + case 0x1E: case 0x1F: - if (haveF2orF3(pfx)) goto decode_failure; + // Intel CET instructions can have any prefixes before NOPs + // and can use any ModRM, SIB and disp modrm = getUChar(delta); - if (epartIsReg(modrm)) goto decode_failure; - addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 ); - delta += alen; - DIP("nop%c %s\n", nameISize(sz), dis_buf); + if (epartIsReg(modrm)) { + delta += 1; + DIP("nop%c\n", nameISize(sz)); + } else { + addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 ); + delta += alen; + DIP("nop%c %s\n", nameISize(sz), dis_buf); + } return delta; case 0x31: { /* RDTSC */