stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, Denis Kirjanov <kda@linux-powerpc.org>,
	"Jason A. Donenfeld" <Jason@zx2c4.com>,
	"Eric Dumazet" <eric.dumazet@gmail.com>,
	"David Laight" <David.Laight@aculab.com>,
	"Linus Torvalds" <torvalds@linux-foundation.org>,
	"Eric Biggers" <ebiggers3@gmail.com>,
	"Jean-Philippe Aumasson" <jeanphilippe.aumasson@gmail.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.16 154/157] siphash: add cryptographically secure PRF
Date: Sat, 10 Aug 2019 21:40:07 +0100	[thread overview]
Message-ID: <lsq.1565469607.377616907@decadent.org.uk> (raw)
In-Reply-To: <lsq.1565469607.188083258@decadent.org.uk>

3.16.72-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Jason A. Donenfeld" <Jason@zx2c4.com>

commit 2c956a60778cbb6a27e0c7a8a52a91378c90e1d1 upstream.

SipHash is a 64-bit keyed hash function that is actually a
cryptographically secure PRF, like HMAC. Except SipHash is super fast,
and is meant to be used as a hashtable keyed lookup function, or as a
general PRF for short input use cases, such as sequence numbers or RNG
chaining.

For the first usage:

There are a variety of attacks known as "hashtable poisoning" in which an
attacker forms some data such that the hash of that data will be the
same, and then preceeds to fill up all entries of a hashbucket. This is
a realistic and well-known denial-of-service vector. Currently
hashtables use jhash, which is fast but not secure, and some kind of
rotating key scheme (or none at all, which isn't good). SipHash is meant
as a replacement for jhash in these cases.

There are a modicum of places in the kernel that are vulnerable to
hashtable poisoning attacks, either via userspace vectors or network
vectors, and there's not a reliable mechanism inside the kernel at the
moment to fix it. The first step toward fixing these issues is actually
getting a secure primitive into the kernel for developers to use. Then
we can, bit by bit, port things over to it as deemed appropriate.

While SipHash is extremely fast for a cryptographically secure function,
it is likely a bit slower than the insecure jhash, and so replacements
will be evaluated on a case-by-case basis based on whether or not the
difference in speed is negligible and whether or not the current jhash usage
poses a real security risk.

For the second usage:

A few places in the kernel are using MD5 or SHA1 for creating secure
sequence numbers, syn cookies, port numbers, or fast random numbers.
SipHash is a faster and more fitting, and more secure replacement for MD5
in those situations. Replacing MD5 and SHA1 with SipHash for these uses is
obvious and straight-forward, and so is submitted along with this patch
series. There shouldn't be much of a debate over its efficacy.

Dozens of languages are already using this internally for their hash
tables and PRFs. Some of the BSDs already use this in their kernels.
SipHash is a widely known high-speed solution to a widely known set of
problems, and it's time we catch-up.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Eric Biggers <ebiggers3@gmail.com>
Cc: David Laight <David.Laight@aculab.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 Documentation/siphash.txt | 100 ++++++++++++++++
 MAINTAINERS               |   7 ++
 include/linux/siphash.h   |  85 ++++++++++++++
 lib/Kconfig.debug         |   6 +-
 lib/Makefile              |   5 +-
 lib/siphash.c             | 232 ++++++++++++++++++++++++++++++++++++++
 lib/test_siphash.c        | 131 +++++++++++++++++++++
 7 files changed, 561 insertions(+), 5 deletions(-)
 create mode 100644 Documentation/siphash.txt
 create mode 100644 include/linux/siphash.h
 create mode 100644 lib/siphash.c
 create mode 100644 lib/test_siphash.c

--- /dev/null
+++ b/Documentation/siphash.txt
@@ -0,0 +1,100 @@
+         SipHash - a short input PRF
+-----------------------------------------------
+Written by Jason A. Donenfeld <jason@zx2c4.com>
+
+SipHash is a cryptographically secure PRF -- a keyed hash function -- that
+performs very well for short inputs, hence the name. It was designed by
+cryptographers Daniel J. Bernstein and Jean-Philippe Aumasson. It is intended
+as a replacement for some uses of: `jhash`, `md5_transform`, `sha_transform`,
+and so forth.
+
+SipHash takes a secret key filled with randomly generated numbers and either
+an input buffer or several input integers. It spits out an integer that is
+indistinguishable from random. You may then use that integer as part of secure
+sequence numbers, secure cookies, or mask it off for use in a hash table.
+
+1. Generating a key
+
+Keys should always be generated from a cryptographically secure source of
+random numbers, either using get_random_bytes or get_random_once:
+
+siphash_key_t key;
+get_random_bytes(&key, sizeof(key));
+
+If you're not deriving your key from here, you're doing it wrong.
+
+2. Using the functions
+
+There are two variants of the function, one that takes a list of integers, and
+one that takes a buffer:
+
+u64 siphash(const void *data, size_t len, const siphash_key_t *key);
+
+And:
+
+u64 siphash_1u64(u64, const siphash_key_t *key);
+u64 siphash_2u64(u64, u64, const siphash_key_t *key);
+u64 siphash_3u64(u64, u64, u64, const siphash_key_t *key);
+u64 siphash_4u64(u64, u64, u64, u64, const siphash_key_t *key);
+u64 siphash_1u32(u32, const siphash_key_t *key);
+u64 siphash_2u32(u32, u32, const siphash_key_t *key);
+u64 siphash_3u32(u32, u32, u32, const siphash_key_t *key);
+u64 siphash_4u32(u32, u32, u32, u32, const siphash_key_t *key);
+
+If you pass the generic siphash function something of a constant length, it
+will constant fold at compile-time and automatically choose one of the
+optimized functions.
+
+3. Hashtable key function usage:
+
+struct some_hashtable {
+	DECLARE_HASHTABLE(hashtable, 8);
+	siphash_key_t key;
+};
+
+void init_hashtable(struct some_hashtable *table)
+{
+	get_random_bytes(&table->key, sizeof(table->key));
+}
+
+static inline hlist_head *some_hashtable_bucket(struct some_hashtable *table, struct interesting_input *input)
+{
+	return &table->hashtable[siphash(input, sizeof(*input), &table->key) & (HASH_SIZE(table->hashtable) - 1)];
+}
+
+You may then iterate like usual over the returned hash bucket.
+
+4. Security
+
+SipHash has a very high security margin, with its 128-bit key. So long as the
+key is kept secret, it is impossible for an attacker to guess the outputs of
+the function, even if being able to observe many outputs, since 2^128 outputs
+is significant.
+
+Linux implements the "2-4" variant of SipHash.
+
+5. Struct-passing Pitfalls
+
+Often times the XuY functions will not be large enough, and instead you'll
+want to pass a pre-filled struct to siphash. When doing this, it's important
+to always ensure the struct has no padding holes. The easiest way to do this
+is to simply arrange the members of the struct in descending order of size,
+and to use offsetendof() instead of sizeof() for getting the size. For
+performance reasons, if possible, it's probably a good thing to align the
+struct to the right boundary. Here's an example:
+
+const struct {
+	struct in6_addr saddr;
+	u32 counter;
+	u16 dport;
+} __aligned(SIPHASH_ALIGNMENT) combined = {
+	.saddr = *(struct in6_addr *)saddr,
+	.counter = counter,
+	.dport = dport
+};
+u64 h = siphash(&combined, offsetofend(typeof(combined), dport), &secret);
+
+6. Resources
+
+Read the SipHash paper if you're interested in learning more:
+https://131002.net/siphash/siphash.pdf
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8188,6 +8188,13 @@ F:	arch/arm/mach-s3c24xx/mach-bast.c
 F:	arch/arm/mach-s3c24xx/bast-ide.c
 F:	arch/arm/mach-s3c24xx/bast-irq.c
 
+SIPHASH PRF ROUTINES
+M:	Jason A. Donenfeld <Jason@zx2c4.com>
+S:	Maintained
+F:	lib/siphash.c
+F:	lib/test_siphash.c
+F:	include/linux/siphash.h
+
 TI DAVINCI MACHINE SUPPORT
 M:	Sekhar Nori <nsekhar@ti.com>
 M:	Kevin Hilman <khilman@deeprootsystems.com>
--- /dev/null
+++ b/include/linux/siphash.h
@@ -0,0 +1,85 @@
+/* Copyright (C) 2016 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This file is provided under a dual BSD/GPLv2 license.
+ *
+ * SipHash: a fast short-input PRF
+ * https://131002.net/siphash/
+ *
+ * This implementation is specifically for SipHash2-4.
+ */
+
+#ifndef _LINUX_SIPHASH_H
+#define _LINUX_SIPHASH_H
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+
+#define SIPHASH_ALIGNMENT __alignof__(u64)
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+u64 __siphash_aligned(const void *data, size_t len, const siphash_key_t *key);
+#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+u64 __siphash_unaligned(const void *data, size_t len, const siphash_key_t *key);
+#endif
+
+u64 siphash_1u64(const u64 a, const siphash_key_t *key);
+u64 siphash_2u64(const u64 a, const u64 b, const siphash_key_t *key);
+u64 siphash_3u64(const u64 a, const u64 b, const u64 c,
+		 const siphash_key_t *key);
+u64 siphash_4u64(const u64 a, const u64 b, const u64 c, const u64 d,
+		 const siphash_key_t *key);
+u64 siphash_1u32(const u32 a, const siphash_key_t *key);
+u64 siphash_3u32(const u32 a, const u32 b, const u32 c,
+		 const siphash_key_t *key);
+
+static inline u64 siphash_2u32(const u32 a, const u32 b,
+			       const siphash_key_t *key)
+{
+	return siphash_1u64((u64)b << 32 | a, key);
+}
+static inline u64 siphash_4u32(const u32 a, const u32 b, const u32 c,
+			       const u32 d, const siphash_key_t *key)
+{
+	return siphash_2u64((u64)b << 32 | a, (u64)d << 32 | c, key);
+}
+
+
+static inline u64 ___siphash_aligned(const __le64 *data, size_t len,
+				     const siphash_key_t *key)
+{
+	if (__builtin_constant_p(len) && len == 4)
+		return siphash_1u32(le32_to_cpup((const __le32 *)data), key);
+	if (__builtin_constant_p(len) && len == 8)
+		return siphash_1u64(le64_to_cpu(data[0]), key);
+	if (__builtin_constant_p(len) && len == 16)
+		return siphash_2u64(le64_to_cpu(data[0]), le64_to_cpu(data[1]),
+				    key);
+	if (__builtin_constant_p(len) && len == 24)
+		return siphash_3u64(le64_to_cpu(data[0]), le64_to_cpu(data[1]),
+				    le64_to_cpu(data[2]), key);
+	if (__builtin_constant_p(len) && len == 32)
+		return siphash_4u64(le64_to_cpu(data[0]), le64_to_cpu(data[1]),
+				    le64_to_cpu(data[2]), le64_to_cpu(data[3]),
+				    key);
+	return __siphash_aligned(data, len, key);
+}
+
+/**
+ * siphash - compute 64-bit siphash PRF value
+ * @data: buffer to hash
+ * @size: size of @data
+ * @key: the siphash key
+ */
+static inline u64 siphash(const void *data, size_t len,
+			  const siphash_key_t *key)
+{
+#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+	if (!IS_ALIGNED((unsigned long)data, SIPHASH_ALIGNMENT))
+		return __siphash_unaligned(data, len, key);
+#endif
+	return ___siphash_aligned(data, len, key);
+}
+
+#endif /* _LINUX_SIPHASH_H */
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1550,6 +1550,16 @@ config TEST_STRING_HELPERS
 config TEST_KSTRTOX
 	tristate "Test kstrto*() family of functions at runtime"
 
+config TEST_HASH
+	tristate "Perform selftest on hash functions"
+	default n
+	help
+	  Enable this option to test the kernel's siphash (<linux/siphash.h>)
+	  hash functions on boot (or module load).
+
+	  This is intended to help people writing architecture-specific
+	  optimized versions.  If unsure, say N.
+
 endmenu # runtime tests
 
 config PROVIDE_OHCI1394_DMA_INIT
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -26,10 +26,11 @@ obj-y += bcd.o div64.o sort.o parser.o h
 	 bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \
 	 gcd.o lcm.o list_sort.o uuid.o flex_array.o iovec.o clz_ctz.o \
 	 bsearch.o find_last_bit.o find_next_bit.o llist.o memweight.o kfifo.o \
-	 percpu-refcount.o percpu_ida.o hash.o
+	 percpu-refcount.o percpu_ida.o hash.o siphash.o
 obj-y += string_helpers.o
 obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o
 obj-y += kstrtox.o
+obj-$(CONFIG_TEST_HASH) += test_siphash.o
 obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o
 obj-$(CONFIG_TEST_MODULE) += test_module.o
 obj-$(CONFIG_TEST_USER_COPY) += test_user_copy.o
--- /dev/null
+++ b/lib/siphash.c
@@ -0,0 +1,232 @@
+/* Copyright (C) 2016 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This file is provided under a dual BSD/GPLv2 license.
+ *
+ * SipHash: a fast short-input PRF
+ * https://131002.net/siphash/
+ *
+ * This implementation is specifically for SipHash2-4.
+ */
+
+#include <linux/siphash.h>
+#include <asm/unaligned.h>
+
+#if defined(CONFIG_DCACHE_WORD_ACCESS) && BITS_PER_LONG == 64
+#include <linux/dcache.h>
+#include <asm/word-at-a-time.h>
+#endif
+
+#define SIPROUND \
+	do { \
+	v0 += v1; v1 = rol64(v1, 13); v1 ^= v0; v0 = rol64(v0, 32); \
+	v2 += v3; v3 = rol64(v3, 16); v3 ^= v2; \
+	v0 += v3; v3 = rol64(v3, 21); v3 ^= v0; \
+	v2 += v1; v1 = rol64(v1, 17); v1 ^= v2; v2 = rol64(v2, 32); \
+	} while (0)
+
+#define PREAMBLE(len) \
+	u64 v0 = 0x736f6d6570736575ULL; \
+	u64 v1 = 0x646f72616e646f6dULL; \
+	u64 v2 = 0x6c7967656e657261ULL; \
+	u64 v3 = 0x7465646279746573ULL; \
+	u64 b = ((u64)(len)) << 56; \
+	v3 ^= key->key[1]; \
+	v2 ^= key->key[0]; \
+	v1 ^= key->key[1]; \
+	v0 ^= key->key[0];
+
+#define POSTAMBLE \
+	v3 ^= b; \
+	SIPROUND; \
+	SIPROUND; \
+	v0 ^= b; \
+	v2 ^= 0xff; \
+	SIPROUND; \
+	SIPROUND; \
+	SIPROUND; \
+	SIPROUND; \
+	return (v0 ^ v1) ^ (v2 ^ v3);
+
+u64 __siphash_aligned(const void *data, size_t len, const siphash_key_t *key)
+{
+	const u8 *end = data + len - (len % sizeof(u64));
+	const u8 left = len & (sizeof(u64) - 1);
+	u64 m;
+	PREAMBLE(len)
+	for (; data != end; data += sizeof(u64)) {
+		m = le64_to_cpup(data);
+		v3 ^= m;
+		SIPROUND;
+		SIPROUND;
+		v0 ^= m;
+	}
+#if defined(CONFIG_DCACHE_WORD_ACCESS) && BITS_PER_LONG == 64
+	if (left)
+		b |= le64_to_cpu((__force __le64)(load_unaligned_zeropad(data) &
+						  bytemask_from_count(left)));
+#else
+	switch (left) {
+	case 7: b |= ((u64)end[6]) << 48;
+	case 6: b |= ((u64)end[5]) << 40;
+	case 5: b |= ((u64)end[4]) << 32;
+	case 4: b |= le32_to_cpup(data); break;
+	case 3: b |= ((u64)end[2]) << 16;
+	case 2: b |= le16_to_cpup(data); break;
+	case 1: b |= end[0];
+	}
+#endif
+	POSTAMBLE
+}
+EXPORT_SYMBOL(__siphash_aligned);
+
+#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+u64 __siphash_unaligned(const void *data, size_t len, const siphash_key_t *key)
+{
+	const u8 *end = data + len - (len % sizeof(u64));
+	const u8 left = len & (sizeof(u64) - 1);
+	u64 m;
+	PREAMBLE(len)
+	for (; data != end; data += sizeof(u64)) {
+		m = get_unaligned_le64(data);
+		v3 ^= m;
+		SIPROUND;
+		SIPROUND;
+		v0 ^= m;
+	}
+#if defined(CONFIG_DCACHE_WORD_ACCESS) && BITS_PER_LONG == 64
+	if (left)
+		b |= le64_to_cpu((__force __le64)(load_unaligned_zeropad(data) &
+						  bytemask_from_count(left)));
+#else
+	switch (left) {
+	case 7: b |= ((u64)end[6]) << 48;
+	case 6: b |= ((u64)end[5]) << 40;
+	case 5: b |= ((u64)end[4]) << 32;
+	case 4: b |= get_unaligned_le32(end); break;
+	case 3: b |= ((u64)end[2]) << 16;
+	case 2: b |= get_unaligned_le16(end); break;
+	case 1: b |= end[0];
+	}
+#endif
+	POSTAMBLE
+}
+EXPORT_SYMBOL(__siphash_unaligned);
+#endif
+
+/**
+ * siphash_1u64 - compute 64-bit siphash PRF value of a u64
+ * @first: first u64
+ * @key: the siphash key
+ */
+u64 siphash_1u64(const u64 first, const siphash_key_t *key)
+{
+	PREAMBLE(8)
+	v3 ^= first;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= first;
+	POSTAMBLE
+}
+EXPORT_SYMBOL(siphash_1u64);
+
+/**
+ * siphash_2u64 - compute 64-bit siphash PRF value of 2 u64
+ * @first: first u64
+ * @second: second u64
+ * @key: the siphash key
+ */
+u64 siphash_2u64(const u64 first, const u64 second, const siphash_key_t *key)
+{
+	PREAMBLE(16)
+	v3 ^= first;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= first;
+	v3 ^= second;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= second;
+	POSTAMBLE
+}
+EXPORT_SYMBOL(siphash_2u64);
+
+/**
+ * siphash_3u64 - compute 64-bit siphash PRF value of 3 u64
+ * @first: first u64
+ * @second: second u64
+ * @third: third u64
+ * @key: the siphash key
+ */
+u64 siphash_3u64(const u64 first, const u64 second, const u64 third,
+		 const siphash_key_t *key)
+{
+	PREAMBLE(24)
+	v3 ^= first;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= first;
+	v3 ^= second;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= second;
+	v3 ^= third;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= third;
+	POSTAMBLE
+}
+EXPORT_SYMBOL(siphash_3u64);
+
+/**
+ * siphash_4u64 - compute 64-bit siphash PRF value of 4 u64
+ * @first: first u64
+ * @second: second u64
+ * @third: third u64
+ * @forth: forth u64
+ * @key: the siphash key
+ */
+u64 siphash_4u64(const u64 first, const u64 second, const u64 third,
+		 const u64 forth, const siphash_key_t *key)
+{
+	PREAMBLE(32)
+	v3 ^= first;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= first;
+	v3 ^= second;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= second;
+	v3 ^= third;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= third;
+	v3 ^= forth;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= forth;
+	POSTAMBLE
+}
+EXPORT_SYMBOL(siphash_4u64);
+
+u64 siphash_1u32(const u32 first, const siphash_key_t *key)
+{
+	PREAMBLE(4)
+	b |= first;
+	POSTAMBLE
+}
+EXPORT_SYMBOL(siphash_1u32);
+
+u64 siphash_3u32(const u32 first, const u32 second, const u32 third,
+		 const siphash_key_t *key)
+{
+	u64 combined = (u64)second << 32 | first;
+	PREAMBLE(12)
+	v3 ^= combined;
+	SIPROUND;
+	SIPROUND;
+	v0 ^= combined;
+	b |= third;
+	POSTAMBLE
+}
+EXPORT_SYMBOL(siphash_3u32);
--- /dev/null
+++ b/lib/test_siphash.c
@@ -0,0 +1,131 @@
+/* Test cases for siphash.c
+ *
+ * Copyright (C) 2016 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This file is provided under a dual BSD/GPLv2 license.
+ *
+ * SipHash: a fast short-input PRF
+ * https://131002.net/siphash/
+ *
+ * This implementation is specifically for SipHash2-4.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/siphash.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/module.h>
+
+/* Test vectors taken from official reference source available at:
+ *     https://131002.net/siphash/siphash24.c
+ */
+
+static const siphash_key_t test_key_siphash =
+	{{ 0x0706050403020100ULL, 0x0f0e0d0c0b0a0908ULL }};
+
+static const u64 test_vectors_siphash[64] = {
+	0x726fdb47dd0e0e31ULL, 0x74f839c593dc67fdULL, 0x0d6c8009d9a94f5aULL,
+	0x85676696d7fb7e2dULL, 0xcf2794e0277187b7ULL, 0x18765564cd99a68dULL,
+	0xcbc9466e58fee3ceULL, 0xab0200f58b01d137ULL, 0x93f5f5799a932462ULL,
+	0x9e0082df0ba9e4b0ULL, 0x7a5dbbc594ddb9f3ULL, 0xf4b32f46226bada7ULL,
+	0x751e8fbc860ee5fbULL, 0x14ea5627c0843d90ULL, 0xf723ca908e7af2eeULL,
+	0xa129ca6149be45e5ULL, 0x3f2acc7f57c29bdbULL, 0x699ae9f52cbe4794ULL,
+	0x4bc1b3f0968dd39cULL, 0xbb6dc91da77961bdULL, 0xbed65cf21aa2ee98ULL,
+	0xd0f2cbb02e3b67c7ULL, 0x93536795e3a33e88ULL, 0xa80c038ccd5ccec8ULL,
+	0xb8ad50c6f649af94ULL, 0xbce192de8a85b8eaULL, 0x17d835b85bbb15f3ULL,
+	0x2f2e6163076bcfadULL, 0xde4daaaca71dc9a5ULL, 0xa6a2506687956571ULL,
+	0xad87a3535c49ef28ULL, 0x32d892fad841c342ULL, 0x7127512f72f27cceULL,
+	0xa7f32346f95978e3ULL, 0x12e0b01abb051238ULL, 0x15e034d40fa197aeULL,
+	0x314dffbe0815a3b4ULL, 0x027990f029623981ULL, 0xcadcd4e59ef40c4dULL,
+	0x9abfd8766a33735cULL, 0x0e3ea96b5304a7d0ULL, 0xad0c42d6fc585992ULL,
+	0x187306c89bc215a9ULL, 0xd4a60abcf3792b95ULL, 0xf935451de4f21df2ULL,
+	0xa9538f0419755787ULL, 0xdb9acddff56ca510ULL, 0xd06c98cd5c0975ebULL,
+	0xe612a3cb9ecba951ULL, 0xc766e62cfcadaf96ULL, 0xee64435a9752fe72ULL,
+	0xa192d576b245165aULL, 0x0a8787bf8ecb74b2ULL, 0x81b3e73d20b49b6fULL,
+	0x7fa8220ba3b2eceaULL, 0x245731c13ca42499ULL, 0xb78dbfaf3a8d83bdULL,
+	0xea1ad565322a1a0bULL, 0x60e61c23a3795013ULL, 0x6606d7e446282b93ULL,
+	0x6ca4ecb15c5f91e1ULL, 0x9f626da15c9625f3ULL, 0xe51b38608ef25f57ULL,
+	0x958a324ceb064572ULL
+};
+
+static int __init siphash_test_init(void)
+{
+	u8 in[64] __aligned(SIPHASH_ALIGNMENT);
+	u8 in_unaligned[65] __aligned(SIPHASH_ALIGNMENT);
+	u8 i;
+	int ret = 0;
+
+	for (i = 0; i < 64; ++i) {
+		in[i] = i;
+		in_unaligned[i + 1] = i;
+		if (siphash(in, i, &test_key_siphash) !=
+						test_vectors_siphash[i]) {
+			pr_info("siphash self-test aligned %u: FAIL\n", i + 1);
+			ret = -EINVAL;
+		}
+		if (siphash(in_unaligned + 1, i, &test_key_siphash) !=
+						test_vectors_siphash[i]) {
+			pr_info("siphash self-test unaligned %u: FAIL\n", i + 1);
+			ret = -EINVAL;
+		}
+	}
+	if (siphash_1u64(0x0706050403020100ULL, &test_key_siphash) !=
+						test_vectors_siphash[8]) {
+		pr_info("siphash self-test 1u64: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_2u64(0x0706050403020100ULL, 0x0f0e0d0c0b0a0908ULL,
+			 &test_key_siphash) != test_vectors_siphash[16]) {
+		pr_info("siphash self-test 2u64: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_3u64(0x0706050403020100ULL, 0x0f0e0d0c0b0a0908ULL,
+			 0x1716151413121110ULL, &test_key_siphash) !=
+						test_vectors_siphash[24]) {
+		pr_info("siphash self-test 3u64: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_4u64(0x0706050403020100ULL, 0x0f0e0d0c0b0a0908ULL,
+			 0x1716151413121110ULL, 0x1f1e1d1c1b1a1918ULL,
+			 &test_key_siphash) != test_vectors_siphash[32]) {
+		pr_info("siphash self-test 4u64: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_1u32(0x03020100U, &test_key_siphash) !=
+						test_vectors_siphash[4]) {
+		pr_info("siphash self-test 1u32: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_2u32(0x03020100U, 0x07060504U, &test_key_siphash) !=
+						test_vectors_siphash[8]) {
+		pr_info("siphash self-test 2u32: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_3u32(0x03020100U, 0x07060504U,
+			 0x0b0a0908U, &test_key_siphash) !=
+						test_vectors_siphash[12]) {
+		pr_info("siphash self-test 3u32: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (siphash_4u32(0x03020100U, 0x07060504U,
+			 0x0b0a0908U, 0x0f0e0d0cU, &test_key_siphash) !=
+						test_vectors_siphash[16]) {
+		pr_info("siphash self-test 4u32: FAIL\n");
+		ret = -EINVAL;
+	}
+	if (!ret)
+		pr_info("self-tests: pass\n");
+	return ret;
+}
+
+static void __exit siphash_test_exit(void)
+{
+}
+
+module_init(siphash_test_init);
+module_exit(siphash_test_exit);
+
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
+MODULE_LICENSE("Dual BSD/GPL");


  parent reply	other threads:[~2019-08-10 20:49 UTC|newest]

Thread overview: 164+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-10 20:40 [PATCH 3.16 000/157] 3.16.72-rc1 review Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 121/157] x86: cpufeatures: Renumber feature word 7 Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 150/157] ipv6: call ipv6_proxy_select_ident instead of ipv6_select_ident in udp6_ufo_fragment Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 071/157] ALSA: seq: Fix OOB-reads from strlcpy Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 148/157] ipv6: Fix fragment id assignment on LE arches Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 083/157] locking/lockdep: Add IRQs disabled/enabled assertion APIs: lockdep_assert_irqs_enabled()/disabled() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 105/157] cifs: do not attempt cifs operation on smb2+ rename error Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 008/157] ext4: fix data corruption caused by unaligned direct AIO Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 030/157] tcp: do not use ipv6 header for ipv4 flow Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 123/157] x86/entry/64: Really create an error-entry-from-usermode code path Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 015/157] netfilter: bridge: set skb transport_header before entering NF_INET_PRE_ROUTING Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 130/157] vhost_net: use packet weight for rx handler, too Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 156/157] netfilter: ctnetlink: don't use conntrack/expect object addresses as id Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 029/157] net-sysfs: call dev_hold if kobject_init_and_add success Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 147/157] Revert "drivers/net, ipv6: Select IPv6 fragment idents for virtio UFO packets" Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 131/157] vhost_net: introduce vhost_exceeds_weight() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 149/157] ipv6: Make __ipv6_select_ident static Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 099/157] mm/vmstat.c: fix /proc/vmstat format for CONFIG_DEBUG_TLBFLUSH=y CONFIG_SMP=n Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 018/157] mac8390: Fix mmio access size probe Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 116/157] ipv6/flowlabel: wait rcu grace period before put_pid() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 152/157] ipv4: ip_tunnel: use net namespace from rtable not socket Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 023/157] serial: max310x: Fix to avoid potential NULL pointer dereference Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 028/157] perf tests: Fix a memory leak in test__perf_evsel__tp_sched_test() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 085/157] MIPS: scall64-o32: Fix indirect syscall number load Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 137/157] powerpc/tm: Fix oops on sigreturn on systems without TM Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 025/157] tty: mxs-auart: fix a potential NULL pointer dereference Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 019/157] sctp: get sctphdr by offset in sctp_compute_cksum Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 011/157] iio: dac: mcp4725: add missing powerdown bits in store eeprom Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 094/157] ALSA: core: Fix card races between register and disconnect Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 048/157] ALSA: pcm: Don't suspend stream in unrecoverable PCM state Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 079/157] net: bridge: multicast: use rcu to access port list from br_multicast_start_querier Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 058/157] iio: core: fix a possible circular locking dependency Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 095/157] tipc: set sysctl_tipc_rmem and named_timeout right range Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 078/157] block: do not leak memory in bio_copy_user_iov() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 056/157] KVM: x86: Emulate MSR_IA32_ARCH_CAPABILITIES on AMD hosts Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 134/157] vhost: scsi: add weight support Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 081/157] rt2x00: do not increment sequence number while re-transmitting Ben Hutchings
2019-08-10 20:40 ` Ben Hutchings [this message]
2019-08-10 20:40 ` [PATCH 3.16 100/157] USB: core: Fix bug caused by duplicate interface PM usage counter Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 003/157] Staging: iio: meter: fixed typo Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 070/157] xen: Prevent buffer overflow in privcmd ioctl Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 009/157] ext4: add missing brelse() in add_new_gdb_meta_bg() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 109/157] usb: usbip: fix isoc packet num validation in get_pipe Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 074/157] lib/string.c: implement a basic bcmp Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 050/157] scsi: zfcp: fix rport unblock if deleted SCSI devices on Scsi_Host Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 157/157] scsi: libsas: fix a race condition when smp task timeout Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 024/157] tty: atmel_serial: fix a potential NULL pointer dereference Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 064/157] sched/fair: Do not re-read ->h_load_next during hierarchical load calculation Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 103/157] mac80211: don't attempt to rename ERR_PTR() debugfs dirs Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 104/157] ceph: ensure d_name stability in ceph_dentry_hash() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 144/157] xen: let alloc_xenballooned_pages() fail if not enough memory free Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 002/157] xfrm: policy: Fix out-of-bound array accesses in __xfrm_policy_unlink Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 021/157] ARM: imx6q: cpuidle: fix bug that CPU might not wake up at expected time Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 115/157] ipv6: invert flowlabel sharing check in process and user mode Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 102/157] netfilter: ebtables: CONFIG_COMPAT: drop a bogus WARN_ON Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 051/157] scsi: zfcp: fix scsi_eh host reset with port_forced ERP for non-NPIV FCP devices Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 073/157] sunrpc: don't mark uninitialised items as VALID Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 026/157] serial: sh-sci: Fix setting SCSCR_TIE while transferring data Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 069/157] mtd: cfi: fix deadloop in cfi_cmdset_0002.c do_write_buffer Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 082/157] vxge: fix return of a free'd memblock on a failed dma mapping Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 062/157] xfrm4: Reload skb header pointers after calling pskb_may_pull Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 080/157] iommu/amd: Set exclusion range correctly Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 128/157] x86/speculation/swapgs: Exclude ATOMs from speculation through SWAPGS Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 139/157] floppy: fix out-of-bounds read in next_valid_format Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 119/157] packet: validate msg_namelen in send directly Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 091/157] cifs: fix handle leak in smb2_query_symlink() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 142/157] proc: meminfo: estimate available memory more conservatively Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 027/157] device_cgroup: fix RCU imbalance in error case Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 034/157] USB: serial: mos7720: fix mos_parport refcount imbalance on error path Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 042/157] xhci: Don't let USB3 ports stuck in polling state prevent suspend Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 063/157] xfrm4: Fix uninitialized memory read in _decode_session4 Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 031/157] dccp: do not use ipv6 header for ipv4 flow Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 145/157] Revert "inet: update the IP ID generation algorithm to higher standards." Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 132/157] vhost: introduce vhost_exceeds_weight() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 136/157] Input: gtco - bounds check collection indent level Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 114/157] slip: make slhc_free() silently accept an error pointer Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 001/157] ipv6: check sk sk_type and protocol early in ip_mroute_set/getsockopt Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 076/157] powerpc/vdso32: fix CLOCK_MONOTONIC on PPC64 Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 036/157] ALSA: rawmidi: Fix potential Spectre v1 vulnerability Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 155/157] inet: switch IP ID generator to siphash Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 127/157] x86/entry/64: Use JMP instead of JMPQ Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 061/157] xfrm4: Fix header checks in _decode_session4 Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 086/157] USB: core: Fix unterminated string returned by usb_string() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 111/157] l2tp: use rcu_dereference_sk_user_data() in l2tp_udp_encap_recv() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 075/157] xsysace: Fix error handling in ace_setup Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 140/157] floppy: fix invalid pointer dereference in drive_name Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 072/157] PCI: Add function 1 DMA alias quirk for Marvell 9170 SATA controller Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 065/157] btrfs: prop: fix vanished compression property after failed set Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 097/157] kprobes: Mark ftrace mcount handler functions nokprobe Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 012/157] IB/mlx4: Fix race condition between catas error reset and aliasguid flows Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 053/157] afs: Fix StoreData op marshalling Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 120/157] ufs: fix braino in ufs_get_inode_gid() for solaris UFS flavour Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 038/157] iommu/vt-d: Check capability before disabling protected memory Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 135/157] Bluetooth: hci_uart: check for missing tty operations Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 087/157] staging: comedi: vmk80xx: Fix use of uninitialized semaphore Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 153/157] ipv6: hash net ptr into fragmentation bucket selection Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 124/157] x86/entry/64: Fix context tracking state warning when load_gs_index fails Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 016/157] udf: Fix crash on IO error during truncate Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 045/157] batman-adv: Reduce claim hash refcnt only for removed entry Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 133/157] vhost_net: fix possible infinite loop Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 113/157] fs/proc/proc_sysctl.c: Fix a NULL pointer dereference Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 108/157] USB: w1 ds2490: Fix bug caused by improper use of altsetting array Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 112/157] trace: Fix preempt_enable_no_resched() abuse Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 138/157] floppy: fix div-by-zero in setup_format_params Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 092/157] CIFS: keep FileInfo handle live during oplock break Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 017/157] net: mac8390: Use standard memcpy_{from,to}io() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 007/157] perf/core: Restore mmap record type correctly Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 151/157] ipv4: hash net ptr into fragmentation bucket selection Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 125/157] x86/speculation: Prepare entry code for Spectre v1 swapgs mitigations Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 032/157] 3c515: fix integer overflow warning Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 010/157] xfrm6_tunnel: Fix potential panic when unloading xfrm6_tunnel module Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 006/157] iio: adc: at91: disable adc channel interrupt in timeout case Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 117/157] l2ip: fix possible use-after-free Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 093/157] sched/fair: Limit sched_cfs_period_timer() loop to avoid hard lockup Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 054/157] KVM: Reject device ioctls from processes other than the VM's creator Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 040/157] ALSA: pcm: Fix possible OOB access in PCM oss plugins Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 088/157] staging: comedi: vmk80xx: Fix possible double-free of ->usb_rx_buf Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 013/157] staging: speakup_soft: Fix alternate speech with other synths Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 090/157] tools lib traceevent: Fix missing equality check for strcmp Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 107/157] USB: yurex: Fix protection fault after device removal Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 014/157] powerpc/vdso64: Fix CLOCK_MONOTONIC inconsistencies across Y2038 Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 055/157] kvm: x86: IA32_ARCH_CAPABILITIES is always supported Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 046/157] batman-adv: Reduce tt_local hash refcnt only for removed entry Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 059/157] dm table: propagate BDI_CAP_STABLE_WRITES to fix sporadic checksum errors Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 004/157] iio: Use kmalloc_array() in iio_scan_mask_set() Ben Hutchings
2019-08-10 21:02   ` Joe Perches
2019-08-11 12:28     ` Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 049/157] net: phy: don't clear BMCR in genphy_soft_reset Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 084/157] x86/speculation: Prevent deadlock on ssb_state::lock Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 118/157] packet: in recvmsg msg_name return at least sizeof sockaddr_ll Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 077/157] ACPICA: Namespace: remove address node from global list after method termination Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 037/157] ALSA: seq: oss: Fix Spectre v1 vulnerability Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 110/157] sched/numa: Fix a possible divide-by-zero Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 033/157] ARM: dts: pfla02: increase phy reset duration Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 098/157] x86/kprobes: Avoid kretprobe recursion bug Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 041/157] gpio: adnp: Fix testing wrong value in adnp_gpio_direction_input Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 035/157] staging: rtl8712: uninitialized memory in read_bbreg_hdl() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 022/157] USB: serial: ftdi_sio: add additional NovaTech products Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 060/157] dccp: Fix memleak in __feat_register_sp Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 126/157] x86/speculation: Enable Spectre v1 swapgs mitigations Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 068/157] dm: disable DISCARD if the underlying storage no longer supports it Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 044/157] iio: ad_sigma_delta: select channel when reading register Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 096/157] x86/kprobes: Verify stack frame on kretprobe Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 101/157] team: fix possible recursive locking when add slaves Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 052/157] USB: serial: cp210x: add new device id Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 122/157] x86/asm/entry/64: Disentangle error_entry/exit gsbase/ebx/usermode code Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 129/157] vhost-net: set packet weight of tx polling to 2 * vq size Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 066/157] btrfs: correctly validate compression type Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 089/157] kvm: mmu: Fix overflow on kvm mmu page limit calculation Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 106/157] net/rose: fix unbound loop in rose_loopback_timer() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 020/157] NFS: fix mount/umount race in nlmclnt Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 146/157] ipv6: Select fragment id during UFO segmentation if not set Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 043/157] ext4: brelse all indirect buffer in ext4_ind_remove_space() Ben Hutchings
2019-08-13  4:06   ` [PATCH 3.16 043/157] ext4: brelse all indirect buffer inext4_ind_remove_space() Jari Ruusu
2019-08-13 11:37     ` Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 057/157] fs/proc/proc_sysctl.c: fix NULL pointer dereference in put_links Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 143/157] mm/page_alloc.c: calculate 'available' memory in a separate function Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 005/157] iio: Fix scan mask selection Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 047/157] batman-adv: Reduce tt_global hash refcnt only for removed entry Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 141/157] floppy: fix out-of-bounds read in copy_buffer Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 039/157] futex: Ensure that futex address is aligned in handle_futex_death() Ben Hutchings
2019-08-10 20:40 ` [PATCH 3.16 067/157] xtensa: fix return_address Ben Hutchings
2019-08-11 14:05 ` [PATCH 3.16 000/157] 3.16.72-rc1 review Guenter Roeck
2019-08-11 15:25   ` Ben Hutchings

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=lsq.1565469607.377616907@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=David.Laight@aculab.com \
    --cc=Jason@zx2c4.com \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=ebiggers3@gmail.com \
    --cc=eric.dumazet@gmail.com \
    --cc=jeanphilippe.aumasson@gmail.com \
    --cc=kda@linux-powerpc.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).