Received: by 2002:ac0:a679:0:0:0:0:0 with SMTP id p54csp549533imp; Thu, 21 Feb 2019 06:40:01 -0800 (PST) X-Google-Smtp-Source: AHgI3IbYmXnzedZqbPrAQsYgbEa0MVTxDR1cfy5/3AiiTl9oabsaNfP/7Y8cHa2W21mqAwyisxDz X-Received: by 2002:a62:1b83:: with SMTP id b125mr41975330pfb.42.1550760001879; Thu, 21 Feb 2019 06:40:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550760001; cv=none; d=google.com; s=arc-20160816; b=Z8szhbxLrM2Rbahk9ZM0GI8fuPcskJfqzBjMr8bxZtd696dK/iD74ox1oj6zGhigUT RCg9MfzmIQEAGLH1SzUzghbSYxdrXYIimitVaXgc94qj/rBZ7f25wrU5g3hJe8saWZpF pEfxt0Q6r4wxvgTr/PEVsgB4+6AN9AwwB9Qyv34ea0dhw20ds+sLDqUTwBNk+cuDEX8j qpgQDRxwvO/yIXhwcAuSrpVZdm58Am9qX4OMJQOy1eghjZx5gcN0inwX5eo/HXS58EiQ WPGWyQv2RUpe5e6SgwhlRGum3qHXkfMRyVJsshzKhCqIVYvzisssPxIss4KiAE7DdN/3 PI4A== 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=XPJhqzxW7EmICID6cDl0e86d9W2c/1PMwHEKnw0HlMU=; b=ezgzLobWpUo5yPfRefDYtL5wASBnWZboiJ5pMdEkm7uAYJD9Bx9ykWWlGM6R1aB9tF Kcl38gsJ/JcJ8+J+PY53Psxwig6YczwvvOmVWD96+9nFxENbPCKL9T4aGxkqkmfqE+Vs Ht7aHLmK6gLn3wediAJv3FNwpebuS+6ryEMq0b417wkd98Arfsxq7L5B+Rzkl1nJVrS7 Pp3h4E3IhHhcOoJrpUS3YNlCgiNlJhJJ+uy5zgn2eJLdFblLlRUqrTQEGI8zsJpj6rUB 82vRQStQ1w2NB1lrzpLz4sBC9Q8iSJ4+ie/nkLspSE2yp2kddudYyBLd3gOD0K3UWS4k b25A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="r/4eGZd4"; 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 71si18879262pga.16.2019.02.21.06.39.46; Thu, 21 Feb 2019 06:40:01 -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="r/4eGZd4"; 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 S1728454AbfBUOhj (ORCPT + 99 others); Thu, 21 Feb 2019 09:37:39 -0500 Received: from mail.kernel.org ([198.145.29.99]:58940 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725870AbfBUOhh (ORCPT ); Thu, 21 Feb 2019 09:37:37 -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 B517E2084D; Thu, 21 Feb 2019 14:37:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1550759857; bh=l93Evb8YqM0Tkmz6yNRBZOhB4d6bmHgDT8WwYma9qDM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r/4eGZd4QS9FZQ7mVUiahCeQHRBp60HwuYmiknC2f03mk1IzWgeL9nWSLWG5OYruj aqDASB58DX5hIYKlrRG6vbu7B4lXS4BYwxRqA3/r0U/B9W2agIEtMlMWWPt0KcRSLY UaX72JledjHzbeIvi+8PxisOEgcppwWps/dxoPug= 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.4 14/20] kvm: fix kvm_ioctl_create_device() reference counting (CVE-2019-6974) Date: Thu, 21 Feb 2019 15:35:44 +0100 Message-Id: <20190221141947.179218556@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190221141946.772985220@linuxfoundation.org> References: <20190221141946.772985220@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.4-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 @@ -2711,14 +2711,15 @@ static int kvm_ioctl_create_device(struc return ret; } + 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); ops->destroy(dev); return ret; } list_add(&dev->vm_node, &kvm->devices); - kvm_get_kvm(kvm); cd->fd = ret; return 0; }