Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1187343pxb; Fri, 13 Nov 2020 06:30:18 -0800 (PST) X-Google-Smtp-Source: ABdhPJx174G9u+bJiXPDgzg+u1CLxM3+9zpzdlFEjMotDZCueDrc7omYnGgDO/+uQC0BrFzYZG8+ X-Received: by 2002:a50:9f61:: with SMTP id b88mr2900365edf.282.1605277818453; Fri, 13 Nov 2020 06:30:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605277818; cv=none; d=google.com; s=arc-20160816; b=IkcIWo9Tv0l+BupLIEiKacbPc/K06w1CrZDg+CqADYRRh0xASVLeXrUKCAos/Xvia6 HTUB8CSmSSNb0FAgMdfNrFSFbpm757+l/SKlqPkI5zm8ehPeDMJa4/0/qGocRcy/qsX0 BlkU+fLSfM+PIOm32+G3JT3i1Unhx97lOPFfKa/ugfvWhqquw8bLjQ8gKDJW32uoebj3 F/lRXrTzog4ftW6jsUtqLmuPrf2HiMdTpAVdDLpWw+li3eJOogWRyY66Tra40yqWzZgG VsDErN4C7PdFD8DXaEpE5qgImIzOhwgXp5jCA4MWpCP16eXtPG1jBno5QdRgywGaD+XI OFww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=qlrkxLO9FXn0scxMRucLcQ5bOODXFLg9A+V/XWnK0Nc=; b=uIyS9Z2eHDmPG9ygobOSqLIJFPc+4vAr7j8xsx7kbf4GUqf4ttIvwKe2VXw6fUQFPq xYlJxNajxKf6trK17vWMO6zoR4Nzzff5aDbHOzAyoILhyeaReyNHf60BQJnLHY/hyRMG A5FcLph1DvmkgJOoD1T3bwi+RGSbIXB/FXN50A/7FxSuTDRhvRPl4fAVl9DX5Yei32hG msHvgJRMNTnTWyQiVpfrqU7n8oEKN5C3Z9sp00xI3Eb1KakvgpPvZlIaQhSv5S5nDz6g fVEV0FMsKEC5HXX8q0lfKjxR91bKs7bEZA5vImwYirvUPCIPRZKeMPvaqWXku6hrjWow sLVw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id qq16si4114648ejb.714.2020.11.13.06.29.54; Fri, 13 Nov 2020 06:30:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726789AbgKMO2d (ORCPT + 99 others); Fri, 13 Nov 2020 09:28:33 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:7232 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726507AbgKMO2a (ORCPT ); Fri, 13 Nov 2020 09:28:30 -0500 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4CXgmp1DY1zkWqj; Fri, 13 Nov 2020 22:28:10 +0800 (CST) Received: from DESKTOP-8RFUVS3.china.huawei.com (10.174.185.179) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.487.0; Fri, 13 Nov 2020 22:28:16 +0800 From: Zenghui Yu To: , CC: , , , , , , , Zenghui Yu Subject: [PATCH 2/2] KVM: arm64: vgic: Forbid invalid userspace Distributor accesses Date: Fri, 13 Nov 2020 22:28:01 +0800 Message-ID: <20201113142801.1659-3-yuzenghui@huawei.com> X-Mailer: git-send-email 2.23.0.windows.1 In-Reply-To: <20201113142801.1659-1-yuzenghui@huawei.com> References: <20201113142801.1659-1-yuzenghui@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.174.185.179] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Accessing registers in the Distributor before setting its base address should be treated as an invalid userspece behaviour. But KVM implicitly allows it as we handle the access anyway, regardless of whether the base address is set or not. Fix this issue by informing userspace what had gone wrong (-ENXIO). Signed-off-by: Zenghui Yu --- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/kvm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-mmio-v3.c index 30e370585a27..6a9e5eb311f0 100644 --- a/arch/arm64/kvm/vgic/vgic-mmio-v3.c +++ b/arch/arm64/kvm/vgic/vgic-mmio-v3.c @@ -1029,11 +1029,15 @@ void vgic_v3_dispatch_sgi(struct kvm_vcpu *vcpu, u64 reg, bool allow_group1) int vgic_v3_dist_uaccess(struct kvm_vcpu *vcpu, bool is_write, int offset, u32 *val) { + struct vgic_dist *dist = &vcpu->kvm->arch.vgic; struct vgic_io_device dev = { .regions = vgic_v3_dist_registers, .nr_regions = ARRAY_SIZE(vgic_v3_dist_registers), }; + if (IS_VGIC_ADDR_UNDEF(dist->vgic_dist_base)) + return -ENXIO; + return vgic_uaccess(vcpu, &dev, is_write, offset, val); } -- 2.19.1