@samitouri / QOSamiQemu / commits / ba41e52541

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;