Re: netlink: Add netlink_bound helper and use it in netlink_getname
flat view
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2015-09-26 19:49:38
Also in:
lkml
On Sat, Sep 26, 2015 at 03:45:54PM -0400, Tejun Heo wrote:
Hello, Herbert. On Sun, Sep 27, 2015 at 03:41:10AM +0800, Herbert Xu wrote:quoted
Thread 1 Thread 2 sendmsg getsockname netlink_autobind netlink_getname Thread 2 should not have to do anything special to guarantee that getsockname does not return garbage. It must either be the bound portid if the autobind completed in thread 1 and is visible or it should return zero. As it stands thread 2 may see a portid belonging to somebody else if it catches the autobind in thread 1 trying different portids while roving.If the fact that thread 1 finished autobind isn't visible to thread 2, it's valid for getsockname to return zero. No ordering between the two operations is defined. If the fact that thread 1 finished autobind is visible to thread 2, ordering is defined and because ordering is transitive, by that very ordering, the port number is visible to thread 2 too as long as thread 1 does proper barriering.
If the autobind is not complete then netlink_getname must return zero rather than some garbage portid that belongs to somebody else's socket. That's what we did before any of this lockless code was introduced. If you don't check nlk->bound then you may return garbage. Cheers, -- Email: Herbert Xu [off-list ref] Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt