From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pierre Morel Subject: [PATCH v4 2/2] s390: virtio: PV needs VIRTIO I/O device protection Date: Tue, 7 Jul 2020 10:44:37 +0200 Message-ID: <1594111477-15401-3-git-send-email-pmorel@linux.ibm.com> References: <1594111477-15401-1-git-send-email-pmorel@linux.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1594111477-15401-1-git-send-email-pmorel@linux.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" To: linux-kernel@vger.kernel.org Cc: gor@linux.ibm.com, linux-s390@vger.kernel.org, frankja@linux.ibm.com, kvm@vger.kernel.org, mst@redhat.com, heiko.carstens@de.ibm.com, cohuck@redhat.com, linuxram@us.ibm.com, virtualization@lists.linux-foundation.org, pasic@linux.ibm.com, borntraeger@de.ibm.com, thomas.lendacky@amd.com, david@gibson.dropbear.id.au List-Id: virtualization@lists.linuxfoundation.org S390, protecting the guest memory against unauthorized host access needs to enforce VIRTIO I/O device protection through the use of VIRTIO_F_VERSION_1 and VIRTIO_F_IOMMU_PLATFORM. Signed-off-by: Pierre Morel --- arch/s390/kernel/uv.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c index c296e5c8dbf9..106330f6eda1 100644 --- a/arch/s390/kernel/uv.c +++ b/arch/s390/kernel/uv.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -413,3 +414,27 @@ static int __init uv_info_init(void) } device_initcall(uv_info_init); #endif + +/* + * arch_validate_virtio_iommu_platform + * @dev: the VIRTIO device being added + * + * Return value: returns -ENODEV if any features of the + * device breaks the protected virtualization + * 0 otherwise. + */ +int arch_validate_virtio_features(struct virtio_device *dev) +{ + if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) { + dev_warn(&dev->dev, "device must provide VIRTIO_F_VERSION_1\n"); + return is_prot_virt_guest() ? -ENODEV : 0; + } + + if (!virtio_has_feature(dev, VIRTIO_F_IOMMU_PLATFORM)) { + dev_warn(&dev->dev, + "device must provide VIRTIO_F_IOMMU_PLATFORM\n"); + return is_prot_virt_guest() ? -ENODEV : 0; + } + + return 0; +} -- 2.25.1