From: Ricardo Koller <ricarkol@google.com>
To: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu
Cc: andre.przywara@arm.com, pshier@google.com, maz@kernel.org,
pbonzini@redhat.com
Subject: [PATCH 0/4] KVM: arm64: vgic: Misc ITS fixes
Date: Mon, 25 Apr 2022 11:55:30 -0700 [thread overview]
Message-ID: <20220425185534.57011-1-ricarkol@google.com> (raw)
The purpose of this series is to help debugging failed ITS saves and
restores. Failures can be due to misconfiguration on the guest side:
tables with bogus base addresses, or the guest overwriting L1 indirect
tables. KVM can't do much in these cases, but one thing it can do to help
is raising errors as soon as possible. Here are a couple of cases where
KVM could do more:
- A command that adds an entry into an ITS table that is not in guest
memory should fail, as any command should be treated as if it was
actually saving entries in guest memory (KVM doesn't until saving). KVM
does this check for collections and devices (using vgic_its_check_id),
but it doesn't for the ITT (Interrupt Translation Table). Commit #1 adds
the missing check.
- Restoring the ITS tables does some checks for corrupted tables, but not
as many as in a save. For example, a device ID overflowing the table
will be detected on save but not on restore. The consequence is that
restoring a corrupted table won't be detected until the next save;
including the ITS not working as expected after the restore. As an
example, if the guest sets tables overlapping each other, this would most
likely result in some corrupted table; and this is what we would see from
the host point of view:
guest sets bogus baser addresses
save ioctl
restore ioctl
save ioctl (fails)
This failed save could happen many days after the first operation, so it
would be hard to track down. Commit #2 adds some checks into restore:
like checking that the ITE entries are not repeated.
- Restoring a corrupted collection entry is being ignored. Commit #3 fixes
this while trying to organize the code so to make the bug more obvious
next time.
Finally, failed restores should clean up all intermediate state. Commit #4
takes care of cleaning up everything created until the restore was deemed a
failure.
Tested with kvm-unit-tests ITS tests.
Ricardo Koller (4):
KVM: arm64: vgic: Check that new ITEs could be saved in guest memory
KVM: arm64: vgic: Add more checks when restoring ITS tables
KVM: arm64: vgic: Do not ignore vgic_its_restore_cte failures
KVM: arm64: vgic: Undo work in failed ITS restores
arch/arm64/kvm/vgic/vgic-its.c | 91 ++++++++++++++++++++++++++++++----
1 file changed, 80 insertions(+), 11 deletions(-)
--
2.36.0.rc2.479.g8af0fa9b8e-goog
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
next reply other threads:[~2022-04-25 18:55 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-25 18:55 Ricardo Koller [this message]
2022-04-25 18:55 ` [PATCH 1/4] KVM: arm64: vgic: Check that new ITEs could be saved in guest memory Ricardo Koller
2022-04-26 4:07 ` Marc Zyngier
2022-04-26 16:21 ` Ricardo Koller
2022-04-26 17:34 ` Marc Zyngier
2022-04-27 17:54 ` Ricardo Koller
2022-04-25 18:55 ` [PATCH 2/4] KVM: arm64: vgic: Add more checks when restoring ITS tables Ricardo Koller
2022-04-25 18:55 ` [PATCH 3/4] KVM: arm64: vgic: Do not ignore vgic_its_restore_cte failures Ricardo Koller
2022-04-25 18:55 ` [PATCH 4/4] KVM: arm64: vgic: Undo work in failed ITS restores Ricardo Koller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220425185534.57011-1-ricarkol@google.com \
--to=ricarkol@google.com \
--cc=andre.przywara@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.com \
--cc=pshier@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).