** Description changed:

  [ Impact ]
-  * qemu-system-aarch64 crashes with an assertion failure in
-    regime_is_user() when running AArch64 guests that trigger
-    FEAT_E0PD behaviour (e.g. Fedora 44, openSUSE Tumbleweed ARM
-    cloud images):
+  * qemu-system-aarch64 crashes with an assertion failure in
+    regime_is_user() when running AArch64 guests that trigger
+    FEAT_E0PD behaviour (e.g. Fedora 44, openSUSE Tumbleweed ARM
+    cloud images):
  
-      ERROR:target/arm/internals.h:767:regime_is_user: code should not be 
reached
-      Bail out! ERROR:target/arm/internals.h:767:regime_is_user: code should 
not be reached
-      Aborted (core dumped)
+      ERROR:target/arm/internals.h:767:regime_is_user: code should not be 
reached
+      Bail out! ERROR:target/arm/internals.h:767:regime_is_user: code should 
not be reached
+      Aborted (core dumped)
  
-  * Root cause: commit e4c93e44ab10 ("target/arm: Implement FEAT_E0PD")
-    added a call to regime_is_user() inside aa64_va_parameters(),
-    which can be reached with ARMMMUIdx_E10_* mmuidx values (stage 1+2
-    combined indexes) when the guest sets TCR_ELx.{E0PD0,E0PD1}.
-    The original code asserted these indexes were never valid, making
-    that assertion now incorrect. A TLBI operation in the guest is
-    enough to trigger the abort.
+  * Root cause: commit e4c93e44ab10 ("target/arm: Implement FEAT_E0PD")
+    added a call to regime_is_user() inside aa64_va_parameters(),
+    which can be reached with ARMMMUIdx_E10_* mmuidx values (stage 1+2
+    combined indexes) when the guest sets TCR_ELx.{E0PD0,E0PD1}.
+    The original code asserted these indexes were never valid, making
+    that assertion now incorrect. A TLBI operation in the guest is
+    enough to trigger the abort.
  
-  * The bug is present in noble (QEMU 8.2.2). It does not affect
-    jammy (6.2) which predates FEAT_E0PD, nor stonking (10.2.1) which
-    already carries the upstream fix.
+  * The bug is present in noble (QEMU 8.2.2). It does not affect
+    jammy (6.2) which predates FEAT_E0PD, nor stonking (10.2.1) which
+    already carries the upstream fix.
  
  [ Test Plan ]
-  1. On a fresh Ubuntu 24.04 amd64 host, install qemu-system-arm:
-       sudo apt update && sudo apt install -y qemu-system-arm
+  1. On a fresh Ubuntu 24.04 amd64 host, install qemu-system-arm:
+       sudo apt update && sudo apt install -y qemu-system-arm
  
-  2. Boot the VM:
-       qemu-system-aarch64 -nographic -nodefaults -m 2G -smp 2 \
-         -cpu max -machine type=virt,accel=tcg \
-         -drive 
file=/usr/share/AAVMF/AAVMF_CODE.fd,if=pflash,unit=0,format=raw,readonly=on
+  2. Download image
  
-  * Before fix: QEMU aborts with the regime_is_user assertion failure
-    shortly after the guest starts booting.
-  * After fix: the VM boots and show UEFI output
+ wget
+ 
https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/aarch64/images/Fedora-
+ Cloud-Base-Generic-44-1.7.aarch64.qcow2
+ 
+  2. Boot the VM:
+       qemu-system-aarch64 -nographic -nodefaults -m 2G -smp 2 \
+         -cpu max -machine type=virt,accel=tcg \
+         -serial stdio -drive 
file=./Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2
 \
+         -drive 
file=/usr/share/AAVMF/AAVMF_CODE.fd,if=pflash,unit=0,format=raw,readonly=on
+ 
+  * Before fix: QEMU aborts with the regime_is_user assertion failure
+    shortly after the guest starts booting.
+ 
+  * After fix: the VM boots fine
  
  [ Where problems could occur ]
  
-  * The change is a one-line addition to a switch statement in
-    target/arm/internals.h — regime_is_user() now correctly classifies
-    ARMMMUIdx_E10_0 as user mode and lets E10_1/E10_1_PAN fall through
-    to the existing "return false" default.
+  * The change is a one-line addition to a switch statement in
+    target/arm/internals.h — regime_is_user() now correctly classifies
+    ARMMMUIdx_E10_0 as user mode and lets E10_1/E10_1_PAN fall through
+    to the existing "return false" default.
  
-  * Risk is low: the only change in behavior is for the E10_0
-    index which previously aborted; now it returns true (user mode),
-    matching the semantics of the equivalent E20_0 case.
+  * Risk is low: the only change in behavior is for the E10_0
+    index which previously aborted; now it returns true (user mode),
+    matching the semantics of the equivalent E20_0 case.
  
-  * No impact on non-AArch64 guests or on non-FEAT_E0PD workloads.
+  * No impact on non-AArch64 guests or on non-FEAT_E0PD workloads.
  
  [ Other Info ]
  
-  * Upstream fix: 
https://gitlab.com/qemu-project/qemu/-/commit/1505b651fdbd9af59a4a90876a62ae7ea2d4cd39
-  * Only noble is affected among supported Ubuntu LTS releases.
- 
+  * Upstream fix: 
https://gitlab.com/qemu-project/qemu/-/commit/1505b651fdbd9af59a4a90876a62ae7ea2d4cd39
+  * Only noble is affected among supported Ubuntu LTS releases.
  
  ---Original bug report---
  
  The qemu-system-aarch64 process from qemu-system-arm package crashes with the 
following message:
  ```
  ERROR:target/arm/internals.h:767:regime_is_user: code should not be reached
  Bail out! ERROR:target/arm/internals.h:767:regime_is_user: code should not be 
reached
  Aborted (core dumped)
  ```
  
  To reproduce, run the following on a fresh Ubuntu 24.04.4 amd64 system:
  ```
  sudo apt update
  sudo apt install -y qemu-system-arm
  wget 
https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/aarch64/images/Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2
  cp /usr/share/AAVMF/AAVMF_CODE.fd efivars.fd
  qemu-system-aarch64 -nographic -nodefaults -m 2G -smp 2 -cpu max -machine 
type=virt,accel=tcg -drive 
file=./Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2
 -drive 
file=/usr/share/AAVMF/AAVMF_CODE.fd,if=pflash,unit=0,format=raw,readonly=on 
-drive file=./efivars.fd,if=pflash,unit=1,format=raw
  ```
  
  The package version is 1:8.2.2+ds-0ubuntu1.1
  The same reproduction steps do NOT result in a crash on Ubuntu 22.04 
(1:6.2+dfsg-2ubuntu6.31) and Ubuntu 26.04 (1:10.2.1+ds-1ubuntu3.1).
  
  If you're looking for another example, I've also ran into the same crash
  when working with the openSUSE Tumbleweed ARM cloud image
  (https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/openSUSE-
  Tumbleweed-Minimal-VM.aarch64-Cloud.qcow2).
  
  I'ev pinpointed this to the following commit:
  
https://gitlab.com/qemu-project/qemu/-/commit/1505b651fdbd9af59a4a90876a62ae7ea2d4cd39
  
  I added it to series of patches in a branch based on the ubuntu/noble-
  updates branch and a build from that branch did, in fact, fix the crash.

** Description changed:

  [ Impact ]
   * qemu-system-aarch64 crashes with an assertion failure in
     regime_is_user() when running AArch64 guests that trigger
     FEAT_E0PD behaviour (e.g. Fedora 44, openSUSE Tumbleweed ARM
     cloud images):
  
       ERROR:target/arm/internals.h:767:regime_is_user: code should not be 
reached
       Bail out! ERROR:target/arm/internals.h:767:regime_is_user: code should 
not be reached
       Aborted (core dumped)
  
   * Root cause: commit e4c93e44ab10 ("target/arm: Implement FEAT_E0PD")
     added a call to regime_is_user() inside aa64_va_parameters(),
     which can be reached with ARMMMUIdx_E10_* mmuidx values (stage 1+2
     combined indexes) when the guest sets TCR_ELx.{E0PD0,E0PD1}.
     The original code asserted these indexes were never valid, making
     that assertion now incorrect. A TLBI operation in the guest is
     enough to trigger the abort.
  
   * The bug is present in noble (QEMU 8.2.2). It does not affect
     jammy (6.2) which predates FEAT_E0PD, nor stonking (10.2.1) which
     already carries the upstream fix.
  
  [ Test Plan ]
   1. On a fresh Ubuntu 24.04 amd64 host, install qemu-system-arm:
        sudo apt update && sudo apt install -y qemu-system-arm
  
-  2. Download image
+  2. Download image
  
  wget
  
https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/aarch64/images/Fedora-
  Cloud-Base-Generic-44-1.7.aarch64.qcow2
  
   2. Boot the VM:
        qemu-system-aarch64 -nographic -nodefaults -m 2G -smp 2 \
          -cpu max -machine type=virt,accel=tcg \
-         -serial stdio -drive 
file=./Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2
 \
+         -serial stdio -drive 
file=./Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2
 \
          -drive 
file=/usr/share/AAVMF/AAVMF_CODE.fd,if=pflash,unit=0,format=raw,readonly=on
  
   * Before fix: QEMU aborts with the regime_is_user assertion failure
     shortly after the guest starts booting.
+ 
+   Booting `Fedora Linux (6.19.10-300.fc44.aarch64) 44 (Cloud Edition)'
+ 
+ **
+ ERROR:target/arm/internals.h:767:regime_is_user: code should not be reached
+ Bail out! ERROR:target/arm/internals.h:767:regime_is_user: code should not be 
reached
+ 
  
   * After fix: the VM boots fine
  
  [ Where problems could occur ]
  
   * The change is a one-line addition to a switch statement in
     target/arm/internals.h — regime_is_user() now correctly classifies
     ARMMMUIdx_E10_0 as user mode and lets E10_1/E10_1_PAN fall through
     to the existing "return false" default.
  
   * Risk is low: the only change in behavior is for the E10_0
     index which previously aborted; now it returns true (user mode),
     matching the semantics of the equivalent E20_0 case.
  
   * No impact on non-AArch64 guests or on non-FEAT_E0PD workloads.
  
  [ Other Info ]
  
   * Upstream fix: 
https://gitlab.com/qemu-project/qemu/-/commit/1505b651fdbd9af59a4a90876a62ae7ea2d4cd39
   * Only noble is affected among supported Ubuntu LTS releases.
  
  ---Original bug report---
  
  The qemu-system-aarch64 process from qemu-system-arm package crashes with the 
following message:
  ```
  ERROR:target/arm/internals.h:767:regime_is_user: code should not be reached
  Bail out! ERROR:target/arm/internals.h:767:regime_is_user: code should not be 
reached
  Aborted (core dumped)
  ```
  
  To reproduce, run the following on a fresh Ubuntu 24.04.4 amd64 system:
  ```
  sudo apt update
  sudo apt install -y qemu-system-arm
  wget 
https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/aarch64/images/Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2
  cp /usr/share/AAVMF/AAVMF_CODE.fd efivars.fd
  qemu-system-aarch64 -nographic -nodefaults -m 2G -smp 2 -cpu max -machine 
type=virt,accel=tcg -drive 
file=./Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2
 -drive 
file=/usr/share/AAVMF/AAVMF_CODE.fd,if=pflash,unit=0,format=raw,readonly=on 
-drive file=./efivars.fd,if=pflash,unit=1,format=raw
  ```
  
  The package version is 1:8.2.2+ds-0ubuntu1.1
  The same reproduction steps do NOT result in a crash on Ubuntu 22.04 
(1:6.2+dfsg-2ubuntu6.31) and Ubuntu 26.04 (1:10.2.1+ds-1ubuntu3.1).
  
  If you're looking for another example, I've also ran into the same crash
  when working with the openSUSE Tumbleweed ARM cloud image
  (https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/openSUSE-
  Tumbleweed-Minimal-VM.aarch64-Cloud.qcow2).
  
  I'ev pinpointed this to the following commit:
  
https://gitlab.com/qemu-project/qemu/-/commit/1505b651fdbd9af59a4a90876a62ae7ea2d4cd39
  
  I added it to series of patches in a branch based on the ubuntu/noble-
  updates branch and a build from that branch did, in fact, fix the crash.

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

Title:
  qemu-system-aarch64 crashes on regime_is_user assert

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


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to