[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <20181214224007.54813-5-cpaasch@apple.com>
Date: Fri, 14 Dec 2018 14:40:06 -0800
From: Christoph Paasch <cpaasch@...le.com>
To: netdev@...r.kernel.org
Cc: Eric Dumazet <edumazet@...gle.com>,
Yuchung Cheng <ycheng@...gle.com>,
David Miller <davem@...emloft.net>
Subject: [PATCH net-next 4/5] tcp: Allow getsockopt of listener's keypool
Allow to get the full list of the listener's keypool through a
getsockopt.
Signed-off-by: Christoph Paasch <cpaasch@...le.com>
---
net/ipv4/tcp.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 27e2f6837062..cdb317392138 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -3420,21 +3420,24 @@ static int do_tcp_getsockopt(struct sock *sk, int level,
return 0;
case TCP_FASTOPEN_KEY: {
- __u8 key[TCP_FASTOPEN_KEY_LENGTH];
+ __u8 key[TCP_FASTOPEN_KEY_LENGTH * TCP_FASTOPEN_CTXT_LEN];
struct tcp_fastopen_context *ctx;
+ unsigned int key_len = 0;
if (get_user(len, optlen))
return -EFAULT;
rcu_read_lock();
ctx = rcu_dereference(icsk->icsk_accept_queue.fastopenq.ctx);
- if (ctx)
- memcpy(key, ctx->key, sizeof(key));
- else
- len = 0;
+ while (ctx) {
+ memcpy(&key[key_len], ctx->key, TCP_FASTOPEN_KEY_LENGTH);
+
+ key_len += TCP_FASTOPEN_KEY_LENGTH;
+ ctx = rcu_dereference(ctx->next);
+ }
rcu_read_unlock();
- len = min_t(unsigned int, len, sizeof(key));
+ len = min_t(unsigned int, len, key_len);
if (put_user(len, optlen))
return -EFAULT;
if (copy_to_user(optval, key, len))
--
2.16.2
Powered by blists - more mailing lists