From: Herbert Xu Date: Fri, 16 Jan 2015 06:23:48 +0000 (+1100) Subject: netlink: Fix netlink_insert EADDRINUSE error X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=919d9db9521862d01712d9be25cd6ebfcc353eed;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git netlink: Fix netlink_insert EADDRINUSE error The patch c5adde9468b0714a051eac7f9666f23eb10b61f7 ("netlink: eliminate nl_sk_hash_lock") introduced a bug where the EADDRINUSE error has been replaced by ENOMEM. This patch rectifies that problem. Signed-off-by: Herbert Xu Acked-by: Ying Xue Signed-off-by: David S. Miller --- diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 01b702d63457..7a94185bde6b 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -1050,7 +1050,7 @@ netlink_update_listeners(struct sock *sk) static int netlink_insert(struct sock *sk, struct net *net, u32 portid) { struct netlink_table *table = &nl_table[sk->sk_protocol]; - int err = -EADDRINUSE; + int err; lock_sock(sk); @@ -1065,10 +1065,13 @@ static int netlink_insert(struct sock *sk, struct net *net, u32 portid) nlk_sk(sk)->portid = portid; sock_hold(sk); - if (__netlink_insert(table, sk, net)) - err = 0; - else + + err = 0; + if (!__netlink_insert(table, sk, net)) { + err = -EADDRINUSE; sock_put(sk); + } + err: release_sock(sk); return err;