aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@parallels.com>2011-12-14 21:43:44 -0500
committerDavid S. Miller <davem@davemloft.net>2011-12-16 13:48:27 -0500
commitf65c1b534b99aef1809b893387b295963821549f (patch)
tree0718e1598b4d01c4c1817a3c663a312616f0dddd /net/core
parentaec8dc62f66199aef153d86e1f90d9c1d14696e3 (diff)
sock_diag: Generalize requests cookies managements
The sk address is used as a cookie between dump/get_exact calls. It will be required for unix socket sdumping, so move it from inet_diag to sock_diag. Signed-off-by: Pavel Emelyanov <xemul@parallels.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/sock_diag.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
index cee96f368108..711bdefe7753 100644
--- a/net/core/sock_diag.c
+++ b/net/core/sock_diag.c
@@ -12,6 +12,25 @@ static struct sock_diag_handler *sock_diag_handlers[AF_MAX];
12static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh); 12static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh);
13static DEFINE_MUTEX(sock_diag_table_mutex); 13static DEFINE_MUTEX(sock_diag_table_mutex);
14 14
15int sock_diag_check_cookie(void *sk, __u32 *cookie)
16{
17 if ((cookie[0] != INET_DIAG_NOCOOKIE ||
18 cookie[1] != INET_DIAG_NOCOOKIE) &&
19 ((u32)(unsigned long)sk != cookie[0] ||
20 (u32)((((unsigned long)sk) >> 31) >> 1) != cookie[1]))
21 return -ESTALE;
22 else
23 return 0;
24}
25EXPORT_SYMBOL_GPL(sock_diag_check_cookie);
26
27void sock_diag_save_cookie(void *sk, __u32 *cookie)
28{
29 cookie[0] = (u32)(unsigned long)sk;
30 cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1);
31}
32EXPORT_SYMBOL_GPL(sock_diag_save_cookie);
33
15void sock_diag_register_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh)) 34void sock_diag_register_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh))
16{ 35{
17 mutex_lock(&sock_diag_table_mutex); 36 mutex_lock(&sock_diag_table_mutex);