From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mohammed Gamal Subject: [RFC PATCH v2 0/3] Add segment limit checks to emulator Date: Thu, 8 Jul 2010 17:10:33 +0300 Message-ID: <1278598236-12103-1-git-send-email-m.gamal005@gmail.com> Cc: mtosatti@redhat.com, kvm@vger.kernel.org, Mohammed Gamal To: avi@redhat.com Return-path: Received: from mail-bw0-f46.google.com ([209.85.214.46]:54474 "EHLO mail-bw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755856Ab0GHOKx (ORCPT ); Thu, 8 Jul 2010 10:10:53 -0400 Received: by bwz1 with SMTP id 1so456893bwz.19 for ; Thu, 08 Jul 2010 07:10:51 -0700 (PDT) Sender: kvm-owner@vger.kernel.org List-ID: After some conversation with Avi concerning why unreal mode has been seen to work with KVM on Intel. It clears out the scenario is caused as follows: - guest enters big real mode - kvm squashes limit to 64k-1 - guest executes instructions with offset > 64k - cpu issues #GP due to limit violation - kvm handle_rmode_exception() -> emulator - emulator ignores limit, emulates instruction With these applied I am getting vmentry failures with SeaBIOS and gPXE. I could still get SeaBIOS to work with emulate_invalid_guest_state=1. So it's needless to say that these patches are not meant for merging! -------- Changes from v1: - Added seg_override_limit() and emulate_ss() helpers in emulator - Corrected limit check return values for long mode - Limit Checking is now consistent with the Intel documentation -------- Mohammed Gamal (3): Add helper methods to get segment limits x86 emulator: Add cs_base() helper x86 emulator: Add segment limit checks and helper functions arch/x86/include/asm/kvm_emulate.h | 1 + arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/emulate.c | 143 ++++++++++++++++++++++++++++++------ arch/x86/kvm/svm.c | 8 ++ arch/x86/kvm/vmx.c | 8 ++ arch/x86/kvm/x86.c | 12 +++ 6 files changed, 150 insertions(+), 23 deletions(-)