===== net/netlink/af_netlink.c 1.61 vs edited ===== --- 1.61/net/netlink/af_netlink.c 2004-11-06 18:49:54 +11:00 +++ edited/net/netlink/af_netlink.c 2004-11-11 15:09:40 +11:00 @@ -471,9 +471,16 @@ return err; } - nlk->groups = nladdr->nl_groups; - if (nladdr->nl_groups) + if (!nladdr->nl_groups && !nlk->groups) + return 0; + + netlink_table_grab(); + if (nlk->groups && !nladdr->nl_groups) + __sk_del_bind_node(sk); + else if (!nlk->groups && nladdr->nl_groups) sk_add_bind_node(sk, &nl_table[sk->sk_protocol].mc_list); + nlk->groups = nladdr->nl_groups; + netlink_table_ungrab(); return 0; }