Files
linux/include/net
Lorenzo Colitti 86741ec254 net: core: Add a UID field to struct sock.
Protocol sockets (struct sock) don't have UIDs, but most of the
time, they map 1:1 to userspace sockets (struct socket) which do.

Various operations such as the iptables xt_owner match need
access to the "UID of a socket", and do so by following the
backpointer to the struct socket. This involves taking
sk_callback_lock and doesn't work when there is no socket
because userspace has already called close().

Simplify this by adding a sk_uid field to struct sock whose value
matches the UID of the corresponding struct socket. The semantics
are as follows:

1. Whenever sk_socket is non-null: sk_uid is the same as the UID
   in sk_socket, i.e., matches the return value of sock_i_uid.
   Specifically, the UID is set when userspace calls socket(),
   fchown(), or accept().
2. When sk_socket is NULL, sk_uid is defined as follows:
   - For a socket that no longer has a sk_socket because
     userspace has called close(): the previous UID.
   - For a cloned socket (e.g., an incoming connection that is
     established but on which userspace has not yet called
     accept): the UID of the socket it was cloned from.
   - For a socket that has never had an sk_socket: UID 0 inside
     the user namespace corresponding to the network namespace
     the socket belongs to.

Kernel sockets created by sock_create_kern are a special case
of #1 and sk_uid is the user that created them. For kernel
sockets created at network namespace creation time, such as the
per-processor ICMP and TCP sockets, this is the user that created
the network namespace.

Signed-off-by: Lorenzo Colitti <lorenzo@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-11-04 14:45:22 -04:00
..
2015-03-04 00:23:23 -05:00
2015-06-28 16:55:44 -07:00
2016-09-27 21:15:21 -04:00
2015-11-18 16:17:38 -05:00
2016-06-27 15:06:17 -04:00
2016-07-08 12:20:57 +02:00
2016-04-25 16:44:27 -04:00
2016-04-25 16:44:27 -04:00
2016-06-09 23:41:03 -07:00
2015-03-06 21:50:02 -05:00
2016-08-26 11:55:18 -07:00
2015-09-17 17:18:37 -07:00
2016-09-23 08:38:50 -04:00
2016-02-16 20:21:48 -05:00
2016-06-08 11:36:02 -07:00
2016-05-20 18:03:16 -04:00
2016-04-27 22:48:25 -04:00
2016-10-14 10:59:15 -04:00
2016-05-20 18:03:17 -04:00
2016-11-03 15:41:11 -04:00
2016-10-26 17:33:22 -04:00
2016-08-17 19:36:23 -04:00
2016-10-23 17:45:01 -04:00
2015-10-23 06:26:42 -07:00
2016-10-03 02:00:22 -04:00
2016-10-04 02:11:51 -04:00
2016-06-15 20:41:23 -07:00
2016-07-08 12:20:57 +02:00
2016-03-23 22:09:58 -04:00
2016-04-07 16:53:30 -04:00
2016-09-10 23:12:53 -07:00
2015-03-12 22:58:12 -04:00
2016-05-03 16:08:14 -04:00
2015-10-26 22:24:22 -07:00
2016-10-29 20:56:31 -04:00