aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/net.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-10-19 19:45:46 -0400
committerDavid S. Miller <davem@davemloft.net>2013-10-19 19:45:46 -0400
commit7dcade390860712551a4feb080911d5002226188 (patch)
tree68768a3e760a90b2b13a8e7a83d573c0e63a4a35 /include/linux/net.h
parent53481da372851a5506deb5247302f75459b472b4 (diff)
parente34c9a69970d8664a36b46e6445a7cc879111cfd (diff)
Merge branch 'net_get_random_once'
Hannes Frederic Sowa says: ==================== This series implements support for delaying the initialization of secret keys, e.g. used for hashing, for as long as possible. This functionality is implemented by a new macro, net_get_random_bytes. I already used it to protect the socket hashes, the syncookie secret (most important) and the tcp_fastopen secrets. Changelog: v2) Use static_keys in net_get_random_once to have as minimal impact to the fast-path as possible. v3) added patch "static_key: WARN on usage before jump_label_init was called": Patch "x86/jump_label: expect default_nop if static_key gets enabled on boot-up" relaxes the checks for using static_key primitives before jump_label_init. So tighten them first. v4) Update changelog on the patch "static_key: WARN on usage before jump_label_init was called" Included patches: ipv4: split inet_ehashfn to hash functions per compilation unit ipv6: split inet6_ehashfn to hash functions per compilation unit static_key: WARN on usage before jump_label_init was called x86/jump_label: expect default_nop if static_key gets enabled on boot-up net: introduce new macro net_get_random_once inet: split syncookie keys for ipv4 and ipv6 and initialize with net_get_random_once inet: convert inet_ehash_secret and ipv6_hash_secret to net_get_random_once tcp: switch tcp_fastopen key generation to net_get_random_once net: switch net_secret key generation to net_get_random_once ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/net.h')
-rw-r--r--include/linux/net.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/linux/net.h b/include/linux/net.h
index ca9ec8540905..a489705f6fa3 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -239,6 +239,31 @@ do { \
239#define net_random() prandom_u32() 239#define net_random() prandom_u32()
240#define net_srandom(seed) prandom_seed((__force u32)(seed)) 240#define net_srandom(seed) prandom_seed((__force u32)(seed))
241 241
242bool __net_get_random_once(void *buf, int nbytes, bool *done,
243 struct static_key *done_key);
244
245#ifdef HAVE_JUMP_LABEL
246#define ___NET_RANDOM_STATIC_KEY_INIT ((struct static_key) \
247 { .enabled = ATOMIC_INIT(0), .entries = (void *)1 })
248#else /* !HAVE_JUMP_LABEL */
249#define ___NET_RANDOM_STATIC_KEY_INIT STATIC_KEY_INIT_FALSE
250#endif /* HAVE_JUMP_LABEL */
251
252/* BE CAREFUL: this function is not interrupt safe */
253#define net_get_random_once(buf, nbytes) \
254 ({ \
255 bool ___ret = false; \
256 static bool ___done = false; \
257 static struct static_key ___done_key = \
258 ___NET_RANDOM_STATIC_KEY_INIT; \
259 if (!static_key_true(&___done_key)) \
260 ___ret = __net_get_random_once(buf, \
261 nbytes, \
262 &___done, \
263 &___done_key); \
264 ___ret; \
265 })
266
242int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec, 267int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
243 size_t num, size_t len); 268 size_t num, size_t len);
244int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec, 269int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,