linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Herbert Xu <herbert@gondor.apana.org.au>
To: Tejun Heo <tj@kernel.org>
Cc: David Miller <davem@davemloft.net>,
	cwang@twopensource.com, tom@herbertland.com, kafai@fb.com,
	kernel-team@fb.com, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org, torvalds@linux-foundation.org,
	jiri@resnulli.us, nicolas.dichtel@6wind.com, tgraf@suug.ch,
	sfeldma@gmail.com
Subject: Re: [PATCH v2] netlink: Replace rhash_portid with bound
Date: Wed, 23 Sep 2015 14:13:42 +0800	[thread overview]
Message-ID: <20150923061342.GA19106@gondor.apana.org.au> (raw)
In-Reply-To: <20150922161056.GB9761@mtj.duckdns.org>

On Tue, Sep 22, 2015 at 12:10:56PM -0400, Tejun Heo wrote:
>
> That's a pentium pro era errata.  Virtually no working machine is
> affected by that anymore and nobody builds kernel with that option.
> In most cases, store_release and load_acquire are cheaper as they're
> more specific.  On x86, store_release and load_acquire boil down to
> compiler reordering barriers.  You're running in the opposite
> direction.

It doesn't matter on x86 but the semantics of smp_load_acquire
and smp_store_release explicitly includes a full barrier which
is something that we don't need.

> I mean, read this thread.  It's one subtle breakage after another, one
> confusion after another.  The problematic usages of memory barriers
> are usually of two types.

smp_load_acquire/store_release isn't some kind of magic dust
that you can just spread around to fix races.  Whoever is writing
the code had better understood what the code is doing or they will
end up creating more bugs.

Having said that, I very much appreciate the work you have done
in reviewing my patches and pointing out holes in them.  Please
continue to do so and I will look at any real issues that you
discover.

> 1. Misunderstand what barriers do and fail to, most frequently, pair
>    the barriers correctly.  This leads to things like lone smp_wmb()s
>    which don't do anything but provide false sense of security.

smp_store_release can give you exactly the same kind of false
sense of security.

> 2. The usage itself is correct but not properly documented and it's
>    not clear what's being synchronized.  Because there's nothing
>    inherently pairing the matching barrier pairs, w/o proper
>    documentation, it can be very challenging to track down what is
>    being synchronized making it difficult to tell this case from 1.
>    Note that this is another reason smp_store_release() and
>    smp_load_acquire() are just better.  Their specificity not only
>    makes them lighter but also makes it a lot easier to track down
>    what's going on.

Well if there is anything unclear in my patch please point them out
and I will rewrite and/or add comments where necessary.

> > The reason this one is OK is because we do not use nlk->portid or
> > try to get nlk from the hash table before we return to user-space.
> 
> What happens if somebody later adds code below that which happens to
> use portid?  You're creating a booby trap and the patch isn't even
> properly documenting what's going on.

The same thing can still happen even if you use smp_load_acquire.
Someone may add a read prior to it or add a second smp_load_acquire
and then screw up the logic as we have seen in netlink_bind.

As I said whoever is touching these lockless code paths need to
understand what is going on.  There is no easy way out.

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

  parent reply	other threads:[~2015-09-23  6:14 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-17  2:29 Possible netlink autobind regression Tejun Heo
2015-09-17  3:08 ` Herbert Xu
2015-09-17  3:41   ` Herbert Xu
2015-09-17  5:02     ` Cong Wang
2015-09-17  5:15       ` Herbert Xu
2015-09-17 11:25         ` Thomas Graf
2015-09-17 11:30         ` Tejun Heo
2015-09-18  6:36           ` [PATCH v3] netlink: Fix autobind race condition that leads to zero port ID Herbert Xu
2015-09-18 11:16             ` [PATCH v4] " Herbert Xu
2015-09-21  5:55               ` David Miller
2015-09-21  6:06                 ` Herbert Xu
2015-09-21  6:11                   ` David Miller
2015-09-21 13:34                     ` netlink: Replace rhash_portid with bound Herbert Xu
2015-09-21 18:20                       ` Tejun Heo
2015-09-22  3:38                         ` [PATCH v2] " Herbert Xu
2015-09-22 16:10                           ` Tejun Heo
2015-09-22 18:42                             ` Linus Torvalds
2015-09-22 18:53                               ` Tejun Heo
2015-09-22 19:28                                 ` Linus Torvalds
2015-09-22 19:50                                   ` Tejun Heo
2015-09-22 20:03                                     ` Linus Torvalds
2015-09-22 20:36                                       ` Bjørn Mork
2015-09-22 21:04                                         ` Linus Torvalds
2015-09-23  6:13                             ` Herbert Xu [this message]
2015-09-23 15:54                               ` Tejun Heo
2015-09-24  2:30                                 ` Herbert Xu
2015-09-24  2:46                                   ` Tejun Heo
2015-09-24  2:54                                     ` Herbert Xu
2015-09-24  3:06                                       ` Tejun Heo
2015-09-24  3:21                                         ` Herbert Xu
2015-09-24  3:29                                           ` Tejun Heo
2015-09-24  3:31                                             ` Herbert Xu
2015-09-24  3:41                                               ` Tejun Heo
2015-09-24  3:42                                                 ` Herbert Xu
2015-09-24  3:43                                                   ` Tejun Heo
2015-09-24  3:44                                                     ` Herbert Xu
2015-09-24 19:11                           ` David Miller
2015-09-24 20:05                             ` Tejun Heo
2015-09-25  1:43                               ` netlink: Add barrier to netlink_connect for theoretical case Herbert Xu
2015-09-25  3:24                                 ` Linus Torvalds
2015-09-25  3:39                                   ` Herbert Xu
2015-09-25 15:09                                     ` Tejun Heo
2015-09-25 15:01                                 ` Tejun Heo
2015-09-26 13:16                                   ` netlink: Add netlink_bound helper and use it in netlink_getname Herbert Xu
2015-09-26 18:09                                     ` Tejun Heo
2015-09-26 19:41                                       ` Herbert Xu
2015-09-26 19:45                                         ` Tejun Heo
2015-09-26 19:49                                           ` Herbert Xu
2015-09-26 19:52                                             ` Tejun Heo
2015-09-26 19:55                                               ` Herbert Xu
2015-09-26 20:05                                                 ` Tejun Heo
2015-09-26 20:10                                                   ` Herbert Xu
2015-09-26 20:17                                                     ` Tejun Heo
2015-09-21 20:52                       ` [PATCH] netlink: Replace rhash_portid with load_acquire protected boolean Tejun Heo
2015-09-18 13:37             ` [PATCH v3] netlink: Fix autobind race condition that leads to zero port ID Tejun Heo

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=20150923061342.GA19106@gondor.apana.org.au \
    --to=herbert@gondor.apana.org.au \
    --cc=cwang@twopensource.com \
    --cc=davem@davemloft.net \
    --cc=jiri@resnulli.us \
    --cc=kafai@fb.com \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nicolas.dichtel@6wind.com \
    --cc=sfeldma@gmail.com \
    --cc=tgraf@suug.ch \
    --cc=tj@kernel.org \
    --cc=tom@herbertland.com \
    --cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).