| 131 | } |
| 132 | |
| 133 | static int |
| 134 | vmcs_seg_desc_encoding(int seg, uint32_t *base, uint32_t *lim, uint32_t *acc) |
| 135 | { |
| 136 | |
| 137 | switch (seg) { |
| 138 | case VM_REG_GUEST_ES: |
| 139 | *base = VMCS_GUEST_ES_BASE; |
| 140 | *lim = VMCS_GUEST_ES_LIMIT; |
| 141 | *acc = VMCS_GUEST_ES_ACCESS_RIGHTS; |
| 142 | break; |
| 143 | case VM_REG_GUEST_CS: |
| 144 | *base = VMCS_GUEST_CS_BASE; |
| 145 | *lim = VMCS_GUEST_CS_LIMIT; |
| 146 | *acc = VMCS_GUEST_CS_ACCESS_RIGHTS; |
| 147 | break; |
| 148 | case VM_REG_GUEST_SS: |
| 149 | *base = VMCS_GUEST_SS_BASE; |
| 150 | *lim = VMCS_GUEST_SS_LIMIT; |
| 151 | *acc = VMCS_GUEST_SS_ACCESS_RIGHTS; |
| 152 | break; |
| 153 | case VM_REG_GUEST_DS: |
| 154 | *base = VMCS_GUEST_DS_BASE; |
| 155 | *lim = VMCS_GUEST_DS_LIMIT; |
| 156 | *acc = VMCS_GUEST_DS_ACCESS_RIGHTS; |
| 157 | break; |
| 158 | case VM_REG_GUEST_FS: |
| 159 | *base = VMCS_GUEST_FS_BASE; |
| 160 | *lim = VMCS_GUEST_FS_LIMIT; |
| 161 | *acc = VMCS_GUEST_FS_ACCESS_RIGHTS; |
| 162 | break; |
| 163 | case VM_REG_GUEST_GS: |
| 164 | *base = VMCS_GUEST_GS_BASE; |
| 165 | *lim = VMCS_GUEST_GS_LIMIT; |
| 166 | *acc = VMCS_GUEST_GS_ACCESS_RIGHTS; |
| 167 | break; |
| 168 | case VM_REG_GUEST_TR: |
| 169 | *base = VMCS_GUEST_TR_BASE; |
| 170 | *lim = VMCS_GUEST_TR_LIMIT; |
| 171 | *acc = VMCS_GUEST_TR_ACCESS_RIGHTS; |
| 172 | break; |
| 173 | case VM_REG_GUEST_LDTR: |
| 174 | *base = VMCS_GUEST_LDTR_BASE; |
| 175 | *lim = VMCS_GUEST_LDTR_LIMIT; |
| 176 | *acc = VMCS_GUEST_LDTR_ACCESS_RIGHTS; |
| 177 | break; |
| 178 | case VM_REG_GUEST_IDTR: |
| 179 | *base = VMCS_GUEST_IDTR_BASE; |
| 180 | *lim = VMCS_GUEST_IDTR_LIMIT; |
| 181 | *acc = VMCS_INVALID_ENCODING; |
| 182 | break; |
| 183 | case VM_REG_GUEST_GDTR: |
| 184 | *base = VMCS_GUEST_GDTR_BASE; |
| 185 | *lim = VMCS_GUEST_GDTR_LIMIT; |
| 186 | *acc = VMCS_INVALID_ENCODING; |
| 187 | break; |
| 188 | default: |
| 189 | return (EINVAL); |
| 190 | } |
no outgoing calls
no test coverage detected