X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=net%2Fnetlink%2Fgenetlink.c;h=3b1b2a29e3a3d55385aff1dd57eb831ac4d11ac0;hp=482fa571b4eecb9b89bc67ac523f0ff6c08ef0f5;hb=ab38ffccdf4e0b86b8e6be1ff8c7ce53df74c4ec;hpb=8a1c049aa9d31710dac5a794b47be5a081a886e4 diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index 482fa571b4ee..3b1b2a29e3a3 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c @@ -134,6 +134,7 @@ int genl_register_mc_group(struct genl_family *family, int err = 0; BUG_ON(grp->name[0] == '\0'); + BUG_ON(memchr(grp->name, '\0', GENL_NAMSIZ) == NULL); genl_lock(); @@ -916,6 +917,7 @@ static int genlmsg_mcast(struct sk_buff *skb, u32 pid, unsigned long group, { struct sk_buff *tmp; struct net *net, *prev = NULL; + bool delivered = false; int err; for_each_net_rcu(net) { @@ -927,14 +929,21 @@ static int genlmsg_mcast(struct sk_buff *skb, u32 pid, unsigned long group, } err = nlmsg_multicast(prev->genl_sock, tmp, pid, group, flags); - if (err) + if (!err) + delivered = true; + else if (err != -ESRCH) goto error; } prev = net; } - return nlmsg_multicast(prev->genl_sock, skb, pid, group, flags); + err = nlmsg_multicast(prev->genl_sock, skb, pid, group, flags); + if (!err) + delivered = true; + else if (err != -ESRCH) + goto error; + return delivered ? 0 : -ESRCH; error: kfree_skb(skb); return err;