Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp670452ybz; Fri, 1 May 2020 06:32:41 -0700 (PDT) X-Google-Smtp-Source: APiQypK1szaBDC0H2jUecuA10jAZ7Jx/P7SWjFeLvIh1Pbxt/PEKPBEATbHUMtdIIzs2NY2TDL22 X-Received: by 2002:a17:906:90cc:: with SMTP id v12mr3265003ejw.211.1588339961619; Fri, 01 May 2020 06:32:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588339961; cv=none; d=google.com; s=arc-20160816; b=bmNjB9nHu5r1Q1GH2Ikkit1j4wZ92m1hZFJ7KcvLO0jBwXjjMcqSanFNqWiW81dyFB rcRVXcgwOKZLgHQNBwKhzaUc+MMYEkOJqYIiwnp7b397jxhGexQrAobqy2bl/6v8uJX7 9zU1mmKhULdF1rlixn6kVuYslj9mZUdvo2i0/dQzLtFuPCoI6xq6dYra305kabQn31WH QLObPlNKXTYlQuenBO/n32/rSR9+lsulbxxsgUpBqNeBZollgl9FIeKNey38VKe8fR9p IZhgD3th7Vr99XMm+xbpINHFSm3zqbzBJLcrrfLbyAHHP7SzJHIOfANnLk4fB30znTKk nV1A== 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=GwweZTy/umAMbvfxHy3pLqC710JHZgbg9lrOV4ftbb0=; b=0OERajjQMF235sGIF8YRMh234o39gHCyf78C0p9lKGwyiEOTw1SygDoCL/qmTE9BGb x8p5A3vLt+W1WOwYgCW6gZk1g8NRs6l8lBi/KMHsgqgx4t+f0JeYmIIhj0mfJvun87EN 827k+FxDcXv/ugxswurvWWNQ3tPr9n81c9sB9IoY8ROp5NwMt1i49g/DvDm7rT3o8aJs nFMjc56qMPuPuLidWtJyfGjVM0L3mtxiYX54q+LUmBiCve7grobtg59Ogz9RKFB8wwfY Pyap2MNF9E3Tn/rhi6mFIAMyr/P/K3kq7vwP3HRuh0OepbpOOmnbc0/2Xntd3YkX2F3C h8aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="c/cxlIA/"; 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 q8si1760766ejn.176.2020.05.01.06.32.18; Fri, 01 May 2020 06:32:41 -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="c/cxlIA/"; 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 S1729304AbgEAN3m (ORCPT + 99 others); Fri, 1 May 2020 09:29:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:53242 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729302AbgEAN3i (ORCPT ); Fri, 1 May 2020 09:29:38 -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 CC928208DB; Fri, 1 May 2020 13:29:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588339778; bh=74iTO465UoUa8Ze5YwNrtetiBHOrvZsrEsFg1HbTjFI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c/cxlIA/DwAnUActfiSs/idlbkRCmZ5ZmjewzcgcUTjtA9aVx9yWW2uTLtf7T38+a PIi7k3EvlJ+b0STtxVykCMvIM5ESZaMx792qe2KeTrVRTZ3NoIGVH38zvpkpOHi1Y1 Lgfh9Cg0dvUgyr2hiS4hi2NJeLAM8Jhk0kgCdfx8= 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 4.9 44/80] KVM: Check validity of resolved slot when searching memslots Date: Fri, 1 May 2020 15:21:38 +0200 Message-Id: <20200501131527.509549308@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131513.810761598@linuxfoundation.org> References: <20200501131513.810761598@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 @@ -914,7 +914,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];