OLD | NEW |
| (Empty) |
1 @hex: | |
2 # Test valid TLS access commands. | |
3 # mov %gs:0, %eax | |
4 65 a1 00 00 00 00 | |
5 # mov %gs:4, %eax | |
6 65 a1 04 00 00 00 | |
7 @nval: | |
8 *** <input> is safe *** | |
9 @dis: | |
10 00000000: 65 a1 00 00 00 00 mov %eax, %gs:[0x0] | |
11 00000006: 65 a1 04 00 00 00 mov %eax, %gs:[0x4] | |
12 @rdfa_output: | |
13 return code: 0 | |
14 ---------------------------------------------------------------------- | |
15 @hex: | |
16 # Access with something besides 'mov' | |
17 # add %gs:0, %eax | |
18 65 03 05 00 00 00 00 | |
19 @nval: | |
20 VALIDATOR: 0: Bad prefix usage | |
21 *** <input> IS UNSAFE *** | |
22 @dis: | |
23 00000000: 65 03 05 00 00 00 00 add %eax, 0x0 | |
24 @rdfa_output: | |
25 0: [0] unrecognized instruction | |
26 return code: 1 | |
27 ---------------------------------------------------------------------- | |
28 @hex: | |
29 # Forbidden forms | |
30 # mov %gs:0, %ax | |
31 65 66 a1 00 00 00 00 | |
32 # mov %ax, %gs:0 | |
33 65 66 a3 00 00 00 00 | |
34 # lock add %gs:0x0,%eax | |
35 65 F0 03 05 00 00 00 00 | |
36 @nval: | |
37 VALIDATOR: 0: Bad prefix usage | |
38 VALIDATOR: 7: Bad prefix usage | |
39 VALIDATOR: e: Bad prefix usage | |
40 *** <input> IS UNSAFE *** | |
41 @dis: | |
42 00000000: 65 66 a1 00 00 00 00 mov %ax, %gs:[0x0] | |
43 00000007: 65 66 a3 00 00 00 00 mov %gs:[0x0], %ax | |
44 0000000e: 65 f0 03 05 00 00 00 00 invalid %eax, 0x0 | |
45 @rdfa_output: | |
46 0: [0] unrecognized instruction | |
47 7: [1] unrecognized instruction | |
48 e: [2] unrecognized instruction | |
49 return code: 1 | |
50 ---------------------------------------------------------------------- | |
51 @hex: | |
52 # Access through fs. | |
53 # mov %fs:0, %eax | |
54 64 a1 00 00 00 00 | |
55 # mov %eax, %fs:0 | |
56 64 a3 00 00 00 00 | |
57 # mov %fs:0, %ax | |
58 64 66 a1 00 00 00 00 | |
59 # mov %ax, %fs:0 | |
60 64 66 a3 00 00 00 00 | |
61 @nval: | |
62 VALIDATOR: 0: Bad prefix usage | |
63 VALIDATOR: 6: Bad prefix usage | |
64 VALIDATOR: c: Bad prefix usage | |
65 VALIDATOR: 13: Bad prefix usage | |
66 *** <input> IS UNSAFE *** | |
67 @dis: | |
68 00000000: 64 a1 00 00 00 00 mov %eax, %fs:[0x0] | |
69 00000006: 64 a3 00 00 00 00 mov %fs:[0x0], %eax | |
70 0000000c: 64 66 a1 00 00 00 00 mov %ax, %fs:[0x0] | |
71 00000013: 64 66 a3 00 00 00 00 mov %fs:[0x0], %ax | |
72 @rdfa_output: | |
73 0: [0] unrecognized instruction | |
74 6: [1] unrecognized instruction | |
75 c: [2] unrecognized instruction | |
76 13: [3] unrecognized instruction | |
77 return code: 1 | |
78 ---------------------------------------------------------------------- | |
79 @hex: | |
80 # Can we write to gs segment? | |
81 # mov %eax, %gs:0 | |
82 65 a3 00 00 00 00 | |
83 @nval: | |
84 *** <input> is safe *** | |
85 @dis: | |
86 00000000: 65 a3 00 00 00 00 mov %gs:[0x0], %eax | |
87 @rdfa_output: | |
88 0: [0] unrecognized instruction | |
89 return code: 1 | |
90 @validators_disagree: | |
91 gs segment should be read-only, but old validator does not enforce that. | |
92 See http://code.google.com/p/nativeclient/issues/detail?id=2250 | |
93 ---------------------------------------------------------------------- | |
94 @hex: | |
95 # Fixed offsets besides 0 and 4 | |
96 # mov %gs:3, %eax | |
97 65 a1 03 00 00 00 | |
98 # mov %gs:8, %eax | |
99 65 a1 08 00 00 00 | |
100 | |
101 # Can we read from arbitrary offset? | |
102 # mov %gs:%eax, %eax | |
103 65 8B 00 | |
104 @nval: | |
105 *** <input> is safe *** | |
106 @dis: | |
107 00000000: 65 a1 03 00 00 00 mov %eax, %gs:[0x3] | |
108 00000006: 65 a1 08 00 00 00 mov %eax, %gs:[0x8] | |
109 0000000c: 65 8b 00 mov %eax, %gs:[%eax] | |
110 @rdfa_output: | |
111 0: [0] unrecognized instruction | |
112 6: [1] unrecognized instruction | |
113 c: [2] unrecognized instruction | |
114 return code: 1 | |
115 @validators_disagree: | |
116 gs is only supposed to be read at offsets 0 and 4, but old validator does not | |
117 enforce that. | |
118 See http://code.google.com/p/nativeclient/issues/detail?id=2250 | |
OLD | NEW |