Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4025631imm; Tue, 29 May 2018 20:02:16 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLnCzMj/gG43ChCkdkq3wA7IPWVpSJNU+kFvs2crSCWeQz2efcfFDZS3u2oobEdj4Zaaisn X-Received: by 2002:a62:d9c5:: with SMTP id b66-v6mr998219pfl.41.1527649336408; Tue, 29 May 2018 20:02:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527649336; cv=none; d=google.com; s=arc-20160816; b=dVJro7FwZYZ3OqZQGHuxbDkqupx6VLt9PgTxVwiFK9srDfF5WVxStlhqZ083nufPSM 9WdxGmsj9C438caKdJd42uffTuRLNaQeAcqa+JjwccunI8tKNdeC3bRJPNVlnNMVdbRX Aicyp32D3Yi0ElF9VlL9FuIvAi6GD2JUjMTZmtNqg8TCejFwyNnVEeWCRguEJjx2/+Rd aTlTQHDMuYrsSrVhZ/sv+jL09fU5S+pN/PvFAJ/shKz9Qqrp2+SEkgcPQdHAzPx/yhvN bavpQk9/aamq3Lf0sp7F4939uJBBuCv6zv059TkY75uEtLJMXX+Ltj4sIS9sDCG4/i8Z DswA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :arc-authentication-results; bh=WvwZl16r0TDqY2nXdNoLCdaG6SRMrv7BymgFhC+jsI0=; b=0qHAf3IJvRg0KlGjeP0gV+323UKe2epjnjTFZ+91pE/sMW+qX1ntVxONl0S4KF9UBQ +LjriAM+oO7IAKLQHJ7pJ5bAIm8aexQeOTzyQ5BIqR1FUObpeV62ETv6v7W1EwdQ4my7 2pfX82XvkuUYegsOyeyzjYtg0HilFSIhqm97dbaaO8wssZ8j1ql3js5TNcW0JRJgx17H JpsEOGefk4y7Ji4N4OjQhtHWeqUuNj5dcXcqPj1TNRBkZwp9X7xabV5UNvwOvdEeK/C0 eGJ96rsCRhIbF5otp3dwFYxr8usPSRUK3wqDFmYWLFRYmT04koeLpvvdXC+x7MeYqL4K p61Q== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z3-v6si33375624plb.228.2018.05.29.20.01.51; Tue, 29 May 2018 20:02:16 -0700 (PDT) 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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935701AbeE3DBN (ORCPT + 99 others); Tue, 29 May 2018 23:01:13 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:45680 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934360AbeE3DBK (ORCPT ); Tue, 29 May 2018 23:01:10 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2421240201A0; Wed, 30 May 2018 03:01:10 +0000 (UTC) Received: from redhat.com (ovpn-120-96.rdu2.redhat.com [10.10.120.96]) by smtp.corp.redhat.com (Postfix) with SMTP id 7F91F1102E2F; Wed, 30 May 2018 03:01:09 +0000 (UTC) Date: Wed, 30 May 2018 06:01:09 +0300 From: "Michael S. Tsirkin" To: Guenter Roeck Cc: Kevin Easton , Jason Wang , kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com Subject: Re: [net] vhost: Use kzalloc() to allocate vhost_msg_node Message-ID: <20180530055704-mutt-send-email-mst@kernel.org> References: <20180427154502.GA22544@la.guarana.org> <20180529221908.GA22742@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180529221908.GA22742@roeck-us.net> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 30 May 2018 03:01:10 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 30 May 2018 03:01:10 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'mst@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 29, 2018 at 03:19:08PM -0700, Guenter Roeck wrote: > On Fri, Apr 27, 2018 at 11:45:02AM -0400, Kevin Easton wrote: > > The struct vhost_msg within struct vhost_msg_node is copied to userspace, > > so it should be allocated with kzalloc() to ensure all structure padding > > is zeroed. > > > > Signed-off-by: Kevin Easton > > Reported-by: syzbot+87cfa083e727a224754b@syzkaller.appspotmail.com > > Is this patch going anywhere ? > > The patch fixes CVE-2018-1118. It would be useful to understand if and when > this problem is going to be fixed. > > Thanks, > Guenter > > --- > > drivers/vhost/vhost.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c > > index f3bd8e9..1b84dcff 100644 > > --- a/drivers/vhost/vhost.c > > +++ b/drivers/vhost/vhost.c > > @@ -2339,7 +2339,7 @@ EXPORT_SYMBOL_GPL(vhost_disable_notify); > > /* Create a new message. */ > > struct vhost_msg_node *vhost_new_msg(struct vhost_virtqueue *vq, int type) > > { > > - struct vhost_msg_node *node = kmalloc(sizeof *node, GFP_KERNEL); > > + struct vhost_msg_node *node = kzalloc(sizeof *node, GFP_KERNEL); > > if (!node) > > return NULL; > > node->vq = vq; As I pointed out, we don't need to init the whole structure. The proper fix is thus (I think) below. Could you use your testing infrastructure to confirm this fixes the issue? Thanks! Signed-off-by: Michael S. Tsirkin diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index f3bd8e941224..58d9aec90afb 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -2342,6 +2342,9 @@ struct vhost_msg_node *vhost_new_msg(struct vhost_virtqueue *vq, int type) struct vhost_msg_node *node = kmalloc(sizeof *node, GFP_KERNEL); if (!node) return NULL; + + /* Make sure all padding within the structure is initialized. */ + memset(&node->msg, 0, sizeof node->msg); node->vq = vq; node->msg.type = type; return node;