From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751267AbdBWUUj (ORCPT ); Thu, 23 Feb 2017 15:20:39 -0500 Received: from quartz.orcorp.ca ([184.70.90.242]:43399 "EHLO quartz.orcorp.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751119AbdBWUUi (ORCPT ); Thu, 23 Feb 2017 15:20:38 -0500 Date: Thu, 23 Feb 2017 13:20:30 -0700 From: Jason Gunthorpe To: Dan Williams Cc: linux-nvdimm@ml01.01.org, Logan Gunthorpe , linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH] device-dax: fix cdev leak Message-ID: <20170223202030.GB26301@obsidianresearch.com> References: <148787772308.30127.18437190636864555810.stgit@dwillia2-desk3.amr.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <148787772308.30127.18437190636864555810.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Broken-Reverse-DNS: no host name found for IP address 10.0.0.156 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Feb 23, 2017 at 11:22:03AM -0800, Dan Williams wrote: > If device_add() fails, cleanup the cdev. Otherwise, we leak a kobj_map() > with a stale device number. > > Fixes: ba09c01d2fa8 ("dax: convert to the cdev api") > Cc: > Cc: Logan Gunthorpe > Reported-by: Jason Gunthorpe > Signed-off-by: Dan Williams > drivers/dax/dax.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c > index ed758b74ddf0..0f8008dd0b0c 100644 > +++ b/drivers/dax/dax.c > @@ -724,6 +724,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) { > + cdev_del(&dax_dev->cdev); This probably should call into unregister_dax_dev and just skip the device_unregister part. Once cdev_add returns it is possible for a mmap to have been created, so cleanup after that point has to go through all the other unregister_dax_dev steps. Jason