From patchwork Tue Mar 22 18:35:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver Upton X-Patchwork-Id: 12788939 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 477CDC433EF for ; Tue, 22 Mar 2022 18:35:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234742AbiCVShO (ORCPT ); Tue, 22 Mar 2022 14:37:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234112AbiCVShN (ORCPT ); Tue, 22 Mar 2022 14:37:13 -0400 Received: from mail-oo1-xc4a.google.com (mail-oo1-xc4a.google.com [IPv6:2607:f8b0:4864:20::c4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 91A8A3CFD3 for ; Tue, 22 Mar 2022 11:35:45 -0700 (PDT) Received: by mail-oo1-xc4a.google.com with SMTP id o136-20020a4a2c8e000000b00321224df797so12103445ooo.20 for ; Tue, 22 Mar 2022 11:35:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=3PzR5vzjBym0Xrr1WAh6EkOFmL2w1PsYl+ih5Ad/dqk=; b=SGblp6gYJTNQJbOVKJuZHzVH1+KspPybgjStuKKj0ooDhsYubYE8RgbOz71CqIVIjr SP/4dvB0b76AjPGSoyzVZ1LBu501I1vwxlx8D1FWgRrsHFXbOuQci+fEdW5XRxq4bGOX 5rlIbDFc2u7S1S7WTteu0BD6kmSRpMILcW1q6F4oKF0zemBXr5gKSSOuPwbCiLDpRkkP 2c5b8tXImTSrhnxbW/JVf+0W7g3mBcSg64r10QY+/AJQ+fiXoTxUjbtz1cjBNvw8Aw0F Ls0OzeMV1Ac8oK7Yww2DOCYx+7o3/XAGcuiFnV2+o8Wh/vssPQd/XsBMgzi6x8gYr0UT yMcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=3PzR5vzjBym0Xrr1WAh6EkOFmL2w1PsYl+ih5Ad/dqk=; b=RLnf23eDMmlBdtul1eZfmxUMUydzXrNmrjtPOZeNoMnY0fYfvxPkFRcQRmIC2n4449 /xpBxQUNcw2R5QPYwWPnsXM8C+81oBfDeUdvy7xR9R66/FaBsYX35wZ8Ps4ChojVQ7xV +w3fPKRVndlcxqiCBxL8kFUzbpRA3VAdRZ9rvm+/mdNgs6Cf2lA2zvwoLow/5l4vgmQO u9pISHECfCRZJ90hwR7dpbbVOaOTApyPQXY3DY5/p3U7jL8NkE5XEl2wdoOf0dtrDydp GR/qzq+LZypCCpk2QhfDDhngOMwV+6ML6j0UFaGZk18JdSZSMDMhtQwyyH6cjCCYV6TR q8oA== X-Gm-Message-State: AOAM5323RIXF3jQfdmvzqAvRtMA3Pk4f60Jdm6Pd97nX7T2T8vzoklC0 NRZ4OhY309KSYwkaW4JesNtruEoX3m0= X-Google-Smtp-Source: ABdhPJzn9OAifeYpnFU+SY/qxn1hQQpBef9smelEDXHHVlma7uJiqUTGI5RF9LlKNBUY6ZOaiPTb3GAZ4wE= X-Received: from oupton.c.googlers.com ([fda3:e722:ac3:cc00:2b:ff92:c0a8:404]) (user=oupton job=sendgmr) by 2002:a05:6808:1283:b0:2ec:f440:e076 with SMTP id a3-20020a056808128300b002ecf440e076mr2801595oiw.157.1647974144916; Tue, 22 Mar 2022 11:35:44 -0700 (PDT) Date: Tue, 22 Mar 2022 18:35:36 +0000 In-Reply-To: <20220322183538.2757758-1-oupton@google.com> Message-Id: <20220322183538.2757758-2-oupton@google.com> Mime-Version: 1.0 References: <20220322183538.2757758-1-oupton@google.com> X-Mailer: git-send-email 2.35.1.894.gb6a874cedc-goog Subject: [PATCH v2 1/3] KVM: arm64: Generally disallow SMC64 for AArch32 guests From: Oliver Upton To: kvmarm@lists.cs.columbia.edu Cc: kvm@vger.kernel.org, Marc Zyngier , James Morse , Alexandru Elisei , Suzuki K Poulose , linux-arm-kernel@lists.infradead.org, Peter Shier , Ricardo Koller , Reiji Watanabe , Paolo Bonzini , Will Deacon , Oliver Upton , Andrew Jones Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org The only valid calling SMC calling convention from an AArch32 state is SMC32. Disallow any PSCI function that sets the SMC64 function ID bit when called from AArch32 rather than comparing against known SMC64 PSCI functions. Note that without this change KVM advertises the SMC64 flavor of SYSTEM_RESET2 to AArch32 guests. Fixes: d43583b890e7 ("KVM: arm64: Expose PSCI SYSTEM_RESET2 call to the guest") Acked-by: Will Deacon Reviewed-by: Reiji Watanabe Reviewed-by: Andrew Jones Signed-off-by: Oliver Upton --- arch/arm64/kvm/psci.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/arch/arm64/kvm/psci.c b/arch/arm64/kvm/psci.c index a433c3eac9b7..cd3ee947485f 100644 --- a/arch/arm64/kvm/psci.c +++ b/arch/arm64/kvm/psci.c @@ -216,15 +216,11 @@ static void kvm_psci_narrow_to_32bit(struct kvm_vcpu *vcpu) static unsigned long kvm_psci_check_allowed_function(struct kvm_vcpu *vcpu, u32 fn) { - switch(fn) { - case PSCI_0_2_FN64_CPU_SUSPEND: - case PSCI_0_2_FN64_CPU_ON: - case PSCI_0_2_FN64_AFFINITY_INFO: - /* Disallow these functions for 32bit guests */ - if (vcpu_mode_is_32bit(vcpu)) - return PSCI_RET_NOT_SUPPORTED; - break; - } + /* + * Prevent 32 bit guests from calling 64 bit PSCI functions. + */ + if ((fn & PSCI_0_2_64BIT) && vcpu_mode_is_32bit(vcpu)) + return PSCI_RET_NOT_SUPPORTED; return 0; } From patchwork Tue Mar 22 18:35:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver Upton X-Patchwork-Id: 12788940 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08B1DC433FE for ; Tue, 22 Mar 2022 18:35:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238630AbiCVShQ (ORCPT ); Tue, 22 Mar 2022 14:37:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236874AbiCVShO (ORCPT ); Tue, 22 Mar 2022 14:37:14 -0400 Received: from mail-il1-x14a.google.com (mail-il1-x14a.google.com [IPv6:2607:f8b0:4864:20::14a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB7B43CFD3 for ; Tue, 22 Mar 2022 11:35:46 -0700 (PDT) Received: by mail-il1-x14a.google.com with SMTP id h10-20020a92c26a000000b002c845c2b3d3so1530446ild.11 for ; Tue, 22 Mar 2022 11:35:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=tnmr6FcY2JLhce32y9oAbKJR7f3jp9JaOpVAL3BoK3A=; b=GxSnt/O3uM4E7Ryuar3lRQb3ZogNtuTF21itlU478JfimK/CQKTWdC9abGJl5jGsFh vsCpeMIIxraZrqRAwjKKOTB0V//WU8dg4cRVKC5Q0oAggoKE61LbaN2rbGZvkGP8/uOI j74qp5vzLIA/wwHG8BgfrxsjGVbP6uB+Zf/aYbxfEVInJprXmyWl37BtVnmB2T3XX6u1 1rCCQ1bgNVvEq9m2lW4tSlCy3pGPNhFI7/hNOXDvATOYcr4EOtfhnIbMlmth4ZA3l6pq 8WyopLOxPV6FWc3VIk5u2CKXW37WMVKpQ+2nVJy6NA9Y65KSYa++PFSfzbm7x68qpJ47 G89g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=tnmr6FcY2JLhce32y9oAbKJR7f3jp9JaOpVAL3BoK3A=; b=IaZOYuxyazbFcJGwFXfINHdWVssEzgX/9Tcd2icMnxGu/dVHPy3LPvEVvItpSm4v/w Qzjncd4IAGcBMhLUvP5ewHD7g7tlrL28C8ZmUoMJFJ+ntdbGz4wTBB2JdNqSVyq6kwNt Y8aSxjgta0z7TortQb4YLmomds5GK5sTKoS/Syle7D0LofxrnOt852rgWto8yXVwnMgr iQTLNTB5/0lk1cSU0iIlb/z9XsyEr3FB18j7mkdXC5C/62CaX8wLJCTYR7gf0ze6fEMc fbPL6fYt5DUtvGppG3Gcq35CKA+gusMy4rJXpU/vJHnbMzO4Bijly3nsPdEi0EEVO4mv XTYQ== X-Gm-Message-State: AOAM531n8YQfEkeBBO4fiA8jbeML5CvpxrmEGRkP37LGSQ9ENGCygAvY GYLI8eUK4uInm8elikhJRBAGMsw8fJs= X-Google-Smtp-Source: ABdhPJyqOQMpygQKbMQI+YxY6NGJvNzmxA9fxDwQQ/eBULRiqPtajRMzQcxcfqJ1BaMG0pno7t9pgoH7orM= X-Received: from oupton.c.googlers.com ([fda3:e722:ac3:cc00:2b:ff92:c0a8:404]) (user=oupton job=sendgmr) by 2002:a05:6638:3e13:b0:321:446d:2977 with SMTP id co19-20020a0566383e1300b00321446d2977mr5465994jab.178.1647974146089; Tue, 22 Mar 2022 11:35:46 -0700 (PDT) Date: Tue, 22 Mar 2022 18:35:37 +0000 In-Reply-To: <20220322183538.2757758-1-oupton@google.com> Message-Id: <20220322183538.2757758-3-oupton@google.com> Mime-Version: 1.0 References: <20220322183538.2757758-1-oupton@google.com> X-Mailer: git-send-email 2.35.1.894.gb6a874cedc-goog Subject: [PATCH v2 2/3] KVM: arm64: Actually prevent SMC64 SYSTEM_RESET2 from AArch32 From: Oliver Upton To: kvmarm@lists.cs.columbia.edu Cc: kvm@vger.kernel.org, Marc Zyngier , James Morse , Alexandru Elisei , Suzuki K Poulose , linux-arm-kernel@lists.infradead.org, Peter Shier , Ricardo Koller , Reiji Watanabe , Paolo Bonzini , Will Deacon , Oliver Upton Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org The SMCCC does not allow the SMC64 calling convention to be used from AArch32. While KVM checks to see if the calling convention is allowed in PSCI_1_0_FN_PSCI_FEATURES, it does not actually prevent calls to unadvertised PSCI v1.0+ functions. Hoist the check to see if the requested function is allowed into kvm_psci_call(), thereby preventing SMC64 calls from AArch32 for all PSCI versions. Fixes: d43583b890e7 ("KVM: arm64: Expose PSCI SYSTEM_RESET2 call to the guest") Acked-by: Will Deacon Reviewed-by: Reiji Watanabe Signed-off-by: Oliver Upton --- arch/arm64/kvm/psci.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kvm/psci.c b/arch/arm64/kvm/psci.c index cd3ee947485f..d24ccc77500b 100644 --- a/arch/arm64/kvm/psci.c +++ b/arch/arm64/kvm/psci.c @@ -232,10 +232,6 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu) unsigned long val; int ret = 1; - val = kvm_psci_check_allowed_function(vcpu, psci_fn); - if (val) - goto out; - switch (psci_fn) { case PSCI_0_2_FN_PSCI_VERSION: /* @@ -303,7 +299,6 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu) break; } -out: smccc_set_retval(vcpu, val, 0, 0, 0); return ret; } @@ -423,6 +418,15 @@ static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu) */ int kvm_psci_call(struct kvm_vcpu *vcpu) { + u32 psci_fn = smccc_get_function(vcpu); + unsigned long val; + + val = kvm_psci_check_allowed_function(vcpu, psci_fn); + if (val) { + smccc_set_retval(vcpu, val, 0, 0, 0); + return 1; + } + switch (kvm_psci_version(vcpu)) { case KVM_ARM_PSCI_1_1: return kvm_psci_1_x_call(vcpu, 1); From patchwork Tue Mar 22 18:35:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver Upton X-Patchwork-Id: 12788941 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B152C4332F for ; Tue, 22 Mar 2022 18:35:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239499AbiCVShR (ORCPT ); Tue, 22 Mar 2022 14:37:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60360 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237871AbiCVShP (ORCPT ); Tue, 22 Mar 2022 14:37:15 -0400 Received: from mail-il1-x149.google.com (mail-il1-x149.google.com [IPv6:2607:f8b0:4864:20::149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B7C613DA7A for ; Tue, 22 Mar 2022 11:35:47 -0700 (PDT) Received: by mail-il1-x149.google.com with SMTP id o17-20020a92c691000000b002c2c04aebe7so9671511ilg.8 for ; Tue, 22 Mar 2022 11:35:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=lGW+qCdwzMwtGGlVg3y2ePu73Q+JTzIqWyWeB9h5azY=; b=Q4h5St4bE4rOW155Wn3EO80R//PDfJqRJZaeS2M2PHHwYAb5zLlzGAVLgI+8KcM5ue vASo5TsEVfEDWKQe/g/0ORUybF8ztFa/MVDOQTAcoaq+H538ch/z0Yxpf5sxOtMhO/mj 1NvKR21tAZKlMkbhpGRqDnpFi0D2OUA2wDtnJwJEzaeaHmJNhVRNzuckM5UlO7U51Ccc YITlUK4lhH8zzVZtT2cDQSglIjKg4ygFpPgqjdjQ65imS+SRIzOc+5z7sPxPB2ce2sdq 735gTDGZlMN8ChNHrTDGsmrGpERbIKbMzkO6tB3B2eNNL7XLUe98wL3O7tuwW3BJpocx qdZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=lGW+qCdwzMwtGGlVg3y2ePu73Q+JTzIqWyWeB9h5azY=; b=ooXIwnblbDe4uxG66DcnUSER/2yn3Bz1P01bOp+f6uZan6cRy/wAwr2ZfhuzkposEY W9n6J/7Vr/Z0jnCbGzyBt+yCvJAv93MhetBJ2AEmrIbjXkUgrvWWYXnDDtYEou+o6KWK EDDKfs5v4vFB+FBvmonFDr1yiAyJT9OqJkPhrsMooWcoCnCRZMq9j9avT6vIqH8g4PVs bII2blV9nez09WOwvt6g838vsA83jL7SYPJwpnT8s0Tww3vYw3Ag+m92MVN8KZtctJyI j2PTrEhrzP5Mp/x7Ib6vP2VRGMFaeTwzZJbWZc5EnB/Nx5FjhZVVBrlUSed7WqhnV3W8 uWlA== X-Gm-Message-State: AOAM53143WJUHJZA4JLiiDRYxYj8MXwotdlfuIpIKYDqA3gJcgDZ65rE O/IY+FpdVIHYiqEuF2RLDOwMol9AxQg= X-Google-Smtp-Source: ABdhPJxYqKXNgdI2Nn0wjD8p/zp8eXY/Rgm3sPEio6NQXm4jTPjyEFh8n9PKO7v2VGbk1KOuPT1TekwRGKE= X-Received: from oupton.c.googlers.com ([fda3:e722:ac3:cc00:2b:ff92:c0a8:404]) (user=oupton job=sendgmr) by 2002:a92:d486:0:b0:2c7:b549:ede7 with SMTP id p6-20020a92d486000000b002c7b549ede7mr12361089ilg.84.1647974147115; Tue, 22 Mar 2022 11:35:47 -0700 (PDT) Date: Tue, 22 Mar 2022 18:35:38 +0000 In-Reply-To: <20220322183538.2757758-1-oupton@google.com> Message-Id: <20220322183538.2757758-4-oupton@google.com> Mime-Version: 1.0 References: <20220322183538.2757758-1-oupton@google.com> X-Mailer: git-send-email 2.35.1.894.gb6a874cedc-goog Subject: [PATCH v2 3/3] KVM: arm64: Drop unneeded minor version check from PSCI v1.x handler From: Oliver Upton To: kvmarm@lists.cs.columbia.edu Cc: kvm@vger.kernel.org, Marc Zyngier , James Morse , Alexandru Elisei , Suzuki K Poulose , linux-arm-kernel@lists.infradead.org, Peter Shier , Ricardo Koller , Reiji Watanabe , Paolo Bonzini , Will Deacon , Oliver Upton Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org We already sanitize the guest's PSCI version when it is being written by userspace, rejecting unsupported version numbers. Additionally, the 'minor' parameter to kvm_psci_1_x_call() is a constant known at compile time for all callsites. Though it is benign, the additional check against the PSCI kvm_psci_1_x_call() is unnecessary and likely to be missed the next time KVM raises its maximum PSCI version. Drop the check altogether and rely on sanitization when the PSCI version is set by userspace. No functional change intended. Signed-off-by: Oliver Upton --- arch/arm64/kvm/psci.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/arch/arm64/kvm/psci.c b/arch/arm64/kvm/psci.c index d24ccc77500b..0b1b588f1f9b 100644 --- a/arch/arm64/kvm/psci.c +++ b/arch/arm64/kvm/psci.c @@ -310,9 +310,6 @@ static int kvm_psci_1_x_call(struct kvm_vcpu *vcpu, u32 minor) unsigned long val; int ret = 1; - if (minor > 1) - return -EINVAL; - switch(psci_fn) { case PSCI_0_2_FN_PSCI_VERSION: val = minor == 0 ? KVM_ARM_PSCI_1_0 : KVM_ARM_PSCI_1_1;