Thread (5 messages) flat view 5 messages, 3 authors, 2017-09-11

Re: [PATCH net] netlink: access nlk groups safely in netlink bind and getname

From: Cong Wang <hidden>
Date: 2017-09-11 17:35:26

On Sun, Sep 10, 2017 at 4:45 AM, Xin Long [off-list ref] wrote:
On Sat, Sep 9, 2017 at 7:35 AM, Cong Wang [off-list ref] wrote:
quoted
On Tue, Sep 5, 2017 at 8:53 PM, Xin Long [off-list ref] wrote:
quoted
Now there is no lock protecting nlk ngroups/groups' accessing in
netlink bind and getname. It's safe from nlk groups' setting in
netlink_release, but not from netlink_realloc_groups called by
netlink_setsockopt.

netlink_lock_table is needed in both netlink bind and getname when
accessing nlk groups.
This looks very odd.

netlink_lock_table() should be protecting nl_table, why
it also protects nlk->groups?? For me it looks like you
need lock_sock() instead.
I believe netlink_lock_table might be only used to protect nl_table
at the beginning and surely lock_sock is better here. Thanks.

But can you explain why  netlink_lock_table() was also used in
netlink_getsockopt NETLINK_LIST_MEMBERSHIPS ? or it
was just a mistake ?
No, it is fine but not necessary, because netlink_realloc_groups()
doesn't change nl_table, it only changes nlk->groups. So we
don't have take the global write lock, the lock sock makes more
sense here, same for your bind() and getname() case.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help