Public bug reported:

[Impact]
On seabios before rel-1.9.0~47, there's a bug in rtc_mask() that can cause VMs 
to miss interrupts and get stuck in a 'PAUSED' state due to KVM emulation 
errors.

While reading PORT_CMOS_DATA, an NMI can "steal" execution before the
inb() call returns, which effectively leaves the guest waiting on the
port read forever. This can then trigger watchdogs, and usually results
in an KVM emulation error leaving the VM in the 'PAUSED' state. Since
the guest VM is broken due to the missed interrupts, the only way to
recover is restarting it.

[Test Plan]
Due to the somewhat small race window involved between the inb() call and an 
NMI coming in, this issue has been hard to reproduce consistently.  Our test 
plan involves running the fixes in a heavily overcommited Openstack compute 
host where this issue has been reported multiple times, to also validate that 
no new regressions have been introduced.

[Where problems could occur]
The patch disables NMIs in rtc_mask(), so that it stays consistent with the 
other rtc_*() functions in seabios/srs/hw/rtc.c. After the CMOS port access 
finishes and the guest resumes execution, we could see regressions with missed 
interrupts or NMIs not being handled if they are not re-enabled.

Since the patch is already present in all Ubuntu releases starting with
Bionic and there have been no 'fixes:' tags for this patch upstream, the
chance for new regressions should be fairly limited.

[Other Info]
This has been fixed by the following upstream patch:
- 3156b71a535e (rtc: Disable NMI in rtc_mask()) [0]

$ git describe --contains 3156b71a535e661
rel-1.9.0~47
$ rmadison seabios -s trusty-updates,xenial,bionic
seabios | 1.7.4-4ubuntu1 | trusty-updates | source, all
seabios | 1.8.2-1ubuntu1 | xenial | source, all
seabios | 1.10.2-1ubuntu1 | bionic | source, all

Releases starting with Bionic already have this fix.

[0]
https://review.coreboot.org/plugins/gitiles/seabios/+/3156b71a535e661%5E%21/#F0

** Affects: seabios (Ubuntu)
     Importance: High
     Assignee: Heitor Alves de Siqueira (halves)
         Status: Fix Released

** Affects: seabios (Ubuntu Trusty)
     Importance: High
     Assignee: Heitor Alves de Siqueira (halves)
         Status: Confirmed

** Affects: seabios (Ubuntu Xenial)
     Importance: High
     Assignee: Heitor Alves de Siqueira (halves)
         Status: Confirmed


** Tags: sts

** Changed in: seabios (Ubuntu)
       Status: Confirmed => Fix Released

** Also affects: seabios (Ubuntu Xenial)
   Importance: Undecided
       Status: New

** Also affects: seabios (Ubuntu Trusty)
   Importance: Undecided
       Status: New

** Changed in: seabios (Ubuntu Trusty)
       Status: New => In Progress

** Changed in: seabios (Ubuntu Xenial)
       Status: New => Confirmed

** Changed in: seabios (Ubuntu Trusty)
       Status: In Progress => Confirmed

** Changed in: seabios (Ubuntu Trusty)
     Assignee: (unassigned) => Heitor Alves de Siqueira (halves)

** Changed in: seabios (Ubuntu Xenial)
     Assignee: (unassigned) => Heitor Alves de Siqueira (halves)

** Changed in: seabios (Ubuntu Trusty)
   Importance: Undecided => High

** Changed in: seabios (Ubuntu Xenial)
   Importance: Undecided => High

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

Title:
  seabios missing NMI disable in rtc_mask()

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

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

Reply via email to