From d7b07d3eb6e6dc614fbc13cb66b951cb93daec44 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sun, 21 Mar 2021 02:58:48 -0700 Subject: xed says setssbsy and saveprevssp are more permissive --- src/long_mode/mod.rs | 4 ++-- test/long_mode/mod.rs | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs index 2d29835..6a85542 100644 --- a/src/long_mode/mod.rs +++ b/src/long_mode/mod.rs @@ -8326,7 +8326,7 @@ fn unlikely_operands>(decoder: &InstDecoder, mut bytes_iter let m = modrm & 7; match m { 0b000 => { - if !instruction.prefixes.rep() || instruction.prefixes.operand_size() || instruction.prefixes.repnz() { + if !instruction.prefixes.rep() || instruction.prefixes.repnz() { return Err(DecodeError::InvalidOpcode); } instruction.opcode = Opcode::SETSSBSY; @@ -8334,7 +8334,7 @@ fn unlikely_operands>(decoder: &InstDecoder, mut bytes_iter instruction.operand_count = 0; } 0b010 => { - if !instruction.prefixes.rep() || instruction.prefixes.operand_size() || instruction.prefixes.repnz() { + if !instruction.prefixes.rep() || instruction.prefixes.repnz() { return Err(DecodeError::InvalidOpcode); } instruction.opcode = Opcode::SAVEPREVSSP; diff --git a/test/long_mode/mod.rs b/test/long_mode/mod.rs index fa2e11d..8110d44 100644 --- a/test/long_mode/mod.rs +++ b/test/long_mode/mod.rs @@ -2284,6 +2284,10 @@ fn test_cet() { test_invalid(&[0x66, 0x3e, 0x65, 0x3e, 0x0f, 0x38, 0xf5, 0xf0]); test_display(&[0xf3, 0x0f, 0x01, 0xe8], "setssbsy"); test_display(&[0xf3, 0x0f, 0x01, 0xea], "saveprevssp"); + test_display(&[0x66, 0xf3, 0x0f, 0x01, 0xe8], "setssbsy"); + test_display(&[0x66, 0xf3, 0x0f, 0x01, 0xea], "saveprevssp"); + test_display(&[0xf3, 0x66, 0x0f, 0x01, 0xe8], "setssbsy"); + test_display(&[0xf3, 0x66, 0x0f, 0x01, 0xea], "saveprevssp"); test_display(&[0xf3, 0x0f, 0x01, 0x29], "rstorssp [rcx]"); test_display(&[0xf3, 0x66, 0x0f, 0x01, 0x29], "rstorssp [rcx]"); test_display(&[0xf3, 0x0f, 0xae, 0x30], "clrssbsy [rax]"); -- cgit v1.1