Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp3915007imm; Mon, 8 Oct 2018 11:37:01 -0700 (PDT) X-Google-Smtp-Source: ACcGV61Ku9Gq78sztO/ztKE373yycqrtHWUGo7VZw3GbZWYx/KCTlRtAfpZiBPwX80WtHPA4IPG9 X-Received: by 2002:a63:a047:: with SMTP id u7-v6mr22408101pgn.145.1539023821189; Mon, 08 Oct 2018 11:37:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539023821; cv=none; d=google.com; s=arc-20160816; b=Fd5oRKu/vN1dz+vAtMluVhaW8kgE5COP32cVsbhGj0s4GtvQ+F55V25izTrlDr0unz on26JOFkoIkjhzzxkAB72SlzMRq9w8B1Uz3ssM7MlxQKsCxyv56sjueHCvs+2fP483UP qBkFBLm7SOmaFCbTb7RWajaPFINo/nfjxr2fPpFW9+zPv3EVZYzJVrVNP3vvJUTRxZbP pm9VX+EoedRtyLzeV3T7bmrzYYOT1GdL6TJmkNZGU+0JBuQ/ojlbzkl5676NwXWBtqRh Ls1yMtw5+lEkBqdLpK8KCOJSVeC4DAvKMgW6w94+C5qd2l5hi4altXIRQSj1wy1R0gbo C5FA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3PvVHYNnqt/kZOEH3vLcHRmUZ8VjmCQf4UYy8Q/hNNo=; b=iMn08lVF7yZWRDGdWvChcfM2gwZwSiWWVmRnWwAv4RXy3QF4uOz0kpY/2xjb4K+LT3 VyYxvKgsB/jkjbdXvR4BBaAQ7TNZCkHAjBgmy1sVVuTLvWCKBuEExbE4apvn/QLCYRFA 6roe9svXA4SE4eBvcW2VayYHef76lGwikrbgBD1tBz417iVJQiiqf6bpaD8RLb0w3o8R ZUiHwm+LCpMbxlQGdqHlJ6s0jJSA38CpaJQvKZDI/INPYOU85oheIiq/50AEK/WEWZvW SOd+Nlwe5grSWT+lF1HUTeQ8q+w3k9nhdHmU87gyRkaF1slQ/FfqtantN9pK1/0puCrF 5itA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=c4QCtZJN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k9-v6si19043559pfg.57.2018.10.08.11.36.46; Mon, 08 Oct 2018 11:37:01 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=c4QCtZJN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728418AbeJIBs6 (ORCPT + 99 others); Mon, 8 Oct 2018 21:48:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:33466 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726522AbeJIBs5 (ORCPT ); Mon, 8 Oct 2018 21:48:57 -0400 Received: from localhost (ip-213-127-77-176.ip.prioritytelecom.net [213.127.77.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 605D221479; Mon, 8 Oct 2018 18:35:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1539023755; bh=kgrEl6OMCbyX4FQk9QSNUf8H0S/ih70yB1AKN4JP9vM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c4QCtZJNMjqUKOJD4y4LrXJ6/W5/lsqlOJ5Pt8wnbqlEhk3rlDHltIb3saHBscRye z4fRKZlRPd32hhmCjbcl4xICiCVCKOdh0N6B1pX6MV0Awx1bsVq+fgCy2BmakpJUZ+ wl0h/jOIINTrRk/BbDf8hO6fBCq8PMmbFq69WIMQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christoffer Dall , Mark Rutland , Dave Martin , Marc Zyngier , Will Deacon Subject: [PATCH 4.4 072/113] arm64: KVM: Sanitize PSTATE.M when being set from userspace Date: Mon, 8 Oct 2018 20:31:13 +0200 Message-Id: <20181008175534.926850701@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181008175530.864641368@linuxfoundation.org> References: <20181008175530.864641368@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Marc Zyngier commit 2a3f93459d689d990b3ecfbe782fec89b97d3279 upstream. Not all execution modes are valid for a guest, and some of them depend on what the HW actually supports. Let's verify that what userspace provides is compatible with both the VM settings and the HW capabilities. Cc: Fixes: 0d854a60b1d7 ("arm64: KVM: enable initialization of a 32bit vcpu") Reviewed-by: Christoffer Dall Reviewed-by: Mark Rutland Reviewed-by: Dave Martin Signed-off-by: Marc Zyngier Signed-off-by: Will Deacon Signed-off-by: Marc Zyngier Signed-off-by: Greg Kroah-Hartman --- arch/arm64/include/asm/kvm_emulate.h | 5 +++++ arch/arm64/kvm/guest.c | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -41,6 +41,11 @@ void kvm_inject_undefined(struct kvm_vcp void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr); void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr); +static inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu) +{ + return !(vcpu->arch.hcr_el2 & HCR_RW); +} + static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu) { vcpu->arch.hcr_el2 = HCR_GUEST_FLAGS; --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -143,17 +143,25 @@ static int set_core_reg(struct kvm_vcpu } if (off == KVM_REG_ARM_CORE_REG(regs.pstate)) { - u32 mode = (*(u32 *)valp) & COMPAT_PSR_MODE_MASK; + u64 mode = (*(u64 *)valp) & COMPAT_PSR_MODE_MASK; switch (mode) { case COMPAT_PSR_MODE_USR: + if (!system_supports_32bit_el0()) + return -EINVAL; + break; case COMPAT_PSR_MODE_FIQ: case COMPAT_PSR_MODE_IRQ: case COMPAT_PSR_MODE_SVC: case COMPAT_PSR_MODE_ABT: case COMPAT_PSR_MODE_UND: + if (!vcpu_el1_is_32bit(vcpu)) + return -EINVAL; + break; case PSR_MODE_EL0t: case PSR_MODE_EL1t: case PSR_MODE_EL1h: + if (vcpu_el1_is_32bit(vcpu)) + return -EINVAL; break; default: err = -EINVAL;