* Re: [PATCH 0/2] crypto: arm64/ARM: NEON accelerated ChaCha20
From: Herbert Xu @ 2016-12-28 9:03 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: linux-crypto, linux-arm-kernel
In-Reply-To: <6124F827-BA28-4A3D-B05F-EBCB1323955D@linaro.org>
On Tue, Dec 27, 2016 at 02:26:35PM +0000, Ard Biesheuvel wrote:
>
> You just nacked the v2 of this series (due to the chunksize/walksize) and i rewrote them as skciphers as well
Sorry. Would you like me to revert or just send a new series
on top of this?
Thanks,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: [RFC PATCH 0/3] Cavium ThunderX ZIP driver
From: Herbert Xu @ 2016-12-28 9:01 UTC (permalink / raw)
To: Challa, Mahipal
Cc: Jan Glauber, linux-crypto@vger.kernel.org,
linux-kernel@vger.kernel.org, David S . Miller, Nair, Vishnu
In-Reply-To: <DM5PR07MB3148D87C62159523B750CD20E5690@DM5PR07MB3148.namprd07.prod.outlook.com>
On Tue, Dec 27, 2016 at 11:39:21AM +0000, Challa, Mahipal wrote:
>
> Mahipal: One major issue is, the kernel use cases to validate the Cavium ThunderX ZIP driver are "ZSWAP" and "IPComp" which are not yet supported with scomp-acomp framework.
OK I'll look into converting IPcomp.
Thanks,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: xts(ecb(aes-asm))
From: Herbert Xu @ 2016-12-28 9:01 UTC (permalink / raw)
To: Stephan Müller; +Cc: linux-crypto
In-Reply-To: <4308953.jQs16UQPE9@tauon.atsec.com>
On Fri, Dec 09, 2016 at 07:02:25AM +0100, Stephan Müller wrote:
> Hi Herbert,
>
> while testing the current cryptodev-2.6 tree, I noticed that instead of the
> driver name of xts(aes-asm) (which used to be there), I now see xts(ecb(aes-
> asm)).
>
> Is that intentional?
Yes this is a result of the xts template switching over to skciphers
instead of simple ciphers as its base.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: simd ciphers
From: Stephan Müller @ 2016-12-28 8:37 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto
In-Reply-To: <10079298.uODr7IfrOJ@tauon.atsec.com>
Am Donnerstag, 8. Dezember 2016, 19:40:38 CET schrieb Stephan Müller:
Hi Herbert,
> Am Donnerstag, 8. Dezember 2016, 19:32:03 CET schrieb Stephan Müller:
>
> Hi Herbert,
>
> > Hi Herbert,
> >
> > with the addition of the simd cipher change I seem to be unable to use the
> > AESNI ciphers. My .config contains CONFIG_CRYPTO_SIMD=y and
> > CONFIG_CRYPTO_AES_NI_INTEL=y. Those options always worked to load the
> > AES-NI
> (with "always worked" I meant the CONFIG_CRYPTO_AES_NI_INTEL=y option of
> course, that always ensured AES-NI to be present and usable)
With 4.10-rc1, I also do not get the AES-NI implementations to work. do you
have any ideas what may be the issue?
Ciao
Stephan
^ permalink raw reply
* Re: George's crazy full state idea (Re: HalfSipHash Acceptable Usage)
From: Hannes Frederic Sowa @ 2016-12-28 5:23 UTC (permalink / raw)
To: George Spelvin, daniel
Cc: ak, davem, David.Laight, ebiggers3, eric.dumazet, Jason,
kernel-hardening, linux-crypto, linux-kernel, luto, netdev, tom,
tytso, vegard.nossum
In-Reply-To: <20161224011754.14207.qmail@ns.sciencehorizons.net>
Hello,
On Fri, 2016-12-23 at 20:17 -0500, George Spelvin wrote:
> Hannes Frederic Sowa wrote:
> > On 24.12.2016 00:39, George Spelvin wrote:
> > > We just finished discussing why 8 bytes isn't enough. If you only
> > > feed back 8 bytes, an attacker who can do 2^64 computation can find it
> > > (by guessing and computing forward to verify the guess) and recover the
> > > previous state. You need to feed back at least as much output as your
> > > security targete. For /dev/urandom's ChaCha20, that's 256 bits.
> > I followed the discussion but it appeared to me that this has the
> > additional constraint of time until the next reseeding event happenes,
> > which is 300s (under the assumption that calls to get_random_int happen
> > regularly, which I expect right now). After that the existing reseeding
> > mechansim will ensure enough backtracking protection. The number of
> > bytes can easily be increased here, given that reseeding was shown to be
> > quite fast already and we produce enough output. But I am not sure if
> > this is a bit overengineered in the end?
>
> I'm not following your description of how the time-based and call-based
> mechanisms interact, but for any mix-back, you should either do enough
> or none at all. (Also called "catastrophic reseeding".)
We call extract_crng when we run out of batched entropy and reseed. How
often we call down to extract_crng depends on how much entropy we
extracted by calls to get_random_int/long, so the number of calls into
those functions matter.
In extract_crng we have a timer which reseeds every 300s the CPRNG and
either uses completely new entropy from the CRNG or calls down into the
CPRNG while also doing backtracing protection (which feeds chacha's
block size / 2 back into chacha, if I read the code correctly, thus
1024 bits, which should be enough).
> For example, two mix-backs of 64 bits gives you 65 bit security, not 128.
> (Because each mixback can be guessed and verified separately.)
Exactly, but the full reseed after running out of entropy is strong
enough to not be defeated by your argumentation. Neither the reseed
from the CRNG.
> > Also agreed. Given your solution below to prandom_u32, I do think it
> > might also work without the seqlock now.
>
> It's not technically a seqlock; in particular the reader doesn't
> spin. But the write side, and general logic is so similar it's
> a good mental model.
>
> Basically, assume a 64-byte buffer. The reader has gone through
> 32 bytes of it, and has 32 left, and when he reads another 8 bytes,
> has to distinguish three cases:
>
> 1) No update; we read the old bytes and there are now 32 - 24 bytes left.
> 2) Update completed while we weren't looking. There are now new
> bytes in the buffer, and we took 8 leaving 64 - 8 = 56.
> 3) Update in progress at the time of the read. We don't know if we
> are seeing old bytes or new bytes, so we have to assume the worst
> and not proceeed unless 32 >= 8, but assume at the end there are
> 64 - 8 = 56 new bytes left.
>
> > I wouldn't have added a disable irqs, but given that I really like your
> > proposal, I would take it in my todo branch and submit it when net-next
> > window opens.
>
> If you want that, I have a pile of patches to prandom I really
> should push upstream. Shall I refresh them and send them to you?
I would like to have a look at them in the new year, certainly! I can
also take care about the core prandom patches, but don't know if I have
time to submit the others to the different subsystems.
Maybe, if David would be okay with that, we can submit all patches
through his tree, as he is also the dedicated maintainer for prandom.
> [... patch descriptions ...]
Thanks,
Hannes
^ permalink raw reply
* [PATCH 0/8] random: cleanup of code after removal of nonblocking pool
From: Stephan Müller @ 2016-12-27 22:38 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
Hi Ted,
with the removal of the nonblocking_pool, several code paths are now unused
which were only applicable to the nonblocking pool. This patch set removes
these unused code paths.
Also, a code path in the add_interrupt_randomness function that is never used
is removed.
In addition, the FIPS 140-2 continuous self tests are required to process
the output data of the RNG given to a caller. A patch is added to cover this
requirement.
Ciao
Stephan
Stephan Mueller (8):
random: remove stale maybe_reseed_primary_crng
random: remove stale urandom_init_wait
random: trigger random_ready callback upon crng_init == 1
random: remove unused branch in hot code path
random: remove variable limit
random: fix comment for unused random_min_urandom_seed
random: remove noop function call to xfer_secondary_pool
random: move FIPS continuous test to output functions
drivers/char/random.c | 118 +++++++++++++++++++++++---------------------------
1 file changed, 53 insertions(+), 65 deletions(-)
--
2.9.3
^ permalink raw reply
* [PATCH 3/8] random: trigger random_ready callback upon crng_init == 1
From: Stephan Müller @ 2016-12-27 22:39 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
The random_ready callback mechanism is intended to replicate the
getrandom system call behavior to in-kernel users. As the getrandom
system call unblocks with crng_init == 1, trigger the random_ready
wakeup call at the same time.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 482531d..5c26b1c 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -810,6 +810,7 @@ static int crng_fast_load(const char *cp, size_t len)
}
if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
crng_init = 1;
+ process_random_ready_list();
wake_up_interruptible(&crng_init_wait);
pr_notice("random: fast init done\n");
}
--
2.9.3
^ permalink raw reply related
* [PATCH 2/8] random: remove stale urandom_init_wait
From: Stephan Müller @ 2016-12-27 22:39 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
The urandom_init_wait wait queue is a left over from the pre-ChaCha20
times and can therefore be savely removed.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 8e5ab20..482531d 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -409,7 +409,6 @@ static struct poolinfo {
*/
static DECLARE_WAIT_QUEUE_HEAD(random_read_wait);
static DECLARE_WAIT_QUEUE_HEAD(random_write_wait);
-static DECLARE_WAIT_QUEUE_HEAD(urandom_init_wait);
static struct fasync_struct *fasync;
static DEFINE_SPINLOCK(random_ready_list_lock);
--
2.9.3
^ permalink raw reply related
* [PATCH 4/8] random: remove unused branch in hot code path
From: Stephan Müller @ 2016-12-27 22:40 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
The variable ip is defined to be a __u64 which is always 8 bytes on any
architecture. Thus, the check for sizeof(ip) > 4 will always be true.
As the check happens in a hot code path, remove the branch.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 5c26b1c..8d4d720 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1136,8 +1136,7 @@ void add_interrupt_randomness(int irq, int irq_flags)
fast_pool->pool[1] ^= now ^ c_high;
ip = regs ? instruction_pointer(regs) : _RET_IP_;
fast_pool->pool[2] ^= ip;
- fast_pool->pool[3] ^= (sizeof(ip) > 4) ? ip >> 32 :
- get_reg(fast_pool, regs);
+ fast_pool->pool[3] ^= ip >> 32;
fast_mix(fast_pool);
add_interrupt_bench(cycles);
--
2.9.3
^ permalink raw reply related
* [PATCH 5/8] random: remove variable limit
From: Stephan Müller @ 2016-12-27 22:40 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
The variable limit was used to identify the nonblocking pool's unlimited
random number generation. As the nonblocking pool is a thing of the
past, remove the limit variable and any conditions around it (i.e.
preserve the branches for limit == 1).
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 30 +++++++-----------------------
1 file changed, 7 insertions(+), 23 deletions(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 8d4d720..d19108c 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -466,7 +466,6 @@ struct entropy_store {
int entropy_count;
int entropy_total;
unsigned int initialized:1;
- unsigned int limit:1;
unsigned int last_data_init:1;
__u8 last_data[EXTRACT_SIZE];
};
@@ -484,7 +483,6 @@ static __u32 blocking_pool_data[OUTPUT_POOL_WORDS] __latent_entropy;
static struct entropy_store input_pool = {
.poolinfo = &poolinfo_table[0],
.name = "input",
- .limit = 1,
.lock = __SPIN_LOCK_UNLOCKED(input_pool.lock),
.pool = input_pool_data
};
@@ -492,7 +490,6 @@ static struct entropy_store input_pool = {
static struct entropy_store blocking_pool = {
.poolinfo = &poolinfo_table[1],
.name = "blocking",
- .limit = 1,
.pull = &input_pool,
.lock = __SPIN_LOCK_UNLOCKED(blocking_pool.lock),
.pool = blocking_pool_data,
@@ -1212,15 +1209,6 @@ static void xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
r->entropy_count > r->poolinfo->poolfracbits)
return;
- if (r->limit == 0 && random_min_urandom_seed) {
- unsigned long now = jiffies;
-
- if (time_before(now,
- r->last_pulled + random_min_urandom_seed * HZ))
- return;
- r->last_pulled = now;
- }
-
_xfer_secondary_pool(r, nbytes);
}
@@ -1228,8 +1216,6 @@ static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
{
__u32 tmp[OUTPUT_POOL_WORDS];
- /* For /dev/random's pool, always leave two wakeups' worth */
- int rsvd_bytes = r->limit ? 0 : random_read_wakeup_bits / 4;
int bytes = nbytes;
/* pull at least as much as a wakeup */
@@ -1240,7 +1226,7 @@ static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
trace_xfer_secondary_pool(r->name, bytes * 8, nbytes * 8,
ENTROPY_BITS(r), ENTROPY_BITS(r->pull));
bytes = extract_entropy(r->pull, tmp, bytes,
- random_read_wakeup_bits / 8, rsvd_bytes);
+ random_read_wakeup_bits / 8, 0);
mix_pool_bytes(r, tmp, bytes);
credit_entropy_bits(r, bytes*8);
}
@@ -1268,7 +1254,7 @@ static void push_to_pool(struct work_struct *work)
static size_t account(struct entropy_store *r, size_t nbytes, int min,
int reserved)
{
- int entropy_count, orig;
+ int entropy_count, orig, have_bytes;
size_t ibytes, nfrac;
BUG_ON(r->entropy_count > r->poolinfo->poolfracbits);
@@ -1277,14 +1263,12 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
retry:
entropy_count = orig = ACCESS_ONCE(r->entropy_count);
ibytes = nbytes;
- /* If limited, never pull more than available */
- if (r->limit) {
- int have_bytes = entropy_count >> (ENTROPY_SHIFT + 3);
+ /* never pull more than available */
+ have_bytes = entropy_count >> (ENTROPY_SHIFT + 3);
- if ((have_bytes -= reserved) < 0)
- have_bytes = 0;
- ibytes = min_t(size_t, ibytes, have_bytes);
- }
+ if ((have_bytes -= reserved) < 0)
+ have_bytes = 0;
+ ibytes = min_t(size_t, ibytes, have_bytes);
if (ibytes < min)
ibytes = 0;
--
2.9.3
^ permalink raw reply related
* [PATCH 7/8] random: remove noop function call to xfer_secondary_pool
From: Stephan Müller @ 2016-12-27 22:41 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
Since the introduction of the ChaCha20 DRNG, extract_entropy is only
invoked with the input_pool. For this entropy pool, xfer_secondary_pool
is a no-op and can therefore be safely removed.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 89d67c0..7b72a01 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1417,7 +1417,6 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf,
}
trace_extract_entropy(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
- xfer_secondary_pool(r, nbytes);
nbytes = account(r, nbytes, min, reserved);
return _extract_entropy(r, buf, nbytes, fips_enabled);
--
2.9.3
^ permalink raw reply related
* [PATCH 8/8] random: move FIPS continuous test to output functions
From: Stephan Müller @ 2016-12-27 22:42 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
The current lockation of the FIPS continuous self test covers the
input_pool only. However, the FIPS continuous self test shall cover the
output of the random number generator, i.e. the blocking pool and the
ChaCha20 DRNG.
This patch therefore moves the continuous test to the output function
used for /dev/random. In addition, it adds the continuous test to the
ChaCha20 output function.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 71 +++++++++++++++++++++++++++++++--------------------
1 file changed, 43 insertions(+), 28 deletions(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 7b72a01..d185d1f 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -416,6 +416,8 @@ struct crng_state {
__u32 state[16];
unsigned long init_time;
spinlock_t lock;
+ unsigned int last_data_init:1;
+ __u8 last_data[CHACHA20_BLOCK_SIZE];
};
struct crng_state primary_crng = {
@@ -471,7 +473,7 @@ struct entropy_store {
static ssize_t extract_entropy(struct entropy_store *r, void *buf,
size_t nbytes, int min, int rsvd);
static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
- size_t nbytes, int fips);
+ size_t nbytes);
static void crng_reseed(struct crng_state *crng, struct entropy_store *r);
static void push_to_pool(struct work_struct *work);
@@ -775,7 +777,7 @@ static void crng_initialize(struct crng_state *crng)
memcpy(&crng->state[0], "expand 32-byte k", 16);
if (crng == &primary_crng)
_extract_entropy(&input_pool, &crng->state[4],
- sizeof(__u32) * 12, 0);
+ sizeof(__u32) * 12);
else
get_random_bytes(&crng->state[4], sizeof(__u32) * 12);
for (i = 4; i < 16; i++) {
@@ -864,11 +866,25 @@ static void _extract_crng(struct crng_state *crng,
time_after(jiffies, crng->init_time + CRNG_RESEED_INTERVAL))
crng_reseed(crng, crng == &primary_crng ? &input_pool : NULL);
spin_lock_irqsave(&crng->lock, flags);
+
+ if (fips_enabled && !crng->last_data_init) {
+ crng->last_data_init = 1;
+ chacha20_block(&crng->state[0], out);
+ memcpy(crng->last_data, out, CHACHA20_BLOCK_SIZE);
+ }
+
if (arch_get_random_long(&v))
crng->state[14] ^= v;
chacha20_block(&crng->state[0], out);
if (crng->state[12] == 0)
crng->state[13]++;
+
+ if (fips_enabled) {
+ if (!memcmp(out, crng->last_data, CHACHA20_BLOCK_SIZE))
+ panic("ChaCha20 RNG duplicated output!\n");
+ memcpy(crng->last_data, out, CHACHA20_BLOCK_SIZE);
+ }
+
spin_unlock_irqrestore(&crng->lock, flags);
}
@@ -1356,22 +1372,14 @@ static void extract_buf(struct entropy_store *r, __u8 *out)
}
static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
- size_t nbytes, int fips)
+ size_t nbytes)
{
ssize_t ret = 0, i;
__u8 tmp[EXTRACT_SIZE];
- unsigned long flags;
while (nbytes) {
extract_buf(r, tmp);
- if (fips) {
- spin_lock_irqsave(&r->lock, flags);
- if (!memcmp(tmp, r->last_data, EXTRACT_SIZE))
- panic("Hardware RNG duplicated output!\n");
- memcpy(r->last_data, tmp, EXTRACT_SIZE);
- spin_unlock_irqrestore(&r->lock, flags);
- }
i = min_t(int, nbytes, EXTRACT_SIZE);
memcpy(buf, tmp, i);
nbytes -= i;
@@ -1397,7 +1405,22 @@ static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
static ssize_t extract_entropy(struct entropy_store *r, void *buf,
size_t nbytes, int min, int reserved)
{
+ trace_extract_entropy(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
+ nbytes = account(r, nbytes, min, reserved);
+
+ return _extract_entropy(r, buf, nbytes);
+}
+
+/*
+ * This function extracts randomness from the "entropy pool", and
+ * returns it in a userspace buffer.
+ */
+static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
+ size_t nbytes)
+{
+ ssize_t ret = 0, i;
__u8 tmp[EXTRACT_SIZE];
+ int large_request = (nbytes > 256);
unsigned long flags;
/* if last_data isn't primed, we need EXTRACT_SIZE extra bytes */
@@ -1416,23 +1439,6 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf,
spin_unlock_irqrestore(&r->lock, flags);
}
- trace_extract_entropy(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
- nbytes = account(r, nbytes, min, reserved);
-
- return _extract_entropy(r, buf, nbytes, fips_enabled);
-}
-
-/*
- * This function extracts randomness from the "entropy pool", and
- * returns it in a userspace buffer.
- */
-static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
- size_t nbytes)
-{
- ssize_t ret = 0, i;
- __u8 tmp[EXTRACT_SIZE];
- int large_request = (nbytes > 256);
-
trace_extract_entropy_user(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
xfer_secondary_pool(r, nbytes);
nbytes = account(r, nbytes, 0, 0);
@@ -1448,6 +1454,15 @@ static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
}
extract_buf(r, tmp);
+
+ if (fips_enabled) {
+ spin_lock_irqsave(&r->lock, flags);
+ if (!memcmp(tmp, r->last_data, EXTRACT_SIZE))
+ panic("Hardware RNG duplicated output!\n");
+ memcpy(r->last_data, tmp, EXTRACT_SIZE);
+ spin_unlock_irqrestore(&r->lock, flags);
+ }
+
i = min_t(int, nbytes, EXTRACT_SIZE);
if (copy_to_user(buf, tmp, i)) {
ret = -EFAULT;
--
2.9.3
^ permalink raw reply related
* [PATCH 6/8] random: fix comment for unused random_min_urandom_seed
From: Stephan Müller @ 2016-12-27 22:41 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
The variable random_min_urandom_seed is not needed any more as it
defined the reseeding behavior of the nonblocking pool. Though it is not
needed any more, it is left in the code for user space interface
compatibility.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index d19108c..89d67c0 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -313,9 +313,7 @@ static int random_read_wakeup_bits = 64;
static int random_write_wakeup_bits = 28 * OUTPUT_POOL_WORDS;
/*
- * The minimum number of seconds between urandom pool reseeding. We
- * do this to limit the amount of entropy that can be drained from the
- * input pool even if there are heavy demands on /dev/urandom.
+ * Variable is currently unused by left for user space compatibility.
*/
static int random_min_urandom_seed = 60;
--
2.9.3
^ permalink raw reply related
* [PATCH 1/8] random: remove stale maybe_reseed_primary_crng
From: Stephan Müller @ 2016-12-27 22:39 UTC (permalink / raw)
To: Ted Tso; +Cc: linux-kernel, linux-crypto
In-Reply-To: <3254875.f5A5oHPdxF@positron.chronox.de>
>From 5e84a71d4c4b3c7f015878c0907102634603d270 Mon Sep 17 00:00:00 2001
From: Stephan Mueller <stephan.mueller@atsec.com>
Date: Thu, 15 Dec 2016 12:42:33 +0100
Subject:
The function maybe_reseed_primary_crng is not used anywhere and thus can
be removed. Besides, it contains the check crng_init > 2 which will
never become true and thus would never trigger a reseed of the ChaCha20
primary DRNG.
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
drivers/char/random.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 1ef2640..8e5ab20 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -855,13 +855,6 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
spin_unlock_irqrestore(&primary_crng.lock, flags);
}
-static inline void maybe_reseed_primary_crng(void)
-{
- if (crng_init > 2 &&
- time_after(jiffies, primary_crng.init_time + CRNG_RESEED_INTERVAL))
- crng_reseed(&primary_crng, &input_pool);
-}
-
static inline void crng_wait_ready(void)
{
wait_event_interruptible(crng_init_wait, crng_ready());
--
2.9.3
^ permalink raw reply related
* Re: [PATCH 0/2] crypto: arm64/ARM: NEON accelerated ChaCha20
From: Ard Biesheuvel @ 2016-12-27 19:17 UTC (permalink / raw)
To: noloader; +Cc: linux-crypto@vger.kernel.org
In-Reply-To: <CAH8yC8kJiKc4Oz8RAob_5oRoQeACqvqXyj2UAsfv4bQ_TmKG-w@mail.gmail.com>
On 27 December 2016 at 15:36, Jeffrey Walton <noloader@gmail.com> wrote:
>> ChaCha20 is a stream cipher described in RFC 7539, and is intended to be
>> an efficient software implementable 'standby cipher', in case AES cannot
>> be used.
>
> That's not quite correct.
>
> The IETF changed the algorithm a bit, and its not compatible with
> Bernstein's ChaCha. They probably should have differentiated the name
> to avoid this sort of confusion.
>
> You can find Bernstein's specification for ChaCha at
> https://cr.yp.to/chacha.html, and the test vectors for Bernstein's
> specification at
> http://tools.ietf.org/html/draft-strombergson-chacha-test-vectors.
>
Thanks for the clarification. However, this should not affect the
content of the patches: they simply reimplement in ARM SIMD what the
kernel already knows as "chacha20", which is the IETF derivative
rather than djb's original. I will mention this in the cover letter of
the next respin (given that I need to respin these anyway)
^ permalink raw reply
* Re: [RFC PATCH 4.10 1/6] crypto/sha256: Refactor the API so it can be used without shash
From: Andy Lutomirski @ 2016-12-27 19:00 UTC (permalink / raw)
To: Daniel Borkmann
Cc: Herbert Xu, Ard Biesheuvel, Andy Lutomirski, Netdev, LKML,
Linux Crypto Mailing List, Jason A. Donenfeld,
Hannes Frederic Sowa, Alexei Starovoitov, Eric Dumazet,
Eric Biggers, Tom Herbert, David S. Miller
In-Reply-To: <586277AE.80401@iogearbox.net>
On Tue, Dec 27, 2016 at 6:16 AM, Daniel Borkmann <daniel@iogearbox.net> wrote:
> On 12/27/2016 10:58 AM, Herbert Xu wrote:
>>
>> On Mon, Dec 26, 2016 at 10:08:48AM -0800, Andy Lutomirski wrote:
>>>
>>>
>>> According to Daniel, the networking folks want to let embedded systems
>>> include BPF without requiring the crypto core.
>>
>>
>> Last I checked the IPv4 stack depended on the crypto API so this
>> sounds bogus.
>
>
> I think there's a bit of a mixup here with what I said. To clarify,
> requirement back then from tracing folks was that bpf engine and
> therefore bpf syscall can be build w/o networking enabled for small
> devices, so dependencies preferably need to be kept on a absolute
> minimum, same counts for either making it suddenly a depend on
> CRYPTO or a select CRYPTO for just those few lines that can be
> pulled in from lib/ code instead.
Somehow I had that in my head as "networking" not "tracing", probably
because of the TCA stuff. Whoops.
Anyway, I'm rewriting the crypto part of the patch completely based on
Ard's feedback.
^ permalink raw reply
* Re: [PATCH] crypto: arm/aes-neonbs - process 8 blocks in parallel if we can
From: Ard Biesheuvel @ 2016-12-27 18:35 UTC (permalink / raw)
To: Herbert Xu
Cc: linux-crypto@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
In-Reply-To: <20161227085745.GA10121@gondor.apana.org.au>
On 27 December 2016 at 08:57, Herbert Xu <herbert@gondor.apana.org.au> wrote:
> On Fri, Dec 09, 2016 at 01:47:26PM +0000, Ard Biesheuvel wrote:
>> The bit-sliced NEON implementation of AES only performs optimally if
>> it can process 8 blocks of input in parallel. This is due to the nature
>> of bit slicing, where the n-th bit of each byte of AES state of each input
>> block is collected into NEON register 'n', for registers q0 - q7.
>>
>> This implies that the amount of work for the transform is fixed,
>> regardless of whether we are handling just one block or 8 in parallel.
>>
>> So let's try a bit harder to iterate over the input in suitably sized
>> chunks, by increasing the chunksize to 8 * AES_BLOCK_SIZE, and tweaking
>> the loops to only process multiples of the chunk size, unless we are
>> handling the last chunk in the input stream.
>>
>> Note that the skcipher walk API guarantees that a step in the walk never
>> returns less that 'chunksize' bytes if there are at least that many bytes
>> of input still available. However, it does *not* guarantee that those steps
>> produce an exact multiple of the chunk size.
>>
>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>
> I like this patch. However, I had different plans for the chunksize
> attribute. It's primarily meant to be a hint to the upper layer
> in case it does partial updates. It's meant to provide the minimum
> number of bytes a partial update can carry without screwing up
> subsequent updates.
>
> It just happens to be the same value that we were using during
> an skcipher walk.
>
> So I think for your case we should add a new attribute, perhaps
> walk_chunksize or walksize, which doesn't need to be exported to
> the outside at all and can then be used by the walk interface.
>
OK, I will try to hack something up.
One thing to keep in mind though is that stacked chaining modes should
present the data with the same granularity for optimal performance.
E.g., xts(ecb(aes)) should pass 8 blocks at a time. How should this
requirement be incorporated according to you?
^ permalink raw reply
* Re: [PATCH 0/2] crypto: arm64/ARM: NEON accelerated ChaCha20
From: Jeffrey Walton @ 2016-12-27 15:36 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: linux-crypto
In-Reply-To: <1481207339-17332-1-git-send-email-ard.biesheuvel@linaro.org>
> ChaCha20 is a stream cipher described in RFC 7539, and is intended to be
> an efficient software implementable 'standby cipher', in case AES cannot
> be used.
That's not quite correct.
The IETF changed the algorithm a bit, and its not compatible with
Bernstein's ChaCha. They probably should have differentiated the name
to avoid this sort of confusion.
You can find Bernstein's specification for ChaCha at
https://cr.yp.to/chacha.html, and the test vectors for Bernstein's
specification at
http://tools.ietf.org/html/draft-strombergson-chacha-test-vectors.
Jeff
^ permalink raw reply
* Re: [PATCH 0/2] crypto: arm64/ARM: NEON accelerated ChaCha20
From: Ard Biesheuvel @ 2016-12-27 14:26 UTC (permalink / raw)
To: Herbert Xu; +Cc: linux-crypto, linux-arm-kernel
In-Reply-To: <20161227100400.GA10629@gondor.apana.org.au>
> On 27 Dec 2016, at 10:04, Herbert Xu <herbert@gondor.apana.org.au> wrote:
>
>> On Thu, Dec 08, 2016 at 02:28:57PM +0000, Ard Biesheuvel wrote:
>> Another port of existing x86 SSE code to NEON, again both for arm64 and ARM.
>>
>> ChaCha20 is a stream cipher described in RFC 7539, and is intended to be
>> an efficient software implementable 'standby cipher', in case AES cannot
>> be used.
>>
>> This NEON implementation is almost 2x as fast as the generic C code
>> (measured on Cortex-A57 using the arm64 version)
>>
>> I'm aware that blkciphers are deprecated in favor of skciphers, but this
>> code (like the x86 version) uses the init and setkey routines of the generic
>> version, so it is probably better to port all implementations at once.
>>
>> Ard Biesheuvel (2):
>> crypto: arm64/chacha20 - implement NEON version based on SSE3 code
>> crypto: arm/chacha20 - implement NEON version based on SSE3 code
>
> Both patches applied. Thanks.
You just nacked the v2 of this series (due to the chunksize/walksize) and i rewrote them as skciphers as well
> --
> Email: Herbert Xu <herbert@gondor.apana.org.au>
> Home Page: http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: [RFC PATCH 4.10 1/6] crypto/sha256: Refactor the API so it can be used without shash
From: Daniel Borkmann @ 2016-12-27 14:16 UTC (permalink / raw)
To: Herbert Xu, Andy Lutomirski
Cc: Ard Biesheuvel, Andy Lutomirski, Netdev, LKML,
Linux Crypto Mailing List, Jason A. Donenfeld,
Hannes Frederic Sowa, Alexei Starovoitov, Eric Dumazet,
Eric Biggers, Tom Herbert, David S. Miller
In-Reply-To: <20161227095853.GA10588@gondor.apana.org.au>
On 12/27/2016 10:58 AM, Herbert Xu wrote:
> On Mon, Dec 26, 2016 at 10:08:48AM -0800, Andy Lutomirski wrote:
>>
>> According to Daniel, the networking folks want to let embedded systems
>> include BPF without requiring the crypto core.
>
> Last I checked the IPv4 stack depended on the crypto API so this
> sounds bogus.
I think there's a bit of a mixup here with what I said. To clarify,
requirement back then from tracing folks was that bpf engine and
therefore bpf syscall can be build w/o networking enabled for small
devices, so dependencies preferably need to be kept on a absolute
minimum, same counts for either making it suddenly a depend on
CRYPTO or a select CRYPTO for just those few lines that can be
pulled in from lib/ code instead.
^ permalink raw reply
* Re: [RFC PATCH 0/3] Cavium ThunderX ZIP driver
From: Challa, Mahipal @ 2016-12-27 11:39 UTC (permalink / raw)
To: Herbert Xu, Jan Glauber
Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org,
David S . Miller, Nair, Vishnu
In-Reply-To: <20161227090227.GC10121@gondor.apana.org.au>
Hi Herbert,
Thanks for your response
>Hi Jan:
On Mon, Dec 12, 2016 at 04:04:36PM +0100, Jan Glauber wrote:
> >
> >this series adds support for hardware accelerated compression & decompression
> >as found on ThunderX (arm64) SOCs. I've been reviewing this driver internally
> >for some time and would like to get feedback on the RFC to see if this goes
> >into the right direction and to see if there are any concerns.
> >
> >We've discussed switching to the new acomp algorithm but for the time being
> >decided against acomp because our test cases are not yet supported with it.
> OK. Do you see any major problems in converting this over to acomp?
Mahipal: One major issue is, the kernel use cases to validate the Cavium ThunderX ZIP driver are "ZSWAP" and "IPComp" which are not yet supported with scomp-acomp framework.
Regards,
-Mahipal
From: Herbert Xu <herbert@gondor.apana.org.au>
Sent: Tuesday, December 27, 2016 2:32 PM
To: Jan Glauber
Cc: linux-crypto@vger.kernel.org; linux-kernel@vger.kernel.org; David S . Miller; Challa, Mahipal; Nair, Vishnu
Subject: Re: [RFC PATCH 0/3] Cavium ThunderX ZIP driver
Hi Jan:
On Mon, Dec 12, 2016 at 04:04:36PM +0100, Jan Glauber wrote:
>
> this series adds support for hardware accelerated compression & decompression
> as found on ThunderX (arm64) SOCs. I've been reviewing this driver internally
> for some time and would like to get feedback on the RFC to see if this goes
> into the right direction and to see if there are any concerns.
>
> We've discussed switching to the new acomp algorithm but for the time being
> decided against acomp because our test cases are not yet supported with it.
OK. Do you see any major problems in converting this over to acomp?
Thanks,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* [cryptodev:master 4/17] arch/arm/crypto/chacha20-neon-glue.c:68:32: error: passing argument 1 of 'crypto_chacha20_crypt' from incompatible pointer type
From: kbuild test robot @ 2016-12-27 12:44 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: kbuild-all, linux-crypto, Herbert Xu
[-- Attachment #1: Type: text/plain, Size: 6289 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
head: fb91a661d99f460f2ea4c7f23ed47f56863ca1d1
commit: 9ae433bc79f97bae221d53bb1a8e21415ea58625 [4/17] crypto: chacha20 - convert generic and x86 versions to skcipher
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 9ae433bc79f97bae221d53bb1a8e21415ea58625
# save the attached .config to linux build tree
make.cross ARCH=arm
All errors (new ones prefixed by >>):
arch/arm/crypto/chacha20-neon-glue.c: In function 'chacha20_simd':
>> arch/arm/crypto/chacha20-neon-glue.c:68:32: error: passing argument 1 of 'crypto_chacha20_crypt' from incompatible pointer type [-Werror=incompatible-pointer-types]
return crypto_chacha20_crypt(desc, dst, src, nbytes);
^~~~
In file included from arch/arm/crypto/chacha20-neon-glue.c:22:0:
include/crypto/chacha20.h:24:5: note: expected 'struct skcipher_request *' but argument is of type 'struct blkcipher_desc *'
int crypto_chacha20_crypt(struct skcipher_request *req);
^~~~~~~~~~~~~~~~~~~~~
>> arch/arm/crypto/chacha20-neon-glue.c:68:10: error: too many arguments to function 'crypto_chacha20_crypt'
return crypto_chacha20_crypt(desc, dst, src, nbytes);
^~~~~~~~~~~~~~~~~~~~~
In file included from arch/arm/crypto/chacha20-neon-glue.c:22:0:
include/crypto/chacha20.h:24:5: note: declared here
int crypto_chacha20_crypt(struct skcipher_request *req);
^~~~~~~~~~~~~~~~~~~~~
arch/arm/crypto/chacha20-neon-glue.c: At top level:
>> arch/arm/crypto/chacha20-neon-glue.c:111:15: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.setkey = crypto_chacha20_setkey,
^~~~~~~~~~~~~~~~~~~~~~
arch/arm/crypto/chacha20-neon-glue.c:111:15: note: (near initialization for 'alg.cra_u.blkcipher.setkey')
cc1: some warnings being treated as errors
vim +/crypto_chacha20_crypt +68 arch/arm/crypto/chacha20-neon-glue.c
80966672 Ard Biesheuvel 2016-12-08 62 {
80966672 Ard Biesheuvel 2016-12-08 63 struct blkcipher_walk walk;
80966672 Ard Biesheuvel 2016-12-08 64 u32 state[16];
80966672 Ard Biesheuvel 2016-12-08 65 int err;
80966672 Ard Biesheuvel 2016-12-08 66
80966672 Ard Biesheuvel 2016-12-08 67 if (nbytes <= CHACHA20_BLOCK_SIZE || !may_use_simd())
80966672 Ard Biesheuvel 2016-12-08 @68 return crypto_chacha20_crypt(desc, dst, src, nbytes);
80966672 Ard Biesheuvel 2016-12-08 69
80966672 Ard Biesheuvel 2016-12-08 70 blkcipher_walk_init(&walk, dst, src, nbytes);
80966672 Ard Biesheuvel 2016-12-08 71 err = blkcipher_walk_virt_block(desc, &walk, CHACHA20_BLOCK_SIZE);
80966672 Ard Biesheuvel 2016-12-08 72
80966672 Ard Biesheuvel 2016-12-08 73 crypto_chacha20_init(state, crypto_blkcipher_ctx(desc->tfm), walk.iv);
80966672 Ard Biesheuvel 2016-12-08 74
80966672 Ard Biesheuvel 2016-12-08 75 kernel_neon_begin();
80966672 Ard Biesheuvel 2016-12-08 76
80966672 Ard Biesheuvel 2016-12-08 77 while (walk.nbytes >= CHACHA20_BLOCK_SIZE) {
80966672 Ard Biesheuvel 2016-12-08 78 chacha20_dosimd(state, walk.dst.virt.addr, walk.src.virt.addr,
80966672 Ard Biesheuvel 2016-12-08 79 rounddown(walk.nbytes, CHACHA20_BLOCK_SIZE));
80966672 Ard Biesheuvel 2016-12-08 80 err = blkcipher_walk_done(desc, &walk,
80966672 Ard Biesheuvel 2016-12-08 81 walk.nbytes % CHACHA20_BLOCK_SIZE);
80966672 Ard Biesheuvel 2016-12-08 82 }
80966672 Ard Biesheuvel 2016-12-08 83
80966672 Ard Biesheuvel 2016-12-08 84 if (walk.nbytes) {
80966672 Ard Biesheuvel 2016-12-08 85 chacha20_dosimd(state, walk.dst.virt.addr, walk.src.virt.addr,
80966672 Ard Biesheuvel 2016-12-08 86 walk.nbytes);
80966672 Ard Biesheuvel 2016-12-08 87 err = blkcipher_walk_done(desc, &walk, 0);
80966672 Ard Biesheuvel 2016-12-08 88 }
80966672 Ard Biesheuvel 2016-12-08 89
80966672 Ard Biesheuvel 2016-12-08 90 kernel_neon_end();
80966672 Ard Biesheuvel 2016-12-08 91
80966672 Ard Biesheuvel 2016-12-08 92 return err;
80966672 Ard Biesheuvel 2016-12-08 93 }
80966672 Ard Biesheuvel 2016-12-08 94
80966672 Ard Biesheuvel 2016-12-08 95 static struct crypto_alg alg = {
80966672 Ard Biesheuvel 2016-12-08 96 .cra_name = "chacha20",
80966672 Ard Biesheuvel 2016-12-08 97 .cra_driver_name = "chacha20-neon",
80966672 Ard Biesheuvel 2016-12-08 98 .cra_priority = 300,
80966672 Ard Biesheuvel 2016-12-08 99 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
80966672 Ard Biesheuvel 2016-12-08 100 .cra_blocksize = 1,
80966672 Ard Biesheuvel 2016-12-08 101 .cra_type = &crypto_blkcipher_type,
80966672 Ard Biesheuvel 2016-12-08 102 .cra_ctxsize = sizeof(struct chacha20_ctx),
80966672 Ard Biesheuvel 2016-12-08 103 .cra_alignmask = sizeof(u32) - 1,
80966672 Ard Biesheuvel 2016-12-08 104 .cra_module = THIS_MODULE,
80966672 Ard Biesheuvel 2016-12-08 105 .cra_u = {
80966672 Ard Biesheuvel 2016-12-08 106 .blkcipher = {
80966672 Ard Biesheuvel 2016-12-08 107 .min_keysize = CHACHA20_KEY_SIZE,
80966672 Ard Biesheuvel 2016-12-08 108 .max_keysize = CHACHA20_KEY_SIZE,
80966672 Ard Biesheuvel 2016-12-08 109 .ivsize = CHACHA20_IV_SIZE,
80966672 Ard Biesheuvel 2016-12-08 110 .geniv = "seqiv",
80966672 Ard Biesheuvel 2016-12-08 @111 .setkey = crypto_chacha20_setkey,
80966672 Ard Biesheuvel 2016-12-08 112 .encrypt = chacha20_simd,
80966672 Ard Biesheuvel 2016-12-08 113 .decrypt = chacha20_simd,
80966672 Ard Biesheuvel 2016-12-08 114 },
:::::: The code at line 68 was first introduced by commit
:::::: 8096667273477e735b0072b11a6d617ccee45e5f crypto: arm/chacha20 - implement NEON version based on SSE3 code
:::::: TO: Ard Biesheuvel <ard.biesheuvel@linaro.org>
:::::: CC: Herbert Xu <herbert@gondor.apana.org.au>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 60341 bytes --]
^ permalink raw reply
* [cryptodev:master 4/17] arch/arm64/crypto/chacha20-neon-glue.c:66:32: error: passing argument 1 of 'crypto_chacha20_crypt' from incompatible pointer type
From: kbuild test robot @ 2016-12-27 12:27 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: kbuild-all, linux-crypto, Herbert Xu
[-- Attachment #1: Type: text/plain, Size: 6294 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
head: fb91a661d99f460f2ea4c7f23ed47f56863ca1d1
commit: 9ae433bc79f97bae221d53bb1a8e21415ea58625 [4/17] crypto: chacha20 - convert generic and x86 versions to skcipher
config: arm64-allmodconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 9ae433bc79f97bae221d53bb1a8e21415ea58625
# save the attached .config to linux build tree
make.cross ARCH=arm64
All errors (new ones prefixed by >>):
arch/arm64/crypto/chacha20-neon-glue.c: In function 'chacha20_simd':
>> arch/arm64/crypto/chacha20-neon-glue.c:66:32: error: passing argument 1 of 'crypto_chacha20_crypt' from incompatible pointer type [-Werror=incompatible-pointer-types]
return crypto_chacha20_crypt(desc, dst, src, nbytes);
^~~~
In file included from arch/arm64/crypto/chacha20-neon-glue.c:22:0:
include/crypto/chacha20.h:24:5: note: expected 'struct skcipher_request *' but argument is of type 'struct blkcipher_desc *'
int crypto_chacha20_crypt(struct skcipher_request *req);
^~~~~~~~~~~~~~~~~~~~~
>> arch/arm64/crypto/chacha20-neon-glue.c:66:10: error: too many arguments to function 'crypto_chacha20_crypt'
return crypto_chacha20_crypt(desc, dst, src, nbytes);
^~~~~~~~~~~~~~~~~~~~~
In file included from arch/arm64/crypto/chacha20-neon-glue.c:22:0:
include/crypto/chacha20.h:24:5: note: declared here
int crypto_chacha20_crypt(struct skcipher_request *req);
^~~~~~~~~~~~~~~~~~~~~
arch/arm64/crypto/chacha20-neon-glue.c: At top level:
>> arch/arm64/crypto/chacha20-neon-glue.c:109:15: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.setkey = crypto_chacha20_setkey,
^~~~~~~~~~~~~~~~~~~~~~
arch/arm64/crypto/chacha20-neon-glue.c:109:15: note: (near initialization for 'alg.cra_u.blkcipher.setkey')
cc1: some warnings being treated as errors
vim +/crypto_chacha20_crypt +66 arch/arm64/crypto/chacha20-neon-glue.c
8621caa0 Ard Biesheuvel 2016-12-08 60 {
8621caa0 Ard Biesheuvel 2016-12-08 61 struct blkcipher_walk walk;
8621caa0 Ard Biesheuvel 2016-12-08 62 u32 state[16];
8621caa0 Ard Biesheuvel 2016-12-08 63 int err;
8621caa0 Ard Biesheuvel 2016-12-08 64
8621caa0 Ard Biesheuvel 2016-12-08 65 if (nbytes <= CHACHA20_BLOCK_SIZE)
8621caa0 Ard Biesheuvel 2016-12-08 @66 return crypto_chacha20_crypt(desc, dst, src, nbytes);
8621caa0 Ard Biesheuvel 2016-12-08 67
8621caa0 Ard Biesheuvel 2016-12-08 68 blkcipher_walk_init(&walk, dst, src, nbytes);
8621caa0 Ard Biesheuvel 2016-12-08 69 err = blkcipher_walk_virt_block(desc, &walk, CHACHA20_BLOCK_SIZE);
8621caa0 Ard Biesheuvel 2016-12-08 70
8621caa0 Ard Biesheuvel 2016-12-08 71 crypto_chacha20_init(state, crypto_blkcipher_ctx(desc->tfm), walk.iv);
8621caa0 Ard Biesheuvel 2016-12-08 72
8621caa0 Ard Biesheuvel 2016-12-08 73 kernel_neon_begin();
8621caa0 Ard Biesheuvel 2016-12-08 74
8621caa0 Ard Biesheuvel 2016-12-08 75 while (walk.nbytes >= CHACHA20_BLOCK_SIZE) {
8621caa0 Ard Biesheuvel 2016-12-08 76 chacha20_dosimd(state, walk.dst.virt.addr, walk.src.virt.addr,
8621caa0 Ard Biesheuvel 2016-12-08 77 rounddown(walk.nbytes, CHACHA20_BLOCK_SIZE));
8621caa0 Ard Biesheuvel 2016-12-08 78 err = blkcipher_walk_done(desc, &walk,
8621caa0 Ard Biesheuvel 2016-12-08 79 walk.nbytes % CHACHA20_BLOCK_SIZE);
8621caa0 Ard Biesheuvel 2016-12-08 80 }
8621caa0 Ard Biesheuvel 2016-12-08 81
8621caa0 Ard Biesheuvel 2016-12-08 82 if (walk.nbytes) {
8621caa0 Ard Biesheuvel 2016-12-08 83 chacha20_dosimd(state, walk.dst.virt.addr, walk.src.virt.addr,
8621caa0 Ard Biesheuvel 2016-12-08 84 walk.nbytes);
8621caa0 Ard Biesheuvel 2016-12-08 85 err = blkcipher_walk_done(desc, &walk, 0);
8621caa0 Ard Biesheuvel 2016-12-08 86 }
8621caa0 Ard Biesheuvel 2016-12-08 87
8621caa0 Ard Biesheuvel 2016-12-08 88 kernel_neon_end();
8621caa0 Ard Biesheuvel 2016-12-08 89
8621caa0 Ard Biesheuvel 2016-12-08 90 return err;
8621caa0 Ard Biesheuvel 2016-12-08 91 }
8621caa0 Ard Biesheuvel 2016-12-08 92
8621caa0 Ard Biesheuvel 2016-12-08 93 static struct crypto_alg alg = {
8621caa0 Ard Biesheuvel 2016-12-08 94 .cra_name = "chacha20",
8621caa0 Ard Biesheuvel 2016-12-08 95 .cra_driver_name = "chacha20-neon",
8621caa0 Ard Biesheuvel 2016-12-08 96 .cra_priority = 300,
8621caa0 Ard Biesheuvel 2016-12-08 97 .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER,
8621caa0 Ard Biesheuvel 2016-12-08 98 .cra_blocksize = 1,
8621caa0 Ard Biesheuvel 2016-12-08 99 .cra_type = &crypto_blkcipher_type,
8621caa0 Ard Biesheuvel 2016-12-08 100 .cra_ctxsize = sizeof(struct chacha20_ctx),
8621caa0 Ard Biesheuvel 2016-12-08 101 .cra_alignmask = sizeof(u32) - 1,
8621caa0 Ard Biesheuvel 2016-12-08 102 .cra_module = THIS_MODULE,
8621caa0 Ard Biesheuvel 2016-12-08 103 .cra_u = {
8621caa0 Ard Biesheuvel 2016-12-08 104 .blkcipher = {
8621caa0 Ard Biesheuvel 2016-12-08 105 .min_keysize = CHACHA20_KEY_SIZE,
8621caa0 Ard Biesheuvel 2016-12-08 106 .max_keysize = CHACHA20_KEY_SIZE,
8621caa0 Ard Biesheuvel 2016-12-08 107 .ivsize = CHACHA20_IV_SIZE,
8621caa0 Ard Biesheuvel 2016-12-08 108 .geniv = "seqiv",
8621caa0 Ard Biesheuvel 2016-12-08 @109 .setkey = crypto_chacha20_setkey,
8621caa0 Ard Biesheuvel 2016-12-08 110 .encrypt = chacha20_simd,
8621caa0 Ard Biesheuvel 2016-12-08 111 .decrypt = chacha20_simd,
8621caa0 Ard Biesheuvel 2016-12-08 112 },
:::::: The code at line 66 was first introduced by commit
:::::: 8621caa0d45e731f2e9f5889ff5bb384fcd6e059 crypto: arm64/chacha20 - implement NEON version based on SSE3 code
:::::: TO: Ard Biesheuvel <ard.biesheuvel@linaro.org>
:::::: CC: Herbert Xu <herbert@gondor.apana.org.au>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 53488 bytes --]
^ permalink raw reply
* Re: [PATCHv2] crypto: testmgr: Use heap buffer for acomp test input
From: Herbert Xu @ 2016-12-27 10:06 UTC (permalink / raw)
To: Laura Abbott
Cc: David S. Miller, Ard Biesheuvel, Giovanni Cabiddu, linux-crypto,
linux-kernel, linux-arm-kernel, Mark Rutland,
Christopher Covington
In-Reply-To: <1482352374-22750-1-git-send-email-labbott@redhat.com>
On Wed, Dec 21, 2016 at 12:32:54PM -0800, Laura Abbott wrote:
>
> Christopher Covington reported a crash on aarch64 on recent Fedora
> kernels:
>
> kernel BUG at ./include/linux/scatterlist.h:140!
> Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
> Modules linked in:
> CPU: 2 PID: 752 Comm: cryptomgr_test Not tainted 4.9.0-11815-ge93b1cc #162
> Hardware name: linux,dummy-virt (DT)
> task: ffff80007c650080 task.stack: ffff800008910000
> PC is at sg_init_one+0xa0/0xb8
> LR is at sg_init_one+0x24/0xb8
> ...
> [<ffff000008398db8>] sg_init_one+0xa0/0xb8
> [<ffff000008350a44>] test_acomp+0x10c/0x438
> [<ffff000008350e20>] alg_test_comp+0xb0/0x118
> [<ffff00000834f28c>] alg_test+0x17c/0x2f0
> [<ffff00000834c6a4>] cryptomgr_test+0x44/0x50
> [<ffff0000080dac70>] kthread+0xf8/0x128
> [<ffff000008082ec0>] ret_from_fork+0x10/0x50
>
> The test vectors used for input are part of the kernel image. These
> inputs are passed as a buffer to sg_init_one which eventually blows up
> with BUG_ON(!virt_addr_valid(buf)). On arm64, virt_addr_valid returns
> false for the kernel image since virt_to_page will not return the
> correct page. Fix this by copying the input vectors to heap buffer
> before setting up the scatterlist.
>
> Reported-by: Christopher Covington <cov@codeaurora.org>
> Fixes: d7db7a882deb ("crypto: acomp - update testmgr with support for acomp")
> Signed-off-by: Laura Abbott <labbott@redhat.com>
Patch applied. Thanks.
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: [PATCH v3 0/2] Add MediaTek crypto accelerator driver
From: Herbert Xu @ 2016-12-27 10:06 UTC (permalink / raw)
To: Ryder Lee
Cc: David S. Miller, Matthias Brugger, devicetree, linux-mediatek,
linux-kernel, linux-crypto, linux-arm-kernel, Sean Wang, Roy Luo
In-Reply-To: <1482114045-18716-1-git-send-email-ryder.lee@mediatek.com>
On Mon, Dec 19, 2016 at 10:20:43AM +0800, Ryder Lee wrote:
> Hello,
>
> This adds support for the MediaTek hardware accelerator on
> some SoCs.
>
> This driver currently implement:
> - SHA1 and SHA2 family(HMAC) hash algorithms.
> - AES block cipher in CBC/ECB mode with 128/196/256 bits keys.
>
> Chances since v3:
> -remove unused structure member
> -drop interrupt-parent from DT bindings documentation
>
> Changes since v2:
> - use byteorder conversion macros and type identifiers for descriptors
> - revise register definition macros to make it more clear
> - revise DT compatiable string
>
> Changes since v1:
> - remove EXPORT_SYMBOL
> - remove unused PRNG setting
> - sort headers in alphabetical order
> - add a definition for IRQ unmber
> - replace ambiguous definition
> - add more annotation and function comment
> - add COMPILE_TEST in Kconfig
>
> Ryder Lee (2):
> Add crypto driver support for some MediaTek chips
> crypto: mediatek - add DT bindings documentation
All applied. Thanks.
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox