# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2005/02/16 19:32:38+01:00 kaber@coreworks.de # [NETLINK]: Unhash sockets correctly # # netlink_remove() only unhashes sockets contained in the # first hash bucket. This leads to leaking sockets and, # over time, to bind conflicts which confuse iproute. # # Signed-off-by: Patrick McHardy # # net/netlink/af_netlink.c # 2005/02/16 19:32:36+01:00 kaber@coreworks.de +2 -1 # [NETLINK]: Unhash sockets correctly # # netlink_remove() only unhashes sockets contained in the # first hash bucket. This leads to leaking sockets and, # over time, to bind conflicts which confuse iproute. # # Signed-off-by: Patrick McHardy # diff -Nru a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c --- a/net/netlink/af_netlink.c 2005-02-16 19:32:51 +01:00 +++ b/net/netlink/af_netlink.c 2005-02-16 19:32:51 +01:00 @@ -327,10 +327,11 @@ struct sock **skp; struct netlink_table *table = &nl_table[sk->protocol]; struct nl_pid_hash *hash = &table->hash; + u32 pid = nlk_sk(sk)->pid; netlink_table_grab(); hash->entries--; - for (skp = hash->table; *skp; skp = &((*skp)->next)) { + for (skp = nl_pid_hashfn(hash, pid); *skp; skp = &((*skp)->next)) { if (*skp == sk) { *skp = sk->next; __sock_put(sk);