[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180123132233.6d77040b@redhat.com>
Date: Tue, 23 Jan 2018 13:22:33 +0100
From: Jiri Benc <jbenc@...hat.com>
To: Christian Brauner <christian.brauner@...onical.com>
Cc: netdev@...r.kernel.org
Subject: Re: [PATCH net-next 1/1] rtnetlink: request RTM_GETLINK by pid or
fd
(Christian, I'm adding back the netdev list, there's no reason not to
have the discussion in open.)
On Tue, 23 Jan 2018 12:42:19 +0100, Christian Brauner wrote:
> Thanks for the comments and discussion. Sorry, for not going through the
> list but I just have a quick question that doesn't deserve to spam the
> whole netdev list. :) I have written another set of patches that would
> add support for IFLA_IF_NETNSID to RTM_{N,S}ETLINK and friends which I
> planned to send out after the pid and fd ones. Would you be interested
> in those if I sent them out over the next week?
Yes, please CC me. I will have limited time next week (whole day
meetings for the most of the week) but I'll try to review.
In general, I see value in adding netnsid support to setlink, newlink
and dellink. It's a bit of minefield, though. Look for and be sure to
resolve:
- Backwards compatibility with old kernels. Old kernels will ignore
the IFLA_IF_NETNSID attribute that is unknown to them. And it's
certainly undesirable for an application to attempt to set/create an
interface in a given netns and instead the kernel sets/creates an
interface in the current netns.
In 79e1ad148c844, I put into place means to handle that: any kernel
that understands IFLA_IF_NETNSID but does not support
setlink/newlink/dellink will return -EOPNOTSUPP. This reduces the
problem to detecting whether the kernel understands IFLA_IF_NETNSID.
This can be done by invoking getlink with IFLA_IF_NETNSID and
looking whether the reply contains IFLA_IF_NETNSID.
The current getlink calls are also limited to CAP_NET_ADMIN in the
*target* netns. If/when this is relaxed in the future, we still need
to stay backwards compatible.
So, the application needs to do this:
1. call RTM_GETLINK with IFLA_IF_NETNSID on lo (or do a dump)
2. if getting EACCESS, assume IFLA_IF_NETNSID is not supported =>
fall back to other means
2. if the reply does not contain IFLA_IF_NETNSID, the kernel does not
support IFLA_IF_NETNSID => fall back to other means
3. try RTM_SETLINK/NEWLINK/DELLINK and check for EOPNOTSUPP => fall
back to other means
What is important for your kernel patches is to not break this. If
you implement only partial support for some of the operation, think
about the future extensibility. Applications have to be able to
reliably detect what is supported on the running kernel, regardless
of the kernel version.
- Access rights. This is security sensitive stuff. I took the big
hammer and limited everything to CAP_NET_ADMIN in the target netns.
If you want to relax this, be sure to get review from people involved
in name space security.
Jiri
Powered by blists - more mailing lists