Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4464375ybz; Tue, 28 Apr 2020 11:44:19 -0700 (PDT) X-Google-Smtp-Source: APiQypKxO1FvdT4UbL1sdzcSLHYPUGZaXFOjAwT8Rn8d2az9nfn2pGAWPG6gyDJeCjcC9sYjrPtB X-Received: by 2002:a05:6402:1587:: with SMTP id c7mr22591907edv.61.1588099459761; Tue, 28 Apr 2020 11:44:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588099459; cv=none; d=google.com; s=arc-20160816; b=DswpuvVIRXizzZMHA6GitBObyPGU5EPQIqwLxfKtRdqll1caL+U3gFX4+kWHri8OmK zbsbbmzYQY7F4OQIaHtR5ewCpCTnINc4AFrORR4LycBScgL+88Oa4GaXgrlqoTFKRkaC Q3K3uj8N+9xoF2FSjjLaKZu+gZWUmMhAcVIXqo29LT8WB/ZiVcByIRUORLdLp/fNoapf 2fNVEyeWlwGLk4or9NiaUoe1MjfCnhM1QypuaYV3Wz8PfpADeoIqWjPpnkl0tipNGhHq dKBaOrn9MY7FwsJKuHhaoGw51fWnqh1c+brL+Sk75cTwQHHHlP9Jon2XQceGnwHcVlvK 73JQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hVC/gzOvsFU9GdoqakYmOa0Pda6/eOSvA+iUZimbT0o=; b=yjBl6CzAp1E8XUULIHoHhQzaXxPBp1eMFpZzG8V7tEDZgngnCM3uGibjSmk1AE76iy BghFurKzqVsWBxn/WGJuwT5N9VqpBUg5ASUf+4/MGXIjRSBxMPDeRrur2ab1pQRfV9L9 0aMOduygQUVs5KHSx/F66MG87F/Lx7NHaDrHdydmzZdHmasf+5h+jMp5NWaPLxk1G34c O6RcdqV4Y3qq7fEEOAVn0cmaKbOd8ku11aCTfqKidxTp8CqsXEtnKwje1pnno8THzO7V KpV+8XWQhDa3YhH7vOgrDTf+Nu2iAeh9N5qkKaVl94a+qRnxXAuwBj/BWgomQJNipols nSNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2hhMOtHO; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j9si2386246edn.415.2020.04.28.11.43.56; Tue, 28 Apr 2020 11:44:19 -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=@kernel.org header.s=default header.b=2hhMOtHO; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731135AbgD1Sml (ORCPT + 99 others); Tue, 28 Apr 2020 14:42:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:34770 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728859AbgD1Smj (ORCPT ); Tue, 28 Apr 2020 14:42:39 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A984A2085B; Tue, 28 Apr 2020 18:42:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588099359; bh=+ccdu+tJ5axG2Gl2Ph/IWpjOqYm3KQqbdCwYjChYxlk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2hhMOtHO6eY6YI48pE2baLeoaTEkIoDqgf3Tw2Nig2v4D8ZYsA1KDmcC48FUgquIn spST2tQGZuUlokQVIqJbXJHiF4hoF/aBGgHLW4R+AymurYZgc8DZ1NZHPtCORWJ+39 a8FtWfkR1EJ0Q/QpEa17Jj6E8RQ/XdjQYrILA1wA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, syzbot+d889b59b2bb87d4047a2@syzkaller.appspotmail.com, Sean Christopherson , Cornelia Huck , Paolo Bonzini Subject: [PATCH 5.4 118/168] KVM: Check validity of resolved slot when searching memslots Date: Tue, 28 Apr 2020 20:24:52 +0200 Message-Id: <20200428182247.420344060@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200428182231.704304409@linuxfoundation.org> References: <20200428182231.704304409@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sean Christopherson commit b6467ab142b708dd076f6186ca274f14af379c72 upstream. Check that the resolved slot (somewhat confusingly named 'start') is a valid/allocated slot before doing the final comparison to see if the specified gfn resides in the associated slot. The resolved slot can be invalid if the binary search loop terminated because the search index was incremented beyond the number of used slots. This bug has existed since the binary search algorithm was introduced, but went unnoticed because KVM statically allocated memory for the max number of slots, i.e. the access would only be truly out-of-bounds if all possible slots were allocated and the specified gfn was less than the base of the lowest memslot. Commit 36947254e5f98 ("KVM: Dynamically size memslot array based on number of used slots") eliminated the "all possible slots allocated" condition and made the bug embarrasingly easy to hit. Fixes: 9c1a5d38780e6 ("kvm: optimize GFN to memslot lookup with large slots amount") Reported-by: syzbot+d889b59b2bb87d4047a2@syzkaller.appspotmail.com Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson Message-Id: <20200408064059.8957-2-sean.j.christopherson@intel.com> Reviewed-by: Cornelia Huck Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- include/linux/kvm_host.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1027,7 +1027,7 @@ search_memslots(struct kvm_memslots *slo start = slot + 1; } - if (gfn >= memslots[start].base_gfn && + if (start < slots->used_slots && gfn >= memslots[start].base_gfn && gfn < memslots[start].base_gfn + memslots[start].npages) { atomic_set(&slots->lru_slot, start); return &memslots[start];