OLD | NEW |
| (Empty) |
1 @hex: | |
2 # Show that we handle the expected sandboxing instructions for maskmov. | |
3 | |
4 # Case one: correct masking of segment DS:%rsi | |
5 # mov %edi, %edi | |
6 89 ff | |
7 # lea (%r15, %rdi), %rdi | |
8 49 8d 3c 3f | |
9 # maskmovq %mm1, %mm2 | |
10 0f f7 d1 | |
11 | |
12 # Case two: incorrect masking of segment DS:%rsi | |
13 # add %edi, %edi | |
14 01 ff | |
15 # lea (%r15, %rdi), %rdi | |
16 49 8d 3c 3f | |
17 # maskmovq %mm1, %mm2 | |
18 0f f7 d1 | |
19 | |
20 # Maskmovdqu is also fine | |
21 # mov %edi, %edi | |
22 89 ff | |
23 # lea (%r15, %rdi), %rdi | |
24 49 8d 3c 3f | |
25 # maskmovdqu %xmm1, %xmm2 | |
26 66 0f f7 d1 | |
27 | |
28 90 90 90 90 | |
29 | |
30 # But vmaskmovdqu is not | |
31 # mov %edi, %edi | |
32 # lea (%r15, %rdi), %rdi | |
33 # vmaskmovdqu %xmm1, %xmm2 | |
34 # (machine code is written in one line to avoid spurious errors caused | |
35 # by nop patching) | |
36 89 ff 49 8d 3c 3f c5 f9 f7 d1 | |
37 @rval: | |
38 VALIDATOR: 000000000000000f: 0f f7 d1 mask
movq %mmx2, %mmx1 | |
39 VALIDATOR: ERROR: Segment memory reference not allowed | |
40 VALIDATOR: 0000000000000026: c5 inva
lid | |
41 VALIDATOR: ERROR: This instruction has been marked illegal by Native Client | |
42 VALIDATOR: 0000000000000026: c5 inva
lid | |
43 VALIDATOR: ERROR: Opcode sequence doesn't define a valid x86 instruction | |
44 VALIDATOR: Checking jump targets: 0 to 2a | |
45 VALIDATOR: Checking that basic blocks are aligned | |
46 *** <input> IS UNSAFE *** | |
47 @dis: | |
48 0000000000000000: 89 ff mov %edi, %edi | |
49 0000000000000002: 49 8d 3c 3f lea %rdi, [%r15
+%rdi*1] | |
50 0000000000000006: 0f f7 d1 maskmovq %mmx2,
%mmx1 | |
51 0000000000000009: 01 ff add %edi, %edi | |
52 000000000000000b: 49 8d 3c 3f lea %rdi, [%r15
+%rdi*1] | |
53 000000000000000f: 0f f7 d1 maskmovq %mmx2,
%mmx1 | |
54 0000000000000012: 89 ff mov %edi, %edi | |
55 0000000000000014: 49 8d 3c 3f lea %rdi, [%r15
+%rdi*1] | |
56 0000000000000018: 66 0f f7 d1 maskmovdqu %xmm
2, %xmm1 | |
57 000000000000001c: 90 nop | |
58 000000000000001d: 90 nop | |
59 000000000000001e: 90 nop | |
60 000000000000001f: 90 nop | |
61 0000000000000020: 89 ff mov %edi, %edi | |
62 0000000000000022: 49 8d 3c 3f lea %rdi, [%r15
+%rdi*1] | |
63 0000000000000026: c5 invalid | |
64 0000000000000027: f9 stc | |
65 0000000000000028: f7 d1 not %ecx | |
66 @rdfa_output: | |
67 f: [0] unrecognized instruction | |
68 20: [0] unrecognized instruction | |
69 return code: 1 | |
70 @validators_disagree: | |
71 RDFA validator recognizes vmackmovdqu in the triple | |
72 mov %edi, %edi | |
73 lea (%r15, %rdi), %rdi | |
74 vmaskmovdqu %xmm1, %xmm2 | |
75 and then rejects it, so error message points at the beginning of the triple. | |
76 | |
77 errors reported by old validator but not by rdfa one: | |
78 0x26 | |
79 errors reported by rdfa validator but not by old one: | |
80 0x20 | |
OLD | NEW |