All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-nvdimm <linux-nvdimm@lists.01.org>
Subject: Re: [bug report] libnvdimm, nvdimm: dimm driver and base libnvdimm device-driver infrastructure
Date: Wed, 5 Feb 2020 21:10:40 +0300	[thread overview]
Message-ID: <20200205181040.GC24804@kadam> (raw)
In-Reply-To: <CAPcyv4j12vgjgEgY3xAr9bpV8dd+3E7Q5Q3OFo2AXmwnN45PBA@mail.gmail.com>

On Wed, Feb 05, 2020 at 09:47:01AM -0800, Dan Williams wrote:
> On Wed, Feb 5, 2020 at 4:38 AM Dan Carpenter <dan.carpenter@oracle.com> wrote:
> >
> > Hello Dan Williams,
> >
> > The patch 4d88a97aa9e8: "libnvdimm, nvdimm: dimm driver and base
> > libnvdimm device-driver infrastructure" from May 31, 2015, leads to
> > the following static checker warning:
> >
> >         drivers/nvdimm/bus.c:511 nd_async_device_register()
> >         error: dereferencing freed memory 'dev'
> >
> > drivers/nvdimm/bus.c
> >    502  static void nd_async_device_register(void *d, async_cookie_t cookie)
> >    503  {
> >    504          struct device *dev = d;
> >    505
> >    506          if (device_add(dev) != 0) {
> >    507                  dev_err(dev, "%s: failed\n", __func__);
> >    508                  put_device(dev);
> >                         ^^^^^^^^^^^^^^^
> >    509          }
> >    510          put_device(dev);
> >                 ^^^^^^^^^^^^^^
> >    511          if (dev->parent)
> >    512                  put_device(dev->parent);
> >    513  }
> >
> > We call get_device() from __nd_device_register(), I guess.  It seems
> > buggy to call put device twice on error.
> 
> The registration path does:
> 
>         get_device(dev);
> 
>         async_schedule_dev_domain(nd_async_device_register, dev,
>                                   &nd_async_domain);
> 
> ...and device_add() does its own get_device().

device_add() does its own put_device() at the end so it's a net zero.

regards,
dan carpenter
_______________________________________________
Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org
To unsubscribe send an email to linux-nvdimm-leave@lists.01.org

  reply	other threads:[~2020-02-05 18:10 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-05 12:38 [bug report] libnvdimm, nvdimm: dimm driver and base libnvdimm device-driver infrastructure Dan Carpenter
2020-02-05 17:47 ` Dan Williams
2020-02-05 18:10   ` Dan Carpenter [this message]
2020-02-05 18:23     ` Dan Williams
2020-02-05 19:08       ` Dan Carpenter
2020-02-05 19:16         ` Dan Williams
2020-02-05 19:28           ` Dan Carpenter
2020-02-05 20:04             ` Dan Williams
2020-02-05 20:18               ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200205181040.GC24804@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=dan.j.williams@intel.com \
    --cc=linux-nvdimm@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.