net: add real socket cookies
A long standing problem in netlink socket dumps is the use of kernel socket addresses as cookies. 1) It is a security concern. 2) Sockets can be reused quite quickly, so there is no guarantee a cookie is used once and identify a flow. 3) request sock, establish sock, and timewait socks for a given flow have different cookies. Part of our effort to bring better TCP statistics requires to switch to a different allocator. In this patch, I chose to use a per network namespace 64bit generator, and to use it only in the case a socket needs to be dumped to netlink. (This might be refined later if needed) Note that I tried to carry cookies from request sock, to establish sock, then timewait sockets. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Eric Salo <salo@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
654eff4516
commit
33cf7c90fe
@@ -199,6 +199,8 @@ struct sock_common {
|
||||
struct in6_addr skc_v6_rcv_saddr;
|
||||
#endif
|
||||
|
||||
atomic64_t skc_cookie;
|
||||
|
||||
/*
|
||||
* fields between dontcopy_begin/dontcopy_end
|
||||
* are not copied in sock_copy()
|
||||
@@ -329,6 +331,7 @@ struct sock {
|
||||
#define sk_net __sk_common.skc_net
|
||||
#define sk_v6_daddr __sk_common.skc_v6_daddr
|
||||
#define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr
|
||||
#define sk_cookie __sk_common.skc_cookie
|
||||
|
||||
socket_lock_t sk_lock;
|
||||
struct sk_buff_head sk_receive_queue;
|
||||
|
||||
Reference in New Issue
Block a user