Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp2518237pxb; Mon, 19 Apr 2021 07:35:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmcVgjBm7QZCGdWgM1LJExK9Rt9heiOYKxC3X0D6b6mMqbHzv2+GVkRrucj57Vu6ZEV4OO X-Received: by 2002:a17:90a:510d:: with SMTP id t13mr4635458pjh.97.1618842938277; Mon, 19 Apr 2021 07:35:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618842938; cv=none; d=google.com; s=arc-20160816; b=j6SAOA7IiGIrMqkBj2Fc4YBPZ1QXg09MhMmJF4mvtsAqzM6j3pB/vAlz2juESy3zhT Vgk23OLuQEcfyuZRnzLTcCBTzWNsoHfRC+/q9i1XwBf3zjSgnJ+tBWf9Kpej1/j5+fHZ 98d+UXzW5IVz6O0RbnpZcwqcip/9VCN3SPcN7k2fonhSqMs1h96A/GSygpooM/jfFGuk CNbXoRtvuNKcfTsyjirPCGM/dfuFXSDGKlSi8GxEVZ5ow1KJp5c+fdk96ogSyj8Y/OQo znzRwwL1jd7xKhhJsj9z5wmFw0X2jn42cSwAIM4xvTRKnfFdT2CpHDJplCAPaPo/HYCN kvLA== 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=5j8jqZy7U5+fxi2yEJtP/80MuP0UlvVKa5JySEaryL0=; b=b3TqbN48SDZqwctNLSOBueZAFCssa2ZCPOnexrk1kg7IeZcuZRixQABFbjluKxwdVh MTaAmCe5/iG8keQPf5azvub1Y8HdaSanXtiTWMm8MT1VrPRc9G4ShnxQTVLN6PBa1l0W juSV89r/aAButIw579deDdFXMCmagwky747SzBwq88fpz9sJeMBPRuqPMifKPnsAeOBG CHOaQF9rmeHhV60PqJH2b4V0fRKTCQJhVxYRvgDKhrxBNpoACJ5FY2TLaGxP9QSnI3H3 MpQ8JOcfcLonC5KZkWr01ACEgmglpDku0FD4XbiBaZfeUSYYPr8QUvSBpXP1KTW0S0rF +M1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="wQW/bkwg"; 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=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a17si16936258plm.304.2021.04.19.07.35.25; Mon, 19 Apr 2021 07:35:38 -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=@linuxfoundation.org header.s=korg header.b="wQW/bkwg"; 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=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240377AbhDSNRD (ORCPT + 99 others); Mon, 19 Apr 2021 09:17:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:45438 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240005AbhDSNN6 (ORCPT ); Mon, 19 Apr 2021 09:13:58 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A7F7D613C5; Mon, 19 Apr 2021 13:12:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1618837948; bh=56budua+6takyPNt7djZvnt25kiRnmy34gmsgwEXX/E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wQW/bkwggCXFVi4iLopFDA9UbCaEpWZLUgU+OIni8hkLaQSe9wV4mX5Id0zdPDoMs rhYtjrLL0AU9+ZqP+ekuoelqOc1/kTsHHJwd0m6ABQy4wAItXicC3Wpgg7TwMf5kbL HRl07HVJalUzIEEfQBzrLHbW6wmF78i+hB0Ekj9s= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Reiji Watanabe , Jim Mattson , Paolo Bonzini , Sasha Levin Subject: [PATCH 5.11 112/122] KVM: VMX: Dont use vcpu->run->internal.ndata as an array index Date: Mon, 19 Apr 2021 15:06:32 +0200 Message-Id: <20210419130533.974872558@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210419130530.166331793@linuxfoundation.org> References: <20210419130530.166331793@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Reiji Watanabe [ Upstream commit 04c4f2ee3f68c9a4bf1653d15f1a9a435ae33f7a ] __vmx_handle_exit() uses vcpu->run->internal.ndata as an index for an array access. Since vcpu->run is (can be) mapped to a user address space with a writer permission, the 'ndata' could be updated by the user process at anytime (the user process can set it to outside the bounds of the array). So, it is not safe that __vmx_handle_exit() uses the 'ndata' that way. Fixes: 1aa561b1a4c0 ("kvm: x86: Add "last CPU" to some KVM_EXIT information") Signed-off-by: Reiji Watanabe Reviewed-by: Jim Mattson Message-Id: <20210413154739.490299-1-reijiw@google.com> Cc: stable@vger.kernel.org Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kvm/vmx/vmx.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 880a2617820c..95f836fbceb2 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -5986,19 +5986,19 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) exit_reason.basic != EXIT_REASON_PML_FULL && exit_reason.basic != EXIT_REASON_APIC_ACCESS && exit_reason.basic != EXIT_REASON_TASK_SWITCH)) { + int ndata = 3; + vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_DELIVERY_EV; - vcpu->run->internal.ndata = 3; vcpu->run->internal.data[0] = vectoring_info; vcpu->run->internal.data[1] = exit_reason.full; vcpu->run->internal.data[2] = vcpu->arch.exit_qualification; if (exit_reason.basic == EXIT_REASON_EPT_MISCONFIG) { - vcpu->run->internal.ndata++; - vcpu->run->internal.data[3] = + vcpu->run->internal.data[ndata++] = vmcs_read64(GUEST_PHYSICAL_ADDRESS); } - vcpu->run->internal.data[vcpu->run->internal.ndata++] = - vcpu->arch.last_vmentry_cpu; + vcpu->run->internal.data[ndata++] = vcpu->arch.last_vmentry_cpu; + vcpu->run->internal.ndata = ndata; return 0; } -- 2.30.2