Hi, I have been trying to figure out how pid namespaces interact with netlink. netlink uses pids (or really tids I hope?) to address sockets associated with processes. The netlink code passes around pids without caring much about the pid namespace. It does pass around some information about the network namespace, but that doesn't help here because the pid namespace is not necessarily related to the net namespace. When the netlink consumer runs in kernel (like rtnetlink) and happens to run in the same process context while receiving and processing the data it should do the right thing because it has the same pid namespace. If it runs in some other process that is not guaranteed and it may actually send the reply back to the wrong pid. When a process receives netlink in user space and it isn't in the same pid space as the sender it is unlikely that the reply gets back. Anything I'm missing here? Does netlink need to be extended? Or perhaps forbid passing netlink between name spaces? Thanks, -Andi -- ak at linux.intel.com -- Speaking for myself only.
Hello!> netlink uses pids (or really tids I hope?) to address sockets > associated with processes.Not really. It uses port number which is called "pid" occasionally. Bad name. Autobind function simply selects tgid of calling process as the first guess. Actually sockets are addressed by pair (net namespace, port) and communication is possible only inside net namespace. So, communication between namespaces is already prohibited. pid namespaces do not participate in the picture at all. Alexey
On Fri, Oct 15, 2010 at 07:19:03PM +0400, Alexey Kuznetsov wrote:> Hello! > > > netlink uses pids (or really tids I hope?) to address sockets > > associated with processes. > > Not really. It uses port number which is called "pid" occasionally. Bad name. > Autobind function simply selects tgid of calling process as the first guess.Thanks for the clarification, Alexey. I guess I should have read more code :/ -Andi