Re: [PATCH net-next 0/3] ipmr/ip6mr: add Netlink notifications on cache reports
flat view
From: Nikolay Aleksandrov <hidden>
Date: 2017-06-17 13:35:47
On 16/06/17 22:26, Julien Gomes wrote:
On 06/15/2017 06:00 AM, Nikolay Aleksandrov wrote:quoted
On 15/06/17 14:44, Nikolay Aleksandrov wrote:quoted
On 15/06/17 14:33, Nikolay Aleksandrov wrote:quoted
On 15/06/17 00:51, Julien Gomes wrote:quoted
Hi Nikolay, On 06/14/2017 05:04 AM, Nikolay Aleksandrov wrote:quoted
This has been on our todo list and I'm definitely interested in the implementation. A few things that need careful consideration from my POV. First are the security implications - this sends rtnl multicast messages but the rtnl socket has the NL_CFG_F_NONROOT_RECV flag thus allowing any user on the system to listen in. This would allow them to see the full packets and all reports (granted they can see the notifications even now), but the full packet is like giving them the opportunity to tcpdump the PIM traffic.I definitely see how this can be an issue. From what I see, this means that either the packet should be transmitted another way, or another Netlink family should be used. NETLINK_ROUTE looks to be the logical family to choose though, but then I do not see a proper other way to handle this.Right, currently me neither, unless it provides a bind callback when registering the kernel socket.quoted
However I may just not be looking into the right direction, maybe you currently have another approach in mind?I haven't gotten around to make (or even try) them but I was thinking about 2 options ending up with a similar result: 1) genetlink It also has the NONROOT_RECV flag, but it also allows for a callback - mcast_bind() which can be used to filter. or 2) Providing a bind callback to the NETLINK_ROUTE socket.Ah nevermind, these cannot be used for filtering currently, so it seems the netlink interface would need to be extended too if going down this road.Sorry for the multiple emails, just to be thorough - again if going down this road all of these would obviously require a different group to bind to in order to be able to filter on it, because users must keep receiving their notifications for the ipmr one.Actually, using a bind callback for NETLINK_ROUTE with a new group, without netlink interface extension, could work. I quickly tested something like this:quoted
static int rtnetlink_bind(struct net *net, int group) { switch (group) { case RTNLGRP_IPV4_MROUTE_R: case RTNLGRP_IPV6_MROUTE_R: if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) return -EPERM; break; } return 0; }With the addition of one/two groups this does restrict the reports' potential listeners. The group names here are just placeholders, I am not especially fixed on these ones. It is not perfect as this would introduce groups with specific requirements in NETLINK_ROUTE, but I think it can be decent. What do you think about this?
Oh yes, that is exactly what I had in mind. I missed that the netns is passed to the bind function. Thanks, Nik