linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 17:06 [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness() Andy Lutomirski
@ 2016-10-16 21:19 ` Matt Mullins
  2016-10-17 17:17 ` [PATCH resend " Stephan Mueller
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 11+ messages in thread
From: Matt Mullins @ 2016-10-16 21:19 UTC (permalink / raw)
  To: Andy Lutomirski; +Cc: Jens Axboe, Matt Mullins, linux-crypto

On Sun, Oct 16, 2016 at 10:17:15AM -0700, Andy Lutomirski wrote:
> hw_random carefully avoids using a stack buffer except in
> add_early_randomness().  This causes a crash in virtio_rng if
> CONFIG_VMAP_STACK=y.

I hadn't noticed the existing kmalloc in the __init, for the explicit purpose
of virt_to_page().

This boots on the VM from which I had grabbed the stack trace yesterday.

Tested-by: Matt Mullins <mmullins@mmlx.us>

Looks like an extra quote snuck in your To: line, so I'm not sure if this was
distributed as widely as you intended.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
@ 2016-10-17 17:06 Andy Lutomirski
  2016-10-16 21:19 ` [PATCH " Matt Mullins
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Andy Lutomirski @ 2016-10-17 17:06 UTC (permalink / raw)
  To: linux-crypto, linux-kernel, Matt Mackall, Herbert Xu, Rusty Russell
  Cc: Jens Axboe, Matt Mullins, Andy Lutomirski

hw_random carefully avoids using a stack buffer except in
add_early_randomness().  This causes a crash in virtio_rng if
CONFIG_VMAP_STACK=y.

Reported-by: Matt Mullins <mmullins@mmlx.us>
Tested-by: Matt Mullins <mmullins@mmlx.us>
Fixes: d3cc7996473a ("hwrng: fetch randomness only after device init")
Signed-off-by: Andy Lutomirski <luto@kernel.org>
---

This fixes a crash in 4.9-rc1.

resending because I typoed the git send-email command.  I stealthily added
Matt's Tested-by, too.

 drivers/char/hw_random/core.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 9203f2d130c0..340f96e44642 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -84,14 +84,14 @@ static size_t rng_buffer_size(void)
 
 static void add_early_randomness(struct hwrng *rng)
 {
-	unsigned char bytes[16];
 	int bytes_read;
+	size_t size = min_t(size_t, 16, rng_buffer_size());
 
 	mutex_lock(&reading_mutex);
-	bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
+	bytes_read = rng_get_data(rng, rng_buffer, size, 1);
 	mutex_unlock(&reading_mutex);
 	if (bytes_read > 0)
-		add_device_randomness(bytes, bytes_read);
+		add_device_randomness(rng_buffer, bytes_read);
 }
 
 static inline void cleanup_rng(struct kref *kref)
-- 
2.7.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 17:06 [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness() Andy Lutomirski
  2016-10-16 21:19 ` [PATCH " Matt Mullins
@ 2016-10-17 17:17 ` Stephan Mueller
  2016-10-17 17:30   ` Andy Lutomirski
  2016-10-19  3:50 ` Herbert Xu
  2017-02-04  3:47 ` Yisheng Xie
  3 siblings, 1 reply; 11+ messages in thread
From: Stephan Mueller @ 2016-10-17 17:17 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: linux-crypto, linux-kernel, Matt Mackall, Herbert Xu,
	Rusty Russell, Jens Axboe, Matt Mullins

Am Montag, 17. Oktober 2016, 10:06:27 CEST schrieb Andy Lutomirski:

Hi Andy,

> diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
> index 9203f2d130c0..340f96e44642 100644
> --- a/drivers/char/hw_random/core.c
> +++ b/drivers/char/hw_random/core.c
> @@ -84,14 +84,14 @@ static size_t rng_buffer_size(void)
> 
>  static void add_early_randomness(struct hwrng *rng)
>  {
> -	unsigned char bytes[16];
>  	int bytes_read;
> +	size_t size = min_t(size_t, 16, rng_buffer_size());
> 
>  	mutex_lock(&reading_mutex);
> -	bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
> +	bytes_read = rng_get_data(rng, rng_buffer, size, 1);
>  	mutex_unlock(&reading_mutex);
>  	if (bytes_read > 0)
> -		add_device_randomness(bytes, bytes_read);
> +		add_device_randomness(rng_buffer, bytes_read);

Shouldn't there be a memset(0) of the rng_buffer at this point to avoid having 
such data lingering in memory?


Ciao
Stephan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 17:17 ` [PATCH resend " Stephan Mueller
@ 2016-10-17 17:30   ` Andy Lutomirski
  2016-10-17 18:36     ` Stephan Mueller
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Lutomirski @ 2016-10-17 17:30 UTC (permalink / raw)
  To: Stephan Mueller
  Cc: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell, Jens Axboe, Matt Mullins

On Mon, Oct 17, 2016 at 10:17 AM, Stephan Mueller <smueller@chronox.de> wrote:
> Am Montag, 17. Oktober 2016, 10:06:27 CEST schrieb Andy Lutomirski:
>
> Hi Andy,
>
>> diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
>> index 9203f2d130c0..340f96e44642 100644
>> --- a/drivers/char/hw_random/core.c
>> +++ b/drivers/char/hw_random/core.c
>> @@ -84,14 +84,14 @@ static size_t rng_buffer_size(void)
>>
>>  static void add_early_randomness(struct hwrng *rng)
>>  {
>> -     unsigned char bytes[16];
>>       int bytes_read;
>> +     size_t size = min_t(size_t, 16, rng_buffer_size());
>>
>>       mutex_lock(&reading_mutex);
>> -     bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
>> +     bytes_read = rng_get_data(rng, rng_buffer, size, 1);
>>       mutex_unlock(&reading_mutex);
>>       if (bytes_read > 0)
>> -             add_device_randomness(bytes, bytes_read);
>> +             add_device_randomness(rng_buffer, bytes_read);
>
> Shouldn't there be a memset(0) of the rng_buffer at this point to avoid having
> such data lingering in memory?

Sure, but shouldn't that be a separate patch covering the whole hw_crypto core?

--Andy


-- 
Andy Lutomirski
AMA Capital Management, LLC

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 17:30   ` Andy Lutomirski
@ 2016-10-17 18:36     ` Stephan Mueller
  2016-10-17 21:03       ` Andy Lutomirski
  0 siblings, 1 reply; 11+ messages in thread
From: Stephan Mueller @ 2016-10-17 18:36 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell, Jens Axboe, Matt Mullins

Am Montag, 17. Oktober 2016, 10:30:13 CEST schrieb Andy Lutomirski:

Hi Andy,
> 
> Sure, but shouldn't that be a separate patch covering the whole hw_crypto
> core?

I think that you are right -- there are many more cases where a memset(0) is 
warranted.

Do you want to make this change or should I send a patch?

Ciao
Stephan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 18:36     ` Stephan Mueller
@ 2016-10-17 21:03       ` Andy Lutomirski
  2016-10-17 21:14         ` Stephan Mueller
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Lutomirski @ 2016-10-17 21:03 UTC (permalink / raw)
  To: Stephan Mueller
  Cc: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell, Jens Axboe, Matt Mullins

On Mon, Oct 17, 2016 at 11:36 AM, Stephan Mueller <smueller@chronox.de> wrote:
> Am Montag, 17. Oktober 2016, 10:30:13 CEST schrieb Andy Lutomirski:
>
> Hi Andy,
>>
>> Sure, but shouldn't that be a separate patch covering the whole hw_crypto
>> core?
>
> I think that you are right -- there are many more cases where a memset(0) is
> warranted.
>
> Do you want to make this change or should I send a patch?

Can you do it?  I have my work cut out for me making sure that all the
known regressions get stomped quickly...

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 21:03       ` Andy Lutomirski
@ 2016-10-17 21:14         ` Stephan Mueller
  0 siblings, 0 replies; 11+ messages in thread
From: Stephan Mueller @ 2016-10-17 21:14 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell, Jens Axboe, Matt Mullins

Am Montag, 17. Oktober 2016, 14:03:17 CEST schrieb Andy Lutomirski:

Hi Andy,

> On Mon, Oct 17, 2016 at 11:36 AM, Stephan Mueller <smueller@chronox.de> 
wrote:
> > Am Montag, 17. Oktober 2016, 10:30:13 CEST schrieb Andy Lutomirski:
> > 
> > Hi Andy,
> > 
> >> Sure, but shouldn't that be a separate patch covering the whole hw_crypto
> >> core?
> > 
> > I think that you are right -- there are many more cases where a memset(0)
> > is warranted.
> > 
> > Do you want to make this change or should I send a patch?
> 
> Can you do it?  I have my work cut out for me making sure that all the
> known regressions get stomped quickly...

Sure, will do.

Thanks.

Ciao
Stephan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 17:06 [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness() Andy Lutomirski
  2016-10-16 21:19 ` [PATCH " Matt Mullins
  2016-10-17 17:17 ` [PATCH resend " Stephan Mueller
@ 2016-10-19  3:50 ` Herbert Xu
  2017-02-04  3:47 ` Yisheng Xie
  3 siblings, 0 replies; 11+ messages in thread
From: Herbert Xu @ 2016-10-19  3:50 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: linux-crypto, linux-kernel, Matt Mackall, Rusty Russell,
	Jens Axboe, Matt Mullins

On Mon, Oct 17, 2016 at 10:06:27AM -0700, Andy Lutomirski wrote:
> hw_random carefully avoids using a stack buffer except in
> add_early_randomness().  This causes a crash in virtio_rng if
> CONFIG_VMAP_STACK=y.
> 
> Reported-by: Matt Mullins <mmullins@mmlx.us>
> Tested-by: Matt Mullins <mmullins@mmlx.us>
> Fixes: d3cc7996473a ("hwrng: fetch randomness only after device init")
> Signed-off-by: Andy Lutomirski <luto@kernel.org>

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	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2016-10-17 17:06 [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness() Andy Lutomirski
                   ` (2 preceding siblings ...)
  2016-10-19  3:50 ` Herbert Xu
@ 2017-02-04  3:47 ` Yisheng Xie
  2017-02-04  4:34   ` Matt Mullins
  3 siblings, 1 reply; 11+ messages in thread
From: Yisheng Xie @ 2017-02-04  3:47 UTC (permalink / raw)
  To: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell
  Cc: Jens Axboe, Matt Mullins, Xishi Qiu, Hanjun Guo

Hi Andy,

On 2016/10/18 1:06, Andy Lutomirski wrote:
> hw_random carefully avoids using a stack buffer except in
> add_early_randomness().  This causes a crash in virtio_rng if
> CONFIG_VMAP_STACK=y.
I try to understand this patch, but I do not know why it will cause
a crash in virtio_rng with CONFIG_VMAP_STACK=y?
Could you please give me more info. about it.

Really thanks for that!
Yisheng Xie.

> 
> Reported-by: Matt Mullins <mmullins@mmlx.us>
> Tested-by: Matt Mullins <mmullins@mmlx.us>
> Fixes: d3cc7996473a ("hwrng: fetch randomness only after device init")
> Signed-off-by: Andy Lutomirski <luto@kernel.org>
> ---
> 
> This fixes a crash in 4.9-rc1.
> 
> resending because I typoed the git send-email command.  I stealthily added
> Matt's Tested-by, too.
> 
>  drivers/char/hw_random/core.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
> index 9203f2d130c0..340f96e44642 100644
> --- a/drivers/char/hw_random/core.c
> +++ b/drivers/char/hw_random/core.c
> @@ -84,14 +84,14 @@ static size_t rng_buffer_size(void)
>  
>  static void add_early_randomness(struct hwrng *rng)
>  {
> -	unsigned char bytes[16];
>  	int bytes_read;
> +	size_t size = min_t(size_t, 16, rng_buffer_size());
>  
>  	mutex_lock(&reading_mutex);
> -	bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
> +	bytes_read = rng_get_data(rng, rng_buffer, size, 1);
>  	mutex_unlock(&reading_mutex);
>  	if (bytes_read > 0)
> -		add_device_randomness(bytes, bytes_read);
> +		add_device_randomness(rng_buffer, bytes_read);
>  }
>  
>  static inline void cleanup_rng(struct kref *kref)
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2017-02-04  3:47 ` Yisheng Xie
@ 2017-02-04  4:34   ` Matt Mullins
  2017-02-04 10:32     ` Yisheng Xie
  0 siblings, 1 reply; 11+ messages in thread
From: Matt Mullins @ 2017-02-04  4:34 UTC (permalink / raw)
  To: Yisheng Xie
  Cc: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell, Jens Axboe, Matt Mullins, Xishi Qiu,
	Hanjun Guo

On Sat, Feb 04, 2017 at 11:47:38AM +0800, Yisheng Xie wrote:
> On 2016/10/18 1:06, Andy Lutomirski wrote:
> > hw_random carefully avoids using a stack buffer except in
> > add_early_randomness().  This causes a crash in virtio_rng if
> > CONFIG_VMAP_STACK=y.
> I try to understand this patch, but I do not know why it will cause
> a crash in virtio_rng with CONFIG_VMAP_STACK=y?
> Could you please give me more info. about it.

My original report was
https://lkml.kernel.org/r/20161016002151.GA18235@hydra.tuxags.com.

The virtio ring APIs use scatterlists to keep track of the buffers, and
scatterlist requires addresses to be in the kernel direct-mapped address range.
This is not the case for vmalloc()ed addresses, such as the original on-stack
"bytes" array when VMAP_STACK=y.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness()
  2017-02-04  4:34   ` Matt Mullins
@ 2017-02-04 10:32     ` Yisheng Xie
  0 siblings, 0 replies; 11+ messages in thread
From: Yisheng Xie @ 2017-02-04 10:32 UTC (permalink / raw)
  To: Andy Lutomirski, linux-crypto, linux-kernel, Matt Mackall,
	Herbert Xu, Rusty Russell, Jens Axboe, Matt Mullins, Xishi Qiu,
	Hanjun Guo

hi, Matt,
Thanks for your reply.

On 2017/2/4 12:34, Matt Mullins wrote:
> On Sat, Feb 04, 2017 at 11:47:38AM +0800, Yisheng Xie wrote:
>> On 2016/10/18 1:06, Andy Lutomirski wrote:
>>> hw_random carefully avoids using a stack buffer except in
>>> add_early_randomness().  This causes a crash in virtio_rng if
>>> CONFIG_VMAP_STACK=y.
>> I try to understand this patch, but I do not know why it will cause
>> a crash in virtio_rng with CONFIG_VMAP_STACK=y?
>> Could you please give me more info. about it.
> 
> My original report was
> https://lkml.kernel.org/r/20161016002151.GA18235@hydra.tuxags.com.
> 
> The virtio ring APIs use scatterlists to keep track of the buffers, and
> scatterlist requires addresses to be in the kernel direct-mapped address range.
> This is not the case for vmalloc()ed addresses, such as the original on-stack
> "bytes" array when VMAP_STACK=y.
> 
I see, and will check the logic to get more detail about it.

Thanks.
Yisheng Xie

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-02-04 10:32 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-17 17:06 [PATCH resend 4.9] hw_random: Don't use a stack buffer in add_early_randomness() Andy Lutomirski
2016-10-16 21:19 ` [PATCH " Matt Mullins
2016-10-17 17:17 ` [PATCH resend " Stephan Mueller
2016-10-17 17:30   ` Andy Lutomirski
2016-10-17 18:36     ` Stephan Mueller
2016-10-17 21:03       ` Andy Lutomirski
2016-10-17 21:14         ` Stephan Mueller
2016-10-19  3:50 ` Herbert Xu
2017-02-04  3:47 ` Yisheng Xie
2017-02-04  4:34   ` Matt Mullins
2017-02-04 10:32     ` Yisheng Xie

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).