target/i386: emulate: follow priv_check_exempt
Follow priv_check_exempt flag argument for x86_write_mem_priv/x86_read_mem_priv. Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr> Link: https://lore.kernel.org/r/20260324230016.80914-3-mohamed@unpredictable.fr Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Mohamed Mediouni committed
Mar 25, 2026 at 00:00 UTC
ba41e525413906473ed004b3a45f565783f3533f
1 file changed
+12
-2
target/i386/emulate/x86_mmu.c
+12
-2
@@ -263,14 +263,19 @@ static MMUTranslateResult x86_write_mem_ex(CPUState *cpu, void *data, target_ulo
263
CPUX86State *env = &x86_cpu->env;
264
265
MMUTranslateResult translate_res = MMU_TRANSLATE_SUCCESS;
266
+ MMUTranslateFlags translate_flags = MMU_TRANSLATE_VALIDATE_WRITE;
267
MemTxResult mem_tx_res;
268
uint64_t gpa;
269
270
+ if (priv_check_exempt) {
271
+ translate_flags |= MMU_TRANSLATE_PRIV_CHECKS_EXEMPT;
272
+ }
273
+
274
while (bytes > 0) {
275
/* copy page */
276
int copy = MIN(bytes, 0x1000 - (gva & 0xfff));
277
273
- translate_res = mmu_gva_to_gpa(cpu, gva, &gpa, MMU_TRANSLATE_VALIDATE_WRITE);
278
+ translate_res = mmu_gva_to_gpa(cpu, gva, &gpa, translate_flags);
279
if (translate_res) {
280
int error_code = translate_res_to_error_code(translate_res, true, is_user(cpu));
281
env->cr[2] = gva;
@@ -311,14 +316,19 @@ static MMUTranslateResult x86_read_mem_ex(CPUState *cpu, void *data, target_ulon
316
CPUX86State *env = &x86_cpu->env;
317
318
MMUTranslateResult translate_res = MMU_TRANSLATE_SUCCESS;
319
+ MMUTranslateFlags translate_flags = 0;
320
MemTxResult mem_tx_res;
321
uint64_t gpa;
322
323
+ if (priv_check_exempt) {
324
+ translate_flags |= MMU_TRANSLATE_PRIV_CHECKS_EXEMPT;
325
+ }
326
+
327
while (bytes > 0) {
328
/* copy page */
329
int copy = MIN(bytes, 0x1000 - (gva & 0xfff));
330
321
- translate_res = mmu_gva_to_gpa(cpu, gva, &gpa, 0);
331
+ translate_res = mmu_gva_to_gpa(cpu, gva, &gpa, translate_flags);
332
if (translate_res) {
333
int error_code = translate_res_to_error_code(translate_res, false, is_user(cpu));
334
env->cr[2] = gva;