Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2727627imj; Mon, 11 Feb 2019 07:35:45 -0800 (PST) X-Google-Smtp-Source: AHgI3IaFyWVFjSW0vZGR79z5ftgpgQCV3alL1uR/ru92e6fw85SmIuNjzZ3/U1JlBo5JPM13+agW X-Received: by 2002:a62:59d0:: with SMTP id k77mr13021326pfj.211.1549899345245; Mon, 11 Feb 2019 07:35:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549899345; cv=none; d=google.com; s=arc-20160816; b=WlTUpxktSp/v+pCofO4e6kZGxJ2FNnvRiQ2NSfj2L2e4z16Fbszt7XyNxRMQVYhZrT dgvcqVhkTKjIJ6GFZyriFrZDcfnjxy8SCTjTUkCpMi3jqZ9bZvZeLiNfphLToMo8IyhU zI3woR6W7KT2Gccj5Z5CqqmbSuBQBC/ATN8sQSDLYIzuSGxVrxVb1xiSxhOuN8Wyg5Iz S5n14K2CuBUHdnyWH3WWDh3BO0vxK4MFn+JUnNf9QbgbNQCT3MwFvdZOJCOilVVZS1u6 K04Eh5C7oeCCbMB9MdqMKX0w1l03Q4B0M8HfR2Ep+QdXge55qDnllO8XBBFm7vQmkJ03 prEQ== 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=6gjSZndsiuBvh+r3sMlHy/8yjPnpCxJAjTMXl+FlLZw=; b=t+hFw8HB0cC7Gs6A/PYyVYGtdwOuIsye/BzK0PLVGiL07bBiQhrhy+6tzx1PIbjnqs v9UCEgS4ekJ+x7VAk7Dj9SC6TMtq/1MnyPURhdiVtAwqRY2B7Hys9+fCPCr4YHGxv15I NIzIc/NFfCCwevcytqQ6r8xTutLfqxPzqrHinRUT6t5LGnzztAD8wUWUZYxN1MPWId38 UgasPa4kITmRWJnF6yvmLeXVTbrl5zTKN5sSdTpAwTT0Y5bs8ddmZIxkqt16dWqR+FSZ g4jei8eOCuu3kHq9BDnF/IsQKaR0OHpzErDW0IMI2B0I3Eog7roscG5EF/V9vteI/Fyd UZag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BrOzKrAH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o89si10655419pfk.223.2019.02.11.07.35.29; Mon, 11 Feb 2019 07:35:45 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BrOzKrAH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389536AbfBKPed (ORCPT + 99 others); Mon, 11 Feb 2019 10:34:33 -0500 Received: from mail.kernel.org ([198.145.29.99]:39454 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388556AbfBKOxF (ORCPT ); Mon, 11 Feb 2019 09:53:05 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 329BF20700; Mon, 11 Feb 2019 14:53:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1549896784; bh=Li1c79VoW/URlXVB1FaxHDzrAXf8WnV7XZfTOrV2ePg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BrOzKrAHeTbGvdfbxCeT6dLjCvRmLvTvIpbfY7cyma2sqojnd9oVyfoWsDVF79Rl9 6+9tuy/QUIs+Y/k1h9SG0kRyXLD1Z4pjX/ezLamutpHYLhK6mKUNXx1dtyF0DpVqyN bMO9VlojAu8LO+Fe0/L5//qIO6iq2aEbumpT/8BY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, stable@kernel.org, Jann Horn , Paolo Bonzini Subject: [PATCH 4.19 301/313] kvm: fix kvm_ioctl_create_device() reference counting (CVE-2019-6974) Date: Mon, 11 Feb 2019 15:19:41 +0100 Message-Id: <20190211141912.995341644@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190211141852.749630980@linuxfoundation.org> References: <20190211141852.749630980@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore 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 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jann Horn commit cfa39381173d5f969daf43582c95ad679189cbc9 upstream. kvm_ioctl_create_device() does the following: 1. creates a device that holds a reference to the VM object (with a borrowed reference, the VM's refcount has not been bumped yet) 2. initializes the device 3. transfers the reference to the device to the caller's file descriptor table 4. calls kvm_get_kvm() to turn the borrowed reference to the VM into a real reference The ownership transfer in step 3 must not happen before the reference to the VM becomes a proper, non-borrowed reference, which only happens in step 4. After step 3, an attacker can close the file descriptor and drop the borrowed reference, which can cause the refcount of the kvm object to drop to zero. This means that we need to grab a reference for the device before anon_inode_getfd(), otherwise the VM can disappear from under us. Fixes: 852b6d57dc7f ("kvm: add device control API") Cc: stable@kernel.org Signed-off-by: Jann Horn Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- virt/kvm/kvm_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2913,8 +2913,10 @@ static int kvm_ioctl_create_device(struc if (ops->init) ops->init(dev); + kvm_get_kvm(kvm); ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC); if (ret < 0) { + kvm_put_kvm(kvm); mutex_lock(&kvm->lock); list_del(&dev->vm_node); mutex_unlock(&kvm->lock); @@ -2922,7 +2924,6 @@ static int kvm_ioctl_create_device(struc return ret; } - kvm_get_kvm(kvm); cd->fd = ret; return 0; }