diff mbox

net: netlink: don't try unicast when dst_pid is zero for NETLINK_USERSOCK

Message ID 1305267894-3314-1-git-send-email-xiaosuo@gmail.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Changli Gao May 13, 2011, 6:24 a.m. UTC
For NETLINK_USERSOCK, no one listens on PID 0, so sending a message only to
to a multicast group should not return -ECONNREFUSED.

Signed-off-by: Changli Gao <xiaosuo@gmail.com>
---
 net/netlink/af_netlink.c |    2 ++
 1 file changed, 2 insertions(+)
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller May 13, 2011, 8:48 p.m. UTC | #1
From: Changli Gao <xiaosuo@gmail.com>
Date: Fri, 13 May 2011 14:24:54 +0800

> For NETLINK_USERSOCK, no one listens on PID 0, so sending a message only to
> to a multicast group should not return -ECONNREFUSED.
> 
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>

I don't think this is a great idea, creating different semantics for
NETLINK_USERSOCK vs. other types.

You have to set the pid to something which will receive the unicast
message, and then you can also (on top of that) send it to a multicast
group as well.

But the base operation is always the unicast send, and that is what
determines success/failure of the operation.

I'm not applying this patch.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Changli Gao May 14, 2011, 12:50 a.m. UTC | #2
On Sat, May 14, 2011 at 4:48 AM, David Miller <davem@davemloft.net> wrote:
> From: Changli Gao <xiaosuo@gmail.com>
> Date: Fri, 13 May 2011 14:24:54 +0800
>
>> For NETLINK_USERSOCK, no one listens on PID 0, so sending a message only to
>> to a multicast group should not return -ECONNREFUSED.
>>
>> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
>
> I don't think this is a great idea, creating different semantics for
> NETLINK_USERSOCK vs. other types.
>
> You have to set the pid to something which will receive the unicast
> message, and then you can also (on top of that) send it to a multicast
> group as well.
>
> But the base operation is always the unicast send, and that is what
> determines success/failure of the operation.
>

Yes, I have seen that the return value of netlink_broadcast() isn't
returned to the caller, so the caller can't know whether the message
broadcasted is sent successfully or not. It isn't a big problem, as
netlink isn't a reliable datagram protocol. Without this patch
applied, we can also send a message to a multicast group only, but
ignore the -ECONNREFUSED error.

Thanks.
diff mbox

Patch

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index c8f35b5..ba89304 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -1379,6 +1379,8 @@  static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
 	if (dst_group) {
 		atomic_inc(&skb->users);
 		netlink_broadcast(sk, skb, dst_pid, dst_group, GFP_KERNEL);
+		if (dst_pid == 0 && sk->sk_protocol == NETLINK_USERSOCK)
+			return len;
 	}
 	err = netlink_unicast(sk, skb, dst_pid, msg->msg_flags&MSG_DONTWAIT);