Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp441135rwb; Fri, 2 Sep 2022 17:31:22 -0700 (PDT) X-Google-Smtp-Source: AA6agR7benaIV+SNX82y33BinheC1jC2r8tlgrzhpZZACgjJ8DW/GOMvEPoV+rZpNeFRYGOJP+s5 X-Received: by 2002:a17:907:6d03:b0:741:9b9d:ad8b with SMTP id sa3-20020a1709076d0300b007419b9dad8bmr17730539ejc.197.1662165082131; Fri, 02 Sep 2022 17:31:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662165082; cv=none; d=google.com; s=arc-20160816; b=ax6oJWbplpmWsm98J+z31AhENcFZv3BKcDPBkMuXERbsb6e9juhzJLfD4jWrK4j0MW 7onzknw657JgtsJIPU89j2MgaVmJb2nTYPCaKKY3XxO1hkAts4XLdAdAdkY1yNXrgMjj vgmewcZnSxOz3UHyQIVKln832RrmJVRGrBst3QspCBHAUoUz5suG7puNoFBi7J4T9T8A BCQKYKZd+5FoPQHARws7jqcywL/9ZI0bH/tETsWl8p5IqHJ4VXW6U1KIa8iYATAwrgbl FO8ANTaWbpS6aKY4749A0/vI28VCNIjeo649guQFnJB0AFKNlqnJhy0eNRoYd+cud4lU lHZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=mbHk1vkw63VQJwpK5v7OYSHF5DuBwhkzqDp695B1D9E=; b=h7KSJ5bD5mSMgRt67km3OAm2iBaMXKp0PnKa5GP3vnW0A6vM6q1uIH0GavkHm+XVIB BTA3MtCPw0sVcnp1TqsaPwwaGDcrcfLUAPuhDLXRetic+5vxGX1rr59KeQ3bba3FDR10 o9sAm9hYmzrSyoTSTmep/kyojallzX9bHjZ8R997mbZxesUwA8Z+eQ6zTw+m5nd+wGtO CIxxGGWpavLEoYACAWQf31fMMJ9FhKtwpsqSz8jRohlWGE/CpPRLf/YYefSZw/kxfiPN fda3AhmRoPqLdzd+JNumfU7n0UmVdzLlC9ZyO9MPW+y3DgZHEbr7wIdZxShuHIBGCcXk vBMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="Am/ejqk+"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kx23-20020a170907775700b0072b3305dbbesi2247005ejc.520.2022.09.02.17.30.55; Fri, 02 Sep 2022 17:31:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="Am/ejqk+"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231911AbiICAYk (ORCPT + 99 others); Fri, 2 Sep 2022 20:24:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231621AbiICAXm (ORCPT ); Fri, 2 Sep 2022 20:23:42 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF87E10F94D for ; Fri, 2 Sep 2022 17:23:34 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id f3-20020a056902038300b00696588a0e87so2790235ybs.3 for ; Fri, 02 Sep 2022 17:23:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date; bh=mbHk1vkw63VQJwpK5v7OYSHF5DuBwhkzqDp695B1D9E=; b=Am/ejqk+FXEoTdqA6s2ljphu1EM0595EUQYpOwC6lvm+KgrWBOIESYOdvlI13rVCPZ Vyi+6UUz2mfrA2rVOJSNVOKI3qA+J8gMPcEaeBitIxso8rJXNGznyswNq1LAm/wsV10n MSKiH3Q0nAksWQ2VqG2wE58WzWg88snpUMaDHItO4Egu8fVBUhx5nNuxWMUliI6+jOiI MBPOk1DctspVhiTN9Nbz9xYS/nO7y+mw9NG6cE/zu2LF4j0nWjFPuKm29jlhEKJqdkqo qAORYwnGOGgK7alkjsAgIaJ28v1W1M0g1xa6oVtijvyRmMWxTm3jxfdwsyPJZHw7eyP9 BIYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date; bh=mbHk1vkw63VQJwpK5v7OYSHF5DuBwhkzqDp695B1D9E=; b=aRoX/PZY97FTHmGsP1PWLBeUUo23N7N7gYVkZ9RE8VBIaorHXexJ41cea07NybS9Wj ZgMVrB44rAgr9VLeLdNnAWfjcFTCTDIyE+MtZY7E1h+/Zy40b4CL6boRAcbIwD75geRD q5GX6tc/RoJri0TMSwixn+35JmkHYiBA7RaSWI5GYuPqBRJbLqFPRz2XgYnEmAa067bF shuyyYIoQ6jZrn07cODbxsk1qvoGQNspvMqJQKQLWhQL3E5cym+5mOg49K1IKREePJn5 grqpYue0kbm2T//b+VqPHSSJkdtkjyMil90wGSWkLeZitaWdH0VSAZvCss4iW+EHxO4l jcCQ== X-Gm-Message-State: ACgBeo18m/1ssYU804y9CBlwI28zPOozfa8g8G0uBTbZum+Dy8m2i6JE eloQTX+9h5MYRPQjzaLnOt8mcuqbhtw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a5b:7c6:0:b0:6a7:509e:f13e with SMTP id t6-20020a5b07c6000000b006a7509ef13emr1382020ybq.302.1662164613075; Fri, 02 Sep 2022 17:23:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Sat, 3 Sep 2022 00:22:51 +0000 In-Reply-To: <20220903002254.2411750-1-seanjc@google.com> Mime-Version: 1.0 References: <20220903002254.2411750-1-seanjc@google.com> X-Mailer: git-send-email 2.37.2.789.g6183377224-goog Message-ID: <20220903002254.2411750-21-seanjc@google.com> Subject: [PATCH v2 20/23] KVM: SVM: Require logical ID to be power-of-2 for AVIC entry From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Suravee Suthikulpanit , Maxim Levitsky , Li RongQing Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Do not modify AVIC's logical ID table if the logical ID portion of the LDR is not a power-of-2, i.e. if the LDR has multiple bits set. Taking only the first bit means that KVM will fail to match MDAs that intersect with "higher" bits in the "ID" The "ID" acts as a bitmap, but is referred to as an ID because theres an implicit, unenforced "requirement" that software only set one bit. This edge case is arguably out-of-spec behavior, but KVM cleanly handles it in all other cases, e.g. the optimized logical map (and AVIC!) is also disabled in this scenario. Refactor the code to consolidate the checks, and so that the code looks more like avic_kick_target_vcpus_fast(). Fixes: 18f40c53e10f ("svm: Add VMEXIT handlers for AVIC") Cc: Suravee Suthikulpanit Cc: Maxim Levitsky Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/avic.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/arch/x86/kvm/svm/avic.c b/arch/x86/kvm/svm/avic.c index 894d0afd761b..e34b9baa9ee0 100644 --- a/arch/x86/kvm/svm/avic.c +++ b/arch/x86/kvm/svm/avic.c @@ -540,26 +540,26 @@ unsigned long avic_vcpu_get_apicv_inhibit_reasons(struct kvm_vcpu *vcpu) static u32 *avic_get_logical_id_entry(struct kvm_vcpu *vcpu, u32 ldr, bool flat) { struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm); - int index; u32 *logical_apic_id_table; - int dlid = GET_APIC_LOGICAL_ID(ldr); + u32 cluster, index; - if (!dlid) - return NULL; + ldr = GET_APIC_LOGICAL_ID(ldr); - if (flat) { /* flat */ - index = ffs(dlid) - 1; - if (index > 7) + if (flat) { + cluster = 0; + } else { + cluster = (ldr >> 4) << 2; + if (cluster >= 0xf) return NULL; - } else { /* cluster */ - int cluster = (dlid & 0xf0) >> 4; - int apic = ffs(dlid & 0x0f) - 1; - - if ((apic < 0) || (apic > 7) || - (cluster >= 0xf)) - return NULL; - index = (cluster << 2) + apic; + ldr &= 0xf; } + if (!ldr || !is_power_of_2(ldr)) + return NULL; + + index = __ffs(ldr); + if (WARN_ON_ONCE(index > 7)) + return NULL; + index += (cluster << 2); logical_apic_id_table = (u32 *) page_address(kvm_svm->avic_logical_id_table_page); -- 2.37.2.789.g6183377224-goog