Files
kernel_arpi/include/uapi/linux
Andrey Vagin ba94f3088b unix: add ioctl to open a unix socket file with O_PATH
This ioctl opens a file to which a socket is bound and
returns a file descriptor. The caller has to have CAP_NET_ADMIN
in the socket network namespace.

Currently it is impossible to get a path and a mount point
for a socket file. socket_diag reports address, device ID and inode
number for unix sockets. An address can contain a relative path or
a file may be moved somewhere. And these properties say nothing about
a mount namespace and a mount point of a socket file.

With the introduced ioctl, we can get a path by reading
/proc/self/fd/X and get mnt_id from /proc/self/fdinfo/X.

In CRIU we are going to use this ioctl to dump and restore unix socket.

Here is an example how it can be used:

$ strace -e socket,bind,ioctl ./test /tmp/test_sock
socket(AF_UNIX, SOCK_STREAM, 0)         = 3
bind(3, {sa_family=AF_UNIX, sun_path="test_sock"}, 11) = 0
ioctl(3, SIOCUNIXFILE, 0)           = 4
^Z

$ ss -a | grep test_sock
u_str  LISTEN     0      1      test_sock 17798                 * 0

$ ls -l /proc/760/fd/{3,4}
lrwx------ 1 root root 64 Feb  1 09:41 3 -> 'socket:[17798]'
l--------- 1 root root 64 Feb  1 09:41 4 -> /tmp/test_sock

$ cat /proc/760/fdinfo/4
pos:	0
flags:	012000000
mnt_id:	40

$ cat /proc/self/mountinfo | grep "^40\s"
40 19 0:37 / /tmp rw shared:23 - tmpfs tmpfs rw

Signed-off-by: Andrei Vagin <avagin@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-02-02 21:58:02 -05:00
..
2016-11-29 09:00:30 +01:00
2016-10-18 10:05:42 -06:00
2016-10-03 18:52:14 +02:00
2016-10-01 07:32:32 +02:00
2017-01-24 12:39:52 -05:00
2016-11-03 15:41:11 -04:00
2016-11-03 15:41:11 -04:00
2016-06-27 16:31:25 +01:00
2016-12-10 23:29:11 -05:00
2017-01-17 14:38:43 -05:00
2016-11-03 10:56:17 +01:00
2016-05-17 17:14:21 -06:00
2016-09-27 21:52:00 -04:00
2016-09-27 21:52:00 -04:00
2016-05-08 23:46:14 -04:00
2016-04-26 12:00:48 -04:00
2017-01-09 16:07:38 -05:00
2017-01-29 19:17:23 -05:00
2017-01-10 18:31:55 -08:00
2016-05-20 17:58:30 -07:00
2016-11-17 08:33:20 -07:00
2016-12-16 00:13:38 +02:00
2016-12-16 00:13:32 +02:00
2016-04-30 09:26:55 -07:00