Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp704288ybz; Fri, 1 May 2020 07:06:30 -0700 (PDT) X-Google-Smtp-Source: APiQypIsGvte6vmhC3DcOvibaqdIRdf162veDsAOUSe2DtKZivUTLIJlqtYZRV/ZBj32jlGG01a+ X-Received: by 2002:a05:6402:759:: with SMTP id p25mr3790164edy.102.1588341990736; Fri, 01 May 2020 07:06:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588341990; cv=none; d=google.com; s=arc-20160816; b=HuptZ9uEwqG0uV6VbLlbor73cHJ/4YnNverE9sXl77uhWCT6A1UzPmnJvHK5vRQ+Uo QiZt65QVLDSbVgYzayUhQZzFcpnl+KSRm5aHNqWhCia3lpebumWr23tS368j4SlZV5np ufjyN4FFvZGzIfxJoSobxwPzgX7W7vdV48ozUJDJa0P/waNMiBoXMXQC2CA7WVlji/ur lkUs2QayNAF6Wu+DvzkO4E7+A7N3EvKa+Rt0Q+fN2AIuOF4DUGWCFbUOzbYDrW+yR6cc SNEP+r6+QlA/neFqmtEku9eoH8l4W0989CPW3COv0al/xv4aWBLrg0jsN3qrXDXo0dSr iZtw== 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=/Ijoh0k1m7XsR6skLsI57eCFgTbc4sB88KU8rhhqd6U=; b=AJWqTrm25RyR1g2TEXcoiyiNTOjGEhRg4fD9vvMr2CJUAL8Fq62AVUqcvJouOqou94 OzVV4avY9HyQXqHBgkY/ThFhl2RvOWuBI1myoMQY4o9qmdJrL7sFEd6wg4BQ1D2Kgc09 hPbu25Tbfi0VMoy3/3/VbG9IRI/C/W2KptqcmqT6dPr9At29x2EMVdATV1pkX1OxXhtG DN5WI4wHrILdk4thfIOkAPPxrih5d5tbC80waHmmwW7CBMyLgdR5BBVr/n5VVzPTqJcw vdRTm4//QXYKIYHJRrSkJ4hSgKwXkkbgTCSyENmBPzBgDuW0Hu8ylJPbo1ffb/LnJMSy lipA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nUoZaNG9; 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 z6si1860954edp.213.2020.05.01.07.06.03; Fri, 01 May 2020 07:06:30 -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=nUoZaNG9; 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 S1729510AbgEAOAs (ORCPT + 99 others); Fri, 1 May 2020 10:00:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:48964 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728933AbgEAN06 (ORCPT ); Fri, 1 May 2020 09:26:58 -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 DCE50208D6; Fri, 1 May 2020 13:26:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588339618; bh=vE4sw5pXGrs+jUPMxqzbdGisJdgJaBReRiGMoZcKJXw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nUoZaNG9/BX5DKHfbWdFjxbAvR7Czu3epjTfwmLLPrcs+CJBy6ZdSWCRCmcyRLJf1 NDs3tk7h2dWmLuyZ1seY+DxEPx2K/kMKLX4NvGPx25B4/qPkYhqL6akjtks1wl5Xc7 7GfKLlFC3yjPVx4Zt44r27ybpcFWKaO5Ovgv5p5w= 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.4 39/70] KVM: Check validity of resolved slot when searching memslots Date: Fri, 1 May 2020 15:21:27 +0200 Message-Id: <20200501131525.781677076@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131513.302599262@linuxfoundation.org> References: <20200501131513.302599262@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 @@ -934,7 +934,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];