** Description changed:

+ [Impact]
+ On CPUs with no EPT support, or when disabling kvm-intel ept support by use 
of ept=0 module parameter, users are not able to launch a linux VM.
+ 
+ [Test case]
+ # modprobe kvm-intel ept=0
+ # cat /sys/module/kvm_intel/parameters/ept
+ N
+ # qemu-system-x86_64 -enable-kvm -kernel /boot/vmlinuz-4.15.0-68-generic
+ 
+ Make sure you get console log at all. With the bug, there is not a
+ single line of output.
+ 
+ [Regression potential]
+ The fix might cause some very specific use of virtualization to fail, but no 
pratical case is known.
+ 
+ ===============================
+ 
  Mostly the same info as on a related kernel.org bugzilla entr[0].
  
  [0]: https://bugzilla.kernel.org/show_bug.cgi?id=205441
  
  We got issues reported with old Intel CPUs and Linux guest run with
  QEMU/KVM after a recent kernel update which is based on
  Ubuntu-5.0.0-33.35.
  
  I bisected this here, with following result:
- git bisect log 
+ git bisect log
  # bad: [3b931173c97b0d73f80ea55b72bb2966a246167f] UBUNTU: Ubuntu-5.0.0-33.35
  # good: [5d5a6b36e94909962297fae609bff487de3cc43a] UBUNTU: Ubuntu-5.0.0-30.32
  git bisect start '3b931173c97b0d73f80ea55b72bb2966a246167f'
  '5d5a6b36e94909962297fae609bff487de3cc43a'
  # good: [7b4f844b33969ab166800f8936beef153fab736e] net/ibmvnic: free reset 
work
  of removed device from queue
  git bisect good 7b4f844b33969ab166800f8936beef153fab736e
  # bad: [6c1fc88702a4f33886b44ce5b6f374893b95e369] arm64: tlb: Ensure we 
execute
  an ISB following walk cache invalidation
  git bisect bad 6c1fc88702a4f33886b44ce5b6f374893b95e369
  # good: [e627a027b54eccc95f9e374d69aead7f1498877b] loop: Add 
LOOP_SET_DIRECT_IO
  to compat ioctl
  git bisect good e627a027b54eccc95f9e374d69aead7f1498877b
  # good: [29919eff6333bc67ec580b454afdd8b49883df2f] libata/ahci: Drop PCS quirk
  for Denverton and beyond
  git bisect good 29919eff6333bc67ec580b454afdd8b49883df2f
  # good: [cb44193f94af73928f8df049ffbb6b4a0be136ae] PM / devfreq: passive: fix
  compiler warning
  git bisect good cb44193f94af73928f8df049ffbb6b4a0be136ae
  # good: [b1d479b27b26966aea931094b31864979d7f8102] scsi: implement .cleanup_rq
  callback
  git bisect good b1d479b27b26966aea931094b31864979d7f8102
  # bad: [ec15813844b05d8cbd4352c65a20e57d16f9f936] media: sn9c20x: Add MSI
  MS-1039 laptop to flip_dmi_table
  git bisect bad ec15813844b05d8cbd4352c65a20e57d16f9f936
  # good: [e83601f51a90d9739ced9ff42b6f202f8f802c72] parisc: Disable HP HSC-PCI
  Cards to prevent kernel crash
  git bisect good e83601f51a90d9739ced9ff42b6f202f8f802c72
  # good: [6d393bdf3b3f4b629070329488d3c6a3e142602b] KVM: x86: set
  ctxt->have_exception in x86_decode_insn()
  git bisect good 6d393bdf3b3f4b629070329488d3c6a3e142602b
  # bad: [208007519a7385a57b0c0a3c180142a521594876] KVM: x86: Manually calculate
  reserved bits when loading PDPTRS
  git bisect bad 208007519a7385a57b0c0a3c180142a521594876
  # first bad commit: [208007519a7385a57b0c0a3c180142a521594876] KVM: x86:
  Manually calculate reserved bits when loading PDPTRS
  
  Which is:
  
-    KVM: x86: Manually calculate reserved bits when loading PDPTRS
+    KVM: x86: Manually calculate reserved bits when loading PDPTRS
  
-     BugLink: https://bugs.launchpad.net/bugs/1848367
+     BugLink: https://bugs.launchpad.net/bugs/1848367
  
-     commit 16cfacc8085782dab8e365979356ce1ca87fd6cc upstream.
+     commit 16cfacc8085782dab8e365979356ce1ca87fd6cc upstream.
  
-     Manually generate the PDPTR reserved bit mask when explicitly loading
-     PDPTRs.  The reserved bits that are being tracked by the MMU reflect the
-     current paging mode, which is unlikely to be PAE paging in the vast
-     majority of flows that use load_pdptrs(), e.g. CR0 and CR4 emulation,
-     __set_sregs(), etc...  This can cause KVM to incorrectly signal a bad
-     PDPTR, or more likely, miss a reserved bit check and subsequently fail
-     a VM-Enter due to a bad VMCS.GUEST_PDPTR.
+     Manually generate the PDPTR reserved bit mask when explicitly loading
+     PDPTRs.  The reserved bits that are being tracked by the MMU reflect the
+     current paging mode, which is unlikely to be PAE paging in the vast
+     majority of flows that use load_pdptrs(), e.g. CR0 and CR4 emulation,
+     __set_sregs(), etc...  This can cause KVM to incorrectly signal a bad
+     PDPTR, or more likely, miss a reserved bit check and subsequently fail
+     a VM-Enter due to a bad VMCS.GUEST_PDPTR.
  
-     Add a one off helper to generate the reserved bits instead of sharing
-     code across the MMU's calculations and the PDPTR emulation.  The PDPTR
-     reserved bits are basically set in stone, and pushing a helper into
-     the MMU's calculation adds unnecessary complexity without improving
-     readability.
+     Add a one off helper to generate the reserved bits instead of sharing
+     code across the MMU's calculations and the PDPTR emulation.  The PDPTR
+     reserved bits are basically set in stone, and pushing a helper into
+     the MMU's calculation adds unnecessary complexity without improving
+     readability.
  
-     Oppurtunistically fix/update the comment for load_pdptrs().
+     Oppurtunistically fix/update the comment for load_pdptrs().
  
-     Note, the buggy commit also introduced a deliberate functional change,
-     "Also remove bit 5-6 from rsvd_bits_mask per latest SDM.", which was
-     effectively (and correctly) reverted by commit cd9ae5fe47df ("KVM: x86:
-     Fix page-tables reserved bits").  A bit of SDM archaeology shows that
-     the SDM from late 2008 had a bug (likely a copy+paste error) where it
-     listed bits 6:5 as AVL and A for PDPTEs used for 4k entries but reserved
-     for 2mb entries.  I.e. the SDM contradicted itself, and bits 6:5 are and
-     always have been reserved.
+     Note, the buggy commit also introduced a deliberate functional change,
+     "Also remove bit 5-6 from rsvd_bits_mask per latest SDM.", which was
+     effectively (and correctly) reverted by commit cd9ae5fe47df ("KVM: x86:
+     Fix page-tables reserved bits").  A bit of SDM archaeology shows that
+     the SDM from late 2008 had a bug (likely a copy+paste error) where it
+     listed bits 6:5 as AVL and A for PDPTEs used for 4k entries but reserved
+     for 2mb entries.  I.e. the SDM contradicted itself, and bits 6:5 are and
+     always have been reserved.
  
-     Fixes: 20c466b56168d ("KVM: Use rsvd_bits_mask in load_pdptrs()")
-     Cc: sta...@vger.kernel.org
-     Cc: Nadav Amit <nadav.a...@gmail.com>
-     Reported-by: Doug Reiland <doug.reil...@intel.com>
-     Signed-off-by: Sean Christopherson <sean.j.christopher...@intel.com>
-     Reviewed-by: Peter Xu <pet...@redhat.com>
-     Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
-     Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
-     Signed-off-by: Kamal Mostafa <ka...@canonical.com>
-     Signed-off-by: Kleber Sacilotto de Souza <kleber.so...@canonical.com>
+     Fixes: 20c466b56168d ("KVM: Use rsvd_bits_mask in load_pdptrs()")
+     Cc: sta...@vger.kernel.org
+     Cc: Nadav Amit <nadav.a...@gmail.com>
+     Reported-by: Doug Reiland <doug.reil...@intel.com>
+     Signed-off-by: Sean Christopherson <sean.j.christopher...@intel.com>
+     Reviewed-by: Peter Xu <pet...@redhat.com>
+     Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
+     Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
+     Signed-off-by: Kamal Mostafa <ka...@canonical.com>
+     Signed-off-by: Kleber Sacilotto de Souza <kleber.so...@canonical.com>
  
- 
- This one is also included in the 4.19.81 (or more correctly, it's there since 
+ This one is also included in the 4.19.81 (or more correctly, it's there since
  v4.19.77) with commit 496cf984a60edb5534118a596613cc9971e406e8 [0] or
  upstream commit 16cfacc8085782dab8e365979356ce1ca87fd6cc [1].
  
  [0]:
  
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/commit/?h=v4.19.82&id=496cf984a60edb5534118a596613cc9971e406e8
  [1]: 
https://git.kernel.org/torvalds/c/16cfacc8085782dab8e365979356ce1ca87fd6cc
  
  Funny thing is: I cannot reproduce this with a 5.3.7 (Eoan) kernel, which 
_also_
  includes above commit. So possible another patch is missing in the backport,
  did not find anything obvious though...
  
  So summary for reproducer:
  * dust of an host with old Intel CPU, e.g.: Intel Core2Duo CPU E8500 @3.16GHz
-   (something else westmer, conroe or the like should work too, or if it's
+   (something else westmer, conroe or the like should work too, or if it's
  released
-    over 10 years ago. 
+    over 10 years ago.
  * Install a Linux Distro or just boot the installer of that in a VM, I used
  Debian 9,
-   as our users had issues with that but *not* with an ubuntu 19.10 VM.
+   as our users had issues with that but *not* with an ubuntu 19.10 VM.
  * see how it boot loops once a stable-kernel with above[0] backported
-   is used on the host
+   is used on the host

** Changed in: linux (Ubuntu Disco)
       Status: New => In Progress

** Changed in: linux (Ubuntu Bionic)
       Status: New => In Progress

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1851709

Title:
  Ubuntu-5.0.0-33.35 introduces KVM regression with old Intel CPUs and
  Linux guests

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1851709/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to