Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3056902ybt; Mon, 29 Jun 2020 14:08:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5afCtuqdUB9iV1xGwnWAwpr4UNKkqJw6b5BW1fejwseiIZxarc6jyz05pyqTe3I67UBlp X-Received: by 2002:a50:f05d:: with SMTP id u29mr20288159edl.137.1593464896998; Mon, 29 Jun 2020 14:08:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593464896; cv=none; d=google.com; s=arc-20160816; b=WOuh6TilOYhs3WWTzayZSUJzC0b5V/pAU+gvgL0qTkbDLSF+C7dz0efGieF9JR3Rpw PIzPLHPWQkT/QBUYHvGOuprh7dRvu9vwHvDJtpFhIy1mxG2EYn0KfJDXl9/Z1boaK9hM ENgh0vWaXpYIfsVIC5rz+9CFBiaCtLeisgoamcrRw2XuPARKppbUjtk+MQCqA8CWMVzd I9URJKUMYajc0Q/00kj+UbBlOvAnBQyY94/xZvMtKH8c1etW3btlGnT9hKgc7Uvwvh/V 6mWD3gmGdLHM7ltBIG2Ha6/ozaqPGS+Rdb2FltLIOHRYwaU+EgCmitC7bYRO+uAJ0QDb wcdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=ZaXV5svWea/pmwM7hzMGgBPV83SPmfUEW0Ej1s60jmc=; b=iy4iL4BmtG6PdHXF7Mte6JELH4HRvoje7HuPANLHOfyIYtM4lnRG/vVHBH0VslCYED /pi+3A73NC4yW+yQ37gOqx/1EpGVz2WiByN4IGEK7ev7l0UNmMvfTZSBQNkrvt3++NSR HpY93iIkamUIh16pN1u+VKtIfilqfOBzjfYC2NZgM+bCp18y05t+Uiek+hxhahFteAwn 2vdbeI8JNBZylSFRjNbYtQ2o9LLJCs8goTWi0BMi7muWtHce61qJVoBpmC/jwtZ3QYJt lV6BQjzGDrlesSMe8u0pQ96HoX1JLBga4aggNIOpmP7QCIEPcY6X3kl8InCsdxhcxDOW KPiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=iEytamTk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dg17si363147edb.606.2020.06.29.14.07.53; Mon, 29 Jun 2020 14:08:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=iEytamTk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390269AbgF2VFQ (ORCPT + 99 others); Mon, 29 Jun 2020 17:05:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43354 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731102AbgF2TMo (ORCPT ); Mon, 29 Jun 2020 15:12:44 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E02BEC008611; Mon, 29 Jun 2020 03:26:41 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id b16so7696154pfi.13; Mon, 29 Jun 2020 03:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=ZaXV5svWea/pmwM7hzMGgBPV83SPmfUEW0Ej1s60jmc=; b=iEytamTkwbkYbE5TzWpiBqob8St2uHARoRQkWmGEvGjGM/sM00TS1/InbzaCXu8Mb9 40VNJ3jWWKf9OKd7Jxu+jPDaf0I+bUWkWe+NFnofOk6kt7cs7eYv0LuY6ddVGj1Lgs8X JG2Ts5p49DPgfZwCIS7Z6q877zeCpSInQkgsN7iBxHuxeqwkMmALV6JMnoJ7313+g6j1 EEsZMBPM9CMTZ4ZnBeJMMIB1sojjIOsh3jHBRsHGRZH6Jlc3lhSnQtyrY8mYqQT8Vw/i pS8oP1mH7MtGwk+lm5R63oIERNZoYwRalDxKTq4VRYXpzkVpTsJl23SWnh+qA6gvORk6 DmvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=ZaXV5svWea/pmwM7hzMGgBPV83SPmfUEW0Ej1s60jmc=; b=YOD2s1tDZd1e8se2Em8K28Wv3CeHAufN5LvTDWprQqKEpM6oko5Fvx4fqnM8CwsxSK ZGCgvDZxdIj65vF7inTib1OY4jYKlDUbOzWUsIx6VA0DM9G34sEcBU8Tnh81kWPrB19Y vzg9S+cp0+6zlV8uq8FUQnHEvZ3aBM1tEfjVQ5DKPNKtx66xkicrdNjboGM8aIYESnQ7 ZeeMggq5ewf2QlqelWxaPNldSlUDe3Ueq5jjius1A5gOmT+ywL7W8F71CVn/L0oUnoUL wXWiubmQUyZyyuEC+VpomtSS62jayZX1FH8MD/chopQEX2pc5+2bBneoEAR019IIYg3Q gXkQ== X-Gm-Message-State: AOAM532bpN27d3+joLNHUJikUMdpqWQnjoklrHn6KyLRUGtiSBzsQsGB YxrZg3Z+oXR1hC1hHrR/jrsyDDkg X-Received: by 2002:a63:5863:: with SMTP id i35mr7436682pgm.390.1593426401185; Mon, 29 Jun 2020 03:26:41 -0700 (PDT) Received: from localhost.localdomain ([103.7.29.6]) by smtp.googlemail.com with ESMTPSA id 22sm15400181pfx.94.2020.06.29.03.26.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Jun 2020 03:26:40 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel Subject: [PATCH] KVM: X86: Fix async pf caused null-ptr-deref Date: Mon, 29 Jun 2020 18:26:31 +0800 Message-Id: <1593426391-8231-1-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wanpeng Li Syzbot reported that: CPU: 1 PID: 6780 Comm: syz-executor153 Not tainted 5.7.0-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 RIP: 0010:__apic_accept_irq+0x46/0xb80 Call Trace: kvm_arch_async_page_present+0x7de/0x9e0 kvm_check_async_pf_completion+0x18d/0x400 kvm_arch_vcpu_ioctl_run+0x18bf/0x69f0 kvm_vcpu_ioctl+0x46a/0xe20 ksys_ioctl+0x11a/0x180 __x64_sys_ioctl+0x6f/0xb0 do_syscall_64+0xf6/0x7d0 entry_SYSCALL_64_after_hwframe+0x49/0xb3 The testcase enables APF mechanism in MSR_KVM_ASYNC_PF_EN with ASYNC_PF_INT enabled w/o setting MSR_KVM_ASYNC_PF_INT before, what's worse, interrupt based APF 'page ready' event delivery depends on in kernel lapic, however, we didn't bail out when lapic is not in kernel during guest setting MSR_KVM_ASYNC_PF_EN which causes the null-ptr-deref in host later. This patch fixes it. Reported-by: syzbot+1bf777dfdde86d64b89b@syzkaller.appspotmail.com Fixes: 2635b5c4a0 (KVM: x86: interrupt based APF 'page ready' event delivery) Signed-off-by: Wanpeng Li --- arch/x86/kvm/x86.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 00c88c2..1c0b4f5 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2693,6 +2693,9 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data) if (data & 0x30) return 1; + if (!lapic_in_kernel(vcpu)) + return 1; + vcpu->arch.apf.msr_en_val = data; if (!kvm_pv_async_pf_enabled(vcpu)) { -- 2.7.4