Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp3022119rwb; Mon, 15 Aug 2022 16:19:35 -0700 (PDT) X-Google-Smtp-Source: AA6agR6POsaoHshna0QatQrRTnwClw+rXpJdwWpf6yBi5orcqruxRsS9cJVK4HCgQxukgUrMOReR X-Received: by 2002:a17:907:2ceb:b0:730:e0ce:34f1 with SMTP id hz11-20020a1709072ceb00b00730e0ce34f1mr11427925ejc.293.1660605474619; Mon, 15 Aug 2022 16:17:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660605474; cv=none; d=google.com; s=arc-20160816; b=wVsTM8FJeIcFboXE/pOL7atCPMcCqbXw4DRGui/tT7NvBhjwe+qKbZqrYsB/tUseY2 5ufwnaQGl4/w+2whlXyFLdH8/M8jp1keFWWuQxF+WoxXDxa9AD+TgKwYOH6xJVsqABQn RTQv6KO7jLsRMcysBVE7z0ujWpeMsBcIBnziQBXRKoeZsYAupkPO4FT8CuogZfagESGj VOofjDHC4ISOk6Lbtah4IUaYzW7NrW8ADavSk/eIjo29uBdLUbsyGltPJLOc5Z+C13GZ RM+qoNVAKKlEQ1wnAaofZjRrY0lKiyvHUmNy6vyAPN9eTccwf2gmN56ncHMLPxetvo9q hD4g== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8KDlCm4AtPbMEqyFUagZoH3YU5Sas7olq2JuIJ8mHYo=; b=0qGwL0+dA0bHOPHIYhwZBth9qfokMBujOdc4rtQOlHYwbl4zNlcvjpKJSfw8c/ASN4 biunHKs87JneGZCPRy+TmTm1Rb0ZnddNTPM8F2cw8VQd4MzG5poOIA0oNFCK0sspYbo0 l4BaFbKZN/r8EUV3oFPW2HYhPAX8J+XPyn51xao0jEH/gfoylYs/dhLLlb2P6xt56t6d EHwF6jX+jhHbRh8/cy3k+rE11kp7gnoy9o+biydDjSloi/4NGxOPW0Gj2g6repekLFH0 FKUOFpPiR3tMRvFif7R8HgxcbpNhf2M1hPPN6+YRhPkJDvtO+K/eSzX3D7rf9NyU/PHP MCfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="SEx/UWQg"; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w18-20020a056402269200b0043d68d2cf50si9306809edd.77.2022.08.15.16.17.28; Mon, 15 Aug 2022 16:17:54 -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=@linuxfoundation.org header.s=korg header.b="SEx/UWQg"; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347990AbiHOVyA (ORCPT + 99 others); Mon, 15 Aug 2022 17:54:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42300 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350462AbiHOVvX (ORCPT ); Mon, 15 Aug 2022 17:51:23 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50E36105230; Mon, 15 Aug 2022 12:32:38 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 2C81D60FBE; Mon, 15 Aug 2022 19:32:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2812CC433C1; Mon, 15 Aug 2022 19:32:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660591957; bh=0qhytQhAGsmyQiX8PjVBdYkViWXICbwq786/9Rnsrzk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SEx/UWQgyva4tIR4nv9zgCB2JR6tdaoKmIlMjJJQKXP8mq/B7oR0S2g9IH59xaTGR 2CVJnB48H9izbRAl3tgoqfjsfoRdVMrs5dNQvSq3zgPqQY6ZPmFsyA0XXZvfl+gnjB umPPARdodkdz5w6gkVjhHBr3ph+qKfBHsEpC2chY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, syzbot+760a73552f47a8cd0fd9@syzkaller.appspotmail.com, Tetsuo Handa , Hou Wenlong , Sean Christopherson , Maxim Levitsky Subject: [PATCH 5.19 0036/1157] KVM: x86: Mark TSS busy during LTR emulation _after_ all fault checks Date: Mon, 15 Aug 2022 19:49:52 +0200 Message-Id: <20220815180440.879143269@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220815180439.416659447@linuxfoundation.org> References: <20220815180439.416659447@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 From: Sean Christopherson commit ec6e4d863258d4bfb36d48d5e3ef68140234d688 upstream. Wait to mark the TSS as busy during LTR emulation until after all fault checks for the LTR have passed. Specifically, don't mark the TSS busy if the new TSS base is non-canonical. Opportunistically drop the one-off !seg_desc.PRESENT check for TR as the only reason for the early check was to avoid marking a !PRESENT TSS as busy, i.e. the common !PRESENT is now done before setting the busy bit. Fixes: e37a75a13cda ("KVM: x86: Emulator ignores LDTR/TR extended base on LLDT/LTR") Reported-by: syzbot+760a73552f47a8cd0fd9@syzkaller.appspotmail.com Cc: stable@vger.kernel.org Cc: Tetsuo Handa Cc: Hou Wenlong Signed-off-by: Sean Christopherson Reviewed-by: Maxim Levitsky Link: https://lore.kernel.org/r/20220711232750.1092012-2-seanjc@google.com Signed-off-by: Sean Christopherson Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/emulate.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -1687,16 +1687,6 @@ static int __load_segment_descriptor(str case VCPU_SREG_TR: if (seg_desc.s || (seg_desc.type != 1 && seg_desc.type != 9)) goto exception; - if (!seg_desc.p) { - err_vec = NP_VECTOR; - goto exception; - } - old_desc = seg_desc; - seg_desc.type |= 2; /* busy */ - ret = ctxt->ops->cmpxchg_emulated(ctxt, desc_addr, &old_desc, &seg_desc, - sizeof(seg_desc), &ctxt->exception); - if (ret != X86EMUL_CONTINUE) - return ret; break; case VCPU_SREG_LDTR: if (seg_desc.s || seg_desc.type != 2) @@ -1737,6 +1727,15 @@ static int __load_segment_descriptor(str ((u64)base3 << 32), ctxt)) return emulate_gp(ctxt, 0); } + + if (seg == VCPU_SREG_TR) { + old_desc = seg_desc; + seg_desc.type |= 2; /* busy */ + ret = ctxt->ops->cmpxchg_emulated(ctxt, desc_addr, &old_desc, &seg_desc, + sizeof(seg_desc), &ctxt->exception); + if (ret != X86EMUL_CONTINUE) + return ret; + } load: ctxt->ops->set_segment(ctxt, selector, &seg_desc, base3, seg); if (desc)