From: Gavin Shan <gshan@redhat.com>
To: Steven Price <steven.price@arm.com>,
kvm@vger.kernel.org, kvmarm@lists.linux.dev
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Marc Zyngier <maz@kernel.org>, Will Deacon <will@kernel.org>,
James Morse <james.morse@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Joey Gouly <joey.gouly@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Christoffer Dall <christoffer.dall@arm.com>,
Fuad Tabba <tabba@google.com>,
linux-coco@lists.linux.dev,
Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>,
Shanker Donthineni <sdonthineni@nvidia.com>,
Alper Gun <alpergun@google.com>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>
Subject: Re: [PATCH v7 34/45] kvm: rme: Hide KVM_CAP_READONLY_MEM for realm guests
Date: Tue, 8 Apr 2025 16:37:36 +1000 [thread overview]
Message-ID: <7fa4269b-a20c-4cfc-b6e7-e70214ec6366@redhat.com> (raw)
In-Reply-To: <d254a8ea-0f02-4826-9af3-4a288efcc90c@arm.com>
On 4/8/25 2:34 AM, Steven Price wrote:
> On 04/03/2025 11:51, Gavin Shan wrote:
>> On 2/14/25 2:14 AM, Steven Price wrote:
>>> For protected memory read only isn't supported. While it may be possible
>>> to support read only for unprotected memory, this isn't supported at the
>>> present time.
>>>
>>> Signed-off-by: Steven Price <steven.price@arm.com>
>>> ---
>>> arch/arm64/kvm/arm.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>
>> It's worthy to explain why KVM_CAP_READONLY_MEM isn't supported and its
>> negative impact. It's something to be done in the future if I'm correct.
>
> I'll add to the commit message:
>
> Note that this does mean that e.g. ROM (or flash) data cannot be
> emulated correctly by the VMM.
>
Please also to mention this if you agree: At present, there is no exposed
APIs from RMM allowing to specifying stage-2 page-table entry's permission.
read-only regions for ROM and flash have to be backed up by read-write stage-2
page-table entries. It's going to rely on the stage-1 page-table to have the
proper permissions for those read-only regions.
>> From QEMU's perspective, all ROM data, which is populated by it, can
>> be written. It conflicts to the natural limit: all ROM data should be
>> read-only.
>
> Yes this is my understanding of the main impact. I'm not sure how useful
> (shared) ROM/flash emulation is. It can certainly be added in the future
> if needed. Protected read-only memory I don't believe is useful - the
> only sane response I can see from a write fault in that case is killing
> the guest.
>
Yes, VMM is still able to write to those regions even they're read-only
since they're emulated. For misbehaving guest where those regions are also
mapped as read-write, the data resident in those regions can be corrupted
by guest. It's not the expected output.
Since RMM doesn't have exposed APIs allowing to specify page-table entry's
permissions, meaning all entries have read-write permissions, we have to
give read-write permission to those read-only regions for now. In long run,
it's something to be fixed, starting from RMM.
Thanks,
Gavin
> Thanks,
> Steve
>
>> QEMU
>> ====
>> rom_add_blob
>> rom_set_mr
>> memory_region_set_readonly
>> memory_region_transaction_commit
>> kvm_region_commit
>> kvm_set_phys_mem
>> kvm_mem_flags // flag
>> KVM_MEM_READONLY is missed
>> kvm_set_user_memory_region
>> kvm_vm_ioctl(KVM_SET_USER_MEMORY_REGION2)
>>
>> non-secure host
>> ===============
>> rec_exit_sync_dabt
>> kvm_handle_guest_abort
>> user_mem_abort
>> __kvm_faultin_pfn // writable == true
>> realm_map_ipa
>> WARN_ON(!(prot & KVM_PGTABLE_PROT_W)
>>
>> non-secure host
>> ===============
>> kvm_realm_enable_cap(KVM_CAP_ARM_RME_POPULATE_REALM)
>> kvm_populate_realm
>> __kvm_faultin_pfn // writable == true
>> realm_create_protected_data_page
>>
>>> diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
>>> index 1f3674e95f03..0f1d65f87e2b 100644
>>> --- a/arch/arm64/kvm/arm.c
>>> +++ b/arch/arm64/kvm/arm.c
>>> @@ -348,7 +348,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm,
>>> long ext)
>>> case KVM_CAP_ONE_REG:
>>> case KVM_CAP_ARM_PSCI:
>>> case KVM_CAP_ARM_PSCI_0_2:
>>> - case KVM_CAP_READONLY_MEM:
>>> case KVM_CAP_MP_STATE:
>>> case KVM_CAP_IMMEDIATE_EXIT:
>>> case KVM_CAP_VCPU_EVENTS:
>>> @@ -362,6 +361,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm,
>>> long ext)
>>> case KVM_CAP_COUNTER_OFFSET:
>>> r = 1;
>>> break;
>>> + case KVM_CAP_READONLY_MEM:
>>> case KVM_CAP_SET_GUEST_DEBUG:
>>> r = !kvm_is_realm(kvm);
>>> break;
>>
>> Thanks,
>> Gavin
>>
>
next prev parent reply other threads:[~2025-04-08 6:37 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-13 16:13 [PATCH v7 00/45] arm64: Support for Arm CCA in KVM Steven Price
2025-02-13 16:13 ` [PATCH v7 01/45] KVM: Prepare for handling only shared mappings in mmu_notifier events Steven Price
2025-03-02 23:36 ` Gavin Shan
2025-03-03 15:05 ` Steven Price
2025-02-13 16:13 ` [PATCH v7 02/45] kvm: arm64: Include kvm_emulate.h in kvm/arm_psci.h Steven Price
2025-03-02 23:39 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 03/45] arm64: RME: Handle Granule Protection Faults (GPFs) Steven Price
2025-03-02 23:43 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 04/45] arm64: RME: Add SMC definitions for calling the RMM Steven Price
2025-03-02 23:52 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 05/45] arm64: RME: Add wrappers for RMI calls Steven Price
2025-03-03 3:42 ` Gavin Shan
2025-03-03 15:05 ` Steven Price
2025-03-05 0:15 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 06/45] arm64: RME: Check for RME support at KVM init Steven Price
2025-03-03 3:58 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 07/45] arm64: RME: Define the user ABI Steven Price
2025-02-14 13:09 ` Aneesh Kumar K.V
2025-03-03 4:10 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 08/45] arm64: RME: ioctls to create and configure realms Steven Price
2025-03-03 4:42 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 09/45] kvm: arm64: Expose debug HW register numbers for Realm Steven Price
2025-03-03 4:48 ` Gavin Shan
2025-03-05 16:25 ` Steven Price
2025-03-05 23:31 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 10/45] arm64: kvm: Allow passing machine type in KVM creation Steven Price
2025-03-03 4:53 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 11/45] arm64: RME: RTT tear down Steven Price
2025-03-03 6:25 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 12/45] arm64: RME: Allocate/free RECs to match vCPUs Steven Price
2025-03-03 7:08 ` Gavin Shan
2025-03-07 15:43 ` Steven Price
2025-04-08 4:55 ` Gavin Shan
2025-04-07 15:06 ` Wei-Lin Chang
2025-02-13 16:13 ` [PATCH v7 13/45] KVM: arm64: vgic: Provide helper for number of list registers Steven Price
2025-02-13 16:13 ` [PATCH v7 14/45] arm64: RME: Support for the VGIC in realms Steven Price
2025-03-03 18:02 ` Suzuki K Poulose
2025-02-13 16:13 ` [PATCH v7 15/45] KVM: arm64: Support timers in realm RECs Steven Price
2025-03-04 17:59 ` Suzuki K Poulose
2025-02-13 16:13 ` [PATCH v7 16/45] arm64: RME: Allow VMM to set RIPAS Steven Price
2025-03-04 0:45 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 17/45] arm64: RME: Handle realm enter/exit Steven Price
2025-03-04 1:03 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-08 5:03 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 18/45] arm64: RME: Handle RMI_EXIT_RIPAS_CHANGE Steven Price
2025-03-04 4:35 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-09 0:13 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 19/45] KVM: arm64: Handle realm MMIO emulation Steven Price
2025-03-04 4:52 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 20/45] arm64: RME: Allow populating initial contents Steven Price
2025-03-04 5:09 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 21/45] arm64: RME: Runtime faulting of memory Steven Price
2025-02-13 16:14 ` [PATCH v7 22/45] KVM: arm64: Handle realm VCPU load Steven Price
2025-03-04 5:15 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 23/45] KVM: arm64: Validate register access for a Realm VM Steven Price
2025-03-04 5:29 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 24/45] KVM: arm64: Handle Realm PSCI requests Steven Price
2025-03-04 5:38 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 25/45] KVM: arm64: WARN on injected undef exceptions Steven Price
2025-03-04 5:39 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 26/45] arm64: Don't expose stolen time for realm guests Steven Price
2025-03-04 5:42 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 27/45] arm64: rme: allow userspace to inject aborts Steven Price
2025-03-04 5:47 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 28/45] arm64: rme: support RSI_HOST_CALL Steven Price
2025-03-04 6:01 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-08 5:19 ` Gavin Shan
2025-04-09 17:31 ` Steven Price
2025-02-13 16:14 ` [PATCH v7 29/45] arm64: rme: Allow checking SVE on VM instance Steven Price
2025-03-04 6:02 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 30/45] arm64: RME: Always use 4k pages for realms Steven Price
2025-03-04 6:23 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-02-13 16:14 ` [PATCH v7 31/45] arm64: rme: Prevent Device mappings for Realms Steven Price
2025-03-04 6:27 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 32/45] arm_pmu: Provide a mechanism for disabling the physical IRQ Steven Price
2025-02-13 16:14 ` [PATCH v7 33/45] arm64: rme: Enable PMU support with a realm guest Steven Price
2025-02-13 16:14 ` [PATCH v7 34/45] kvm: rme: Hide KVM_CAP_READONLY_MEM for realm guests Steven Price
2025-03-04 11:51 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-08 6:37 ` Gavin Shan [this message]
2025-02-13 16:14 ` [PATCH v7 35/45] arm64: RME: Propagate number of breakpoints and watchpoints to userspace Steven Price
2025-03-04 23:45 ` Gavin Shan
2025-04-07 16:35 ` Steven Price
2025-04-08 6:39 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 36/45] arm64: RME: Set breakpoint parameters through SET_ONE_REG Steven Price
2025-03-04 23:46 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 37/45] arm64: RME: Initialize PMCR.N with number counter supported by RMM Steven Price
2025-02-13 16:14 ` [PATCH v7 38/45] arm64: RME: Propagate max SVE vector length from RMM Steven Price
2025-02-13 16:14 ` [PATCH v7 39/45] arm64: RME: Configure max SVE vector length for a Realm Steven Price
2025-02-13 16:14 ` [PATCH v7 40/45] arm64: RME: Provide register list for unfinalized RME RECs Steven Price
2025-02-13 16:14 ` [PATCH v7 41/45] arm64: RME: Provide accurate register list Steven Price
2025-02-13 16:14 ` [PATCH v7 42/45] arm64: kvm: Expose support for private memory Steven Price
2025-02-13 16:14 ` [PATCH v7 43/45] KVM: arm64: Expose KVM_ARM_VCPU_REC to user space Steven Price
2025-02-13 16:14 ` [PATCH v7 44/45] KVM: arm64: Allow activating realms Steven Price
2025-02-13 16:14 ` [PATCH v7 45/45] WIP: Enable support for PAGE_SIZE>4k Steven Price
2025-03-05 3:53 ` [PATCH v7 00/45] arm64: Support for Arm CCA in KVM Gavin Shan
2025-03-26 2:14 ` Emi Kisanuki (Fujitsu)
2025-03-26 6:14 ` Oliver Upton
2025-04-01 6:54 ` Emi Kisanuki (Fujitsu)
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=7fa4269b-a20c-4cfc-b6e7-e70214ec6366@redhat.com \
--to=gshan@redhat.com \
--cc=alexandru.elisei@arm.com \
--cc=alpergun@google.com \
--cc=aneesh.kumar@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=christoffer.dall@arm.com \
--cc=gankulkarni@os.amperecomputing.com \
--cc=james.morse@arm.com \
--cc=joey.gouly@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=sdonthineni@nvidia.com \
--cc=steven.price@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.