From patchwork Fri Mar 17 18:48:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Logan Gunthorpe X-Patchwork-Id: 740437 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-it0-x240.google.com (mail-it0-x240.google.com [IPv6:2607:f8b0:4001:c0b::240]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vlDsk4qgwz9ryr for ; Sat, 18 Mar 2017 05:49:46 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b="ft0a8rg7"; dkim-atps=neutral Received: by mail-it0-x240.google.com with SMTP id m27sf11150669iti.1 for ; Fri, 17 Mar 2017 11:49:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:date:message-id:in-reply-to :references:subject:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=VXUoo4zCq4jw8WvBqXx3fb/vmmmOWj7oAD4nZmEqF3Q=; b=ft0a8rg76TGUcG87ZUsWnIBaQODmTSd6sAL2BcaRzOxFvO7+h0tNnmgF+MN13PVIwW sC5lWMTJCPQKziS4WpVbpHHvmikIpau65TBsAIG40Pp7HxSaH6WOJNYmLhwbKVDdNA3E NrePQUltmPuX6YVD0BfdFTCyTetMRKPeNKMvknBgXm3rUgBY+DINPZajSJq638qVIo/t R21gM88Z+1pUA61Iqi992Z2OXdurm+LqMQiNbgx0TN+4l7XMw97sK9A/YESoHH0P6ehP h8Mh12sEqyTYInFXPelOoWUE0aFKKLlveBzeqI15dwLw7v3ooT9Ut1S0xihnbMhof4Vq QSzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:date:message-id :in-reply-to:references:subject:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=VXUoo4zCq4jw8WvBqXx3fb/vmmmOWj7oAD4nZmEqF3Q=; b=T3JesJVtmqoUDrKI7YTuUaMDgOL+goKo4wES25SKS+DoXAok5WvQpjaBvCYNzJINEY FqsoosrM3duQdJaCvhaHjq3jUjTciccSVUgAyw+/8m6jH3SjM5v/djPkklNcTpNvVpUn YM+ywoh98JlpZhcv2puPKWBKu657NAuzGYr8ri552W3seyuZmAqtykjn8VUoTji5ZH47 QVXNetX8/ijizDqimBSI9mVhktEQtp4d3P3G/t3LYgI+aVTCDIsGMcRCWHwi99pXC0U1 W1a2gNRtcEuh8dRosYlPRxjGW3b6eI2s0pZQnZSbNlvPiUX6fKwdp1mTQwSPPxAe7wkq glnA== Sender: rtc-linux@googlegroups.com X-Gm-Message-State: AFeK/H0APVsomiB2ebEgyYXQDLZbwtP4sWyXqAhUCaHU1auAiUAOw8KK21tLLfNGY8j7+g== X-Received: by 10.157.67.140 with SMTP id t12mr1880200ote.7.1489776584907; Fri, 17 Mar 2017 11:49:44 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.157.24.83 with SMTP id t19ls8595194ott.28.gmail; Fri, 17 Mar 2017 11:49:44 -0700 (PDT) X-Received: by 10.237.35.251 with SMTP id k56mr2055442qtc.0.1489776584668; Fri, 17 Mar 2017 11:49:44 -0700 (PDT) Received: from ale.deltatee.com (ale.deltatee.com. [207.54.116.67]) by gmr-mx.google.com with ESMTPS id r66si1551995pfb.7.2017.03.17.11.49.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 17 Mar 2017 11:49:44 -0700 (PDT) Received-SPF: pass (google.com: domain of gunthorp@deltatee.com designates 207.54.116.67 as permitted sender) client-ip=207.54.116.67; Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31]) by ale.deltatee.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1cowvs-0002Z9-Sh; Fri, 17 Mar 2017 12:49:06 -0600 Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.84_2) (envelope-from ) id 1cowvp-0000pr-4U; Fri, 17 Mar 2017 12:48:57 -0600 From: Logan Gunthorpe To: Greg Kroah-Hartman , Dan Williams , Hans Verkuil , Alexander Viro , Alexandre Belloni , Jason Gunthorpe , Johannes Thumshirn , Dmitry Torokhov , Linus Walleij , Jarkko Sakkinen , "James E.J. Bottomley" , "Martin K. Petersen" , David Woodhouse , Brian Norris , Boris Brezillon , Marek Vasut , Cyrille Pitchen Cc: linux-pci@vger.kernel.org, linux-scsi@vger.kernel.org, rtc-linux@googlegroups.com, linux-mtd@lists.infradead.org, linux-media@vger.kernel.org, linux-iio@vger.kernel.org, linux-rdma@vger.kernel.org, linux-gpio@vger.kernel.org, linux-input@vger.kernel.org, linux-nvdimm@lists.01.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, , Logan Gunthorpe Date: Fri, 17 Mar 2017 12:48:09 -0600 Message-Id: <1489776503-3151-3-git-send-email-logang@deltatee.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1489776503-3151-1-git-send-email-logang@deltatee.com> References: <1489776503-3151-1-git-send-email-logang@deltatee.com> X-SA-Exim-Connect-IP: 172.16.1.31 X-SA-Exim-Rcpt-To: gregkh@linuxfoundation.org, dan.j.williams@intel.com, hans.verkuil@cisco.com, viro@zeniv.linux.org.uk, jgunthorpe@obsidianresearch.com, jthumshirn@suse.de, linus.walleij@linaro.org, jarkko.sakkinen@linux.intel.com, jejb@linux.vnet.ibm.com, martin.petersen@oracle.com, dwmw2@infradead.org, alexandre.belloni@free-electrons.com, boris.brezillon@free-electrons.com, dmitry.torokhov@gmail.com, computersforpeace@gmail.com, marek.vasut@gmail.com, cyrille.pitchen@atmel.com, rtc-linux@googlegroups.com, linux-mtd@lists.infradead.org, linux-nvdimm@lists.01.org, linux-pci@vger.kernel.org, linux-scsi@vger.kernel.org, linux-media@vger.kernel.org, linux-iio@vger.kernel.org, linux-rdma@vger.kernel.org, linux-gpio@vger.kernel.org, linux-input@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, logang@deltatee.com X-SA-Exim-Mail-From: gunthorp@deltatee.com X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ale.deltatee.com X-Spam-Level: X-Spam-Status: No, score=-8.5 required=5.0 tests=ALL_TRUSTED,BAYES_00, GREYLIST_ISWHITE, MYRULES_FREE, MYRULES_NO_TEXT, RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.0 Subject: [rtc-linux] [PATCH v5 02/16] device-dax: fix cdev leak X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on ale.deltatee.com) X-Original-Sender: logang@deltatee.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of gunthorp@deltatee.com designates 207.54.116.67 as permitted sender) smtp.mailfrom=gunthorp@deltatee.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: rtc-linux@googlegroups.com X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , From: Dan Williams If device_add() fails, cleanup the cdev. Otherwise, we leak a kobj_map() with a stale device number. As Jason points out, there is a small possibility that userspace has opened and mapped the device in the time between cdev_add() and the device_add() failure. We need a new kill_dax_dev() helper to invalidate any established mappings. Fixes: ba09c01d2fa8 ("dax: convert to the cdev api") Cc: Reported-by: Jason Gunthorpe Signed-off-by: Dan Williams Signed-off-by: Logan Gunthorpe Reviewed-by: Johannes Thumshirn --- drivers/dax/dax.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c index 8d9829f..a5ed59a 100644 --- a/drivers/dax/dax.c +++ b/drivers/dax/dax.c @@ -675,13 +675,10 @@ static void dax_dev_release(struct device *dev) kfree(dax_dev); } -static void unregister_dax_dev(void *dev) +static void kill_dax_dev(struct dax_dev *dax_dev) { - struct dax_dev *dax_dev = to_dax_dev(dev); struct cdev *cdev = &dax_dev->cdev; - dev_dbg(dev, "%s\n", __func__); - /* * Note, rcu is not protecting the liveness of dax_dev, rcu is * ensuring that any fault handlers that might have seen @@ -693,6 +690,15 @@ static void unregister_dax_dev(void *dev) synchronize_rcu(); unmap_mapping_range(dax_dev->inode->i_mapping, 0, 0, 1); cdev_del(cdev); +} + +static void unregister_dax_dev(void *dev) +{ + struct dax_dev *dax_dev = to_dax_dev(dev); + + dev_dbg(dev, "%s\n", __func__); + + kill_dax_dev(dax_dev); device_unregister(dev); } @@ -769,6 +775,7 @@ struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, dev_set_name(dev, "dax%d.%d", dax_region->id, dax_dev->id); rc = device_add(dev); if (rc) { + kill_dax_dev(dax_dev); put_device(dev); return ERR_PTR(rc); }