Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp2883328rwb; Mon, 15 Aug 2022 13:15:31 -0700 (PDT) X-Google-Smtp-Source: AA6agR7xhk/CRiG374H+tYDpljXBR1zh+f1EwQivHVcTY99Zlu0eyEDNchBrHDKLmuq7EsqgEhzn X-Received: by 2002:a17:907:970e:b0:731:4fb4:5f7b with SMTP id jg14-20020a170907970e00b007314fb45f7bmr11264486ejc.556.1660594531587; Mon, 15 Aug 2022 13:15:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660594531; cv=none; d=google.com; s=arc-20160816; b=e2ZfMHrD2DfJbFsCEetAIam2zBWYm76nOmdsFzABeTrY7TCWmDosvlgzzmDpL7idhq b2PdyWDPTABiVfPJvuaNqQoPelwytyasVC9Ljp4t2LyKTCABDtFJAQZvsfn1fu2WHJZh epBjWHNN7NQv3ttEId+JDTpg0A2wjO++thb1DeHU23ED/b7OxbV1T9nIALHxNrYq2aCl u/cB4S3W3R+s5yYIahRHRkgz38JeHANbjNuv6UpuBBHofA9Nb2mVazLaIdXzsPFlevUU 1+ll03fvuDApOYDb7irNvCyPIvK4eZv+3jueIRRCS8NCLOQ3/kjW5A7H47w89vwEWyZk o8Zg== 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=doA2MdfIPi7O81mzB96IYFpq58ahG17EGNUwDevKgt4=; b=fdJUe5JZY/bKBfuM+cZIJcEmxtXFq5BYwOiJrXI0w2biOKttzxps78HRqgzVjzjFgY mJmFdBKQE9oJ605COv06qLaHICIEKKkg+lMc28Ugjj8fNOxc4yD2L1uGbBaND97HHV+4 kpXJZhXEO/Kn1mUZWkjbCt+miuYTRYTRZfmPUaKXNbJOlEjiLclUIMwEaUPm6GSCnTMD 29N/HVLbA4o1d6v6jNz9KlEm03NLgmsC90f42wpuqawpS3zvaNW891Aiw3JcDm8SAqGS Pv0VvovMiadZLBWUJmdx5FCPkOoq3r8dmWN/W5+CO4xI+xvGr0iLk1+2F5VlmtobUYml 0ovg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vY0Sdzjn; 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 o2-20020a056402438200b0043be773a90dsi9937517edc.45.2022.08.15.13.15.05; Mon, 15 Aug 2022 13:15:31 -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=vY0Sdzjn; 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 S233161AbiHOSQJ (ORCPT + 99 others); Mon, 15 Aug 2022 14:16:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233419AbiHOSO6 (ORCPT ); Mon, 15 Aug 2022 14:14:58 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 58E642A24C; Mon, 15 Aug 2022 11:14:19 -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 DCAEB6129B; Mon, 15 Aug 2022 18:14:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E2DE3C433D7; Mon, 15 Aug 2022 18:14:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660587258; bh=yOLQpb04Z2qZOjNaMXyuNv0mOFhFVD78+CwPstLEaf4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vY0SdzjnnFdx4wTcpXYfE18ItYMec/YxaSXTX4yhHkyD+7VUlvk9FAWZQOcRuzjUi /niZBfbaf8jbJLJZ0VFHO12W7z47ZUxoV+5mzoBuQIxCi49VS446NuZaXwawbunp5B FV+tsvTO3Ll9wg89lAXXTH6sjKr/TcArrgPkpi9U= 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.15 028/779] KVM: x86: Mark TSS busy during LTR emulation _after_ all fault checks Date: Mon, 15 Aug 2022 19:54:32 +0200 Message-Id: <20220815180338.422616758@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220815180337.130757997@linuxfoundation.org> References: <20220815180337.130757997@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 @@ -1669,16 +1669,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) @@ -1719,6 +1709,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)