All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Coly Li <colyli@suse.de>
Cc: linux-bcache@vger.kernel.org
Subject: Re: [bug report] bcache: explicitly make cache_set only have single cache
Date: Mon, 2 Nov 2020 17:53:14 +0300	[thread overview]
Message-ID: <20201102145314.GX18329@kadam> (raw)
In-Reply-To: <875c4534-2548-14c4-b6c4-26b6720c8e67@suse.de>

On Mon, Nov 02, 2020 at 10:31:27PM +0800, Coly Li wrote:
> On 2020/11/2 21:02, Dan Carpenter wrote:
> > Hello Coly Li,
> > 
> > This is a semi-automatic email about new static checker warnings.
> > 
> > The patch 697e23495c94: "bcache: explicitly make cache_set only have 
> > single cache" from Oct 1, 2020, leads to the following Smatch 
> > complaint:
> > 
> >     drivers/md/bcache/super.c:2157 register_cache_set()
> >     error: we previously assumed 'c->cache' could be null (see line 2125)
> > 
> > drivers/md/bcache/super.c
> >   2124			if (!memcmp(c->set_uuid, ca->sb.set_uuid, 16)) {
> >   2125				if (c->cache)
> >                                     ^^^^^^^^
> > 
> >   2126					return "duplicate cache set member";
> >   2127	
> >   2128				goto found;
> >                                 ^^^^^^^^^^
> > "c->cache" is NULL on this path.
> > 
> >   2129			}
> >   2130	
> >   2131		c = bch_cache_set_alloc(&ca->sb);
> >   2132		if (!c)
> >   2133			return err;
> >   2134	
> >   2135		err = "error creating kobject";
> >   2136		if (kobject_add(&c->kobj, bcache_kobj, "%pU", c->set_uuid) ||
> >   2137		    kobject_add(&c->internal, &c->kobj, "internal"))
> >   2138			goto err;
> >   2139	
> >   2140		if (bch_cache_accounting_add_kobjs(&c->accounting, &c->kobj))
> >   2141			goto err;
> >   2142	
> >   2143		bch_debug_init_cache_set(c);
> >   2144	
> >   2145		list_add(&c->list, &bch_cache_sets);
> >   2146	found:
> >   2147		sprintf(buf, "cache%i", ca->sb.nr_this_dev);
> >   2148		if (sysfs_create_link(&ca->kobj, &c->kobj, "set") ||
> >   2149		    sysfs_create_link(&c->kobj, &ca->kobj, buf))
> >   2150			goto err;
> >   2151	
> >   2152		kobject_get(&ca->kobj);
> >   2153		ca->set = c;
> >   2154		ca->set->cache = ca;
> >   2155	
> >   2156		err = "failed to run cache set";
> >   2157		if (run_cache_set(c) < 0)
> >                     ^^^^^^^^^^^^^^^^
> > c->cache gets dereferenced inside this function without checking when we
> > do "c->nbuckets = ca->sb.nbuckets;".
> > 
> >   2158			goto err;
> >   2159	
> 
> 
> Hi Dan,
> 
> Hmm, let me check. It seems the trick is at line 2153 and 2154,
> 
> 2153		ca->set = c;
> 2154		ca->set->cache = ca;
> 
> "ca->set->cache = ca" equals to "c->cache = ca", so c->cache is
> initialized and safe. Yes we can write line 2154 as "c->cache = ca", but
> my motivation was little, event for readability.

Argh....  Of course.  Sorry, for the noise.  I feel like this must be a
regression in Smatch which is why it didn't generate a warning earlier.
I'll look into it.

regards,
dan carpenter


      reply	other threads:[~2020-11-02 14:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-02 13:02 [bug report] bcache: explicitly make cache_set only have single cache Dan Carpenter
2020-11-02 14:31 ` Coly Li
2020-11-02 14:53   ` Dan Carpenter [this message]

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=20201102145314.GX18329@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=colyli@suse.de \
    --cc=linux-bcache@vger.kernel.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.