If no one registered to the l2tp netlink group, genlmsg_multicast_allns
returns -ESRCH. Ignore return code -ESRCH of genlmsg_mulitcast_allns
within tunnel_create and session_create calls.

Signed-off-by: Alexander Couzens <lyn...@fe80.eu>
---
 net/l2tp/l2tp_netlink.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
index f93c5be..eced13a 100644
--- a/net/l2tp/l2tp_netlink.c
+++ b/net/l2tp/l2tp_netlink.c
@@ -123,11 +123,15 @@ static int l2tp_tunnel_notify(struct genl_family *family,
 
        ret = l2tp_nl_tunnel_send(msg, info->snd_portid, info->snd_seq,
                                  NLM_F_ACK, tunnel, cmd);
+       if (ret < 0) {
+               nlmsg_free(msg);
+               return ret;
+       }
 
-       if (ret >= 0)
-               return genlmsg_multicast_allns(family, msg, 0,  0, GFP_ATOMIC);
-
-       nlmsg_free(msg);
+       ret = genlmsg_multicast_allns(family, msg, 0, 0, GFP_ATOMIC);
+       /* We don't care if no one is listening */
+       if (ret == -ESRCH)
+               ret = 0;
 
        return ret;
 }
@@ -146,11 +150,15 @@ static int l2tp_session_notify(struct genl_family *family,
 
        ret = l2tp_nl_session_send(msg, info->snd_portid, info->snd_seq,
                                   NLM_F_ACK, session, cmd);
+       if (ret < 0) {
+               nlmsg_free(msg);
+               return ret;
+       }
 
-       if (ret >= 0)
-               return genlmsg_multicast_allns(family, msg, 0,  0, GFP_ATOMIC);
-
-       nlmsg_free(msg);
+       ret = genlmsg_multicast_allns(family, msg, 0, 0, GFP_ATOMIC);
+       /* We don't care if no one is listening */
+       if (ret == -ESRCH)
+               ret = 0;
 
        return ret;
 }
-- 
2.7.1

Reply via email to