diff options
author | Pavel Emelyanov <xemul@parallels.com> | 2011-12-14 21:43:44 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-12-16 13:48:27 -0500 |
commit | f65c1b534b99aef1809b893387b295963821549f (patch) | |
tree | 0718e1598b4d01c4c1817a3c663a312616f0dddd /net/core | |
parent | aec8dc62f66199aef153d86e1f90d9c1d14696e3 (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.c | 19 |
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]; | |||
12 | static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh); | 12 | static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh); |
13 | static DEFINE_MUTEX(sock_diag_table_mutex); | 13 | static DEFINE_MUTEX(sock_diag_table_mutex); |
14 | 14 | ||
15 | int 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 | } | ||
25 | EXPORT_SYMBOL_GPL(sock_diag_check_cookie); | ||
26 | |||
27 | void 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 | } | ||
32 | EXPORT_SYMBOL_GPL(sock_diag_save_cookie); | ||
33 | |||
15 | void sock_diag_register_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh)) | 34 | void 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); |