[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d9ecdf72-7500-66d4-0360-231218cccbb4@linaro.org>
Date: Thu, 7 Jun 2018 20:47:25 +0200
From: Thierry Escande <thierry.escande@...aro.org>
To: Petr Mladek <pmladek@...e.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
David Miller <davem@...emloft.net>,
Rasmus Villemoes <linux@...musvillemoes.dk>,
"Tobin C . Harding" <me@...in.cc>, linux-kernel@...r.kernel.org,
Andy Shevchenko <andy.shevchenko@...il.com>
Subject: Re: [PATCH RESEND] lib/test_printf.c: call wait_for_random_bytes()
before plain %p tests
Hi Petr,
On 07/06/2018 14:24, Petr Mladek wrote:
> On Mon 2018-06-04 13:37:08, Thierry Escande wrote:
>> If the test_printf module is loaded before the crng is initialized, the
>> plain 'p' tests will fail because the printed address will not be hashed
>> and the buffer will contain '(ptrval)' instead.
>> This patch adds a call to wait_for_random_bytes() before plain 'p' tests
>> to make sure the crng is initialized.
>
> Hmm, my system did not boot with this patch and
> CONFIG_TEST_PRINTF=y
>
> I guess that there was not enough entropy. It is basically a deadlock.
> The build-in module init calls are called when SMP is enabled but
> there is no real activity and the init calls are called sequentially.
> Therefore there is nothing that could produce some entropy, ...
>
> I suggest to skip the test when crng is not ready.
Thanks for pointing this out.
The issue is that the crng_ready() is not available outside of random.c.
I'll leave the call to wait_for_random_bytes() if test_printf is
compiled as a module and use add_random_ready_callback() to check if
crng is initialized otherwise. Does that sound ok to you?
Regards,
Thierry
>
> Best Regards,
> Petr
>
>> Signed-off-by: Thierry Escande <thierry.escande@...aro.org>
>> Acked-by: Tobin C. Harding <me@...in.cc>
>> ---
>> lib/test_printf.c | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/lib/test_printf.c b/lib/test_printf.c
>> index 71ebfa43ad05..839be9385a8a 100644
>> --- a/lib/test_printf.c
>> +++ b/lib/test_printf.c
>> @@ -260,6 +260,13 @@ plain(void)
>> {
>> int err;
>>
>> + /*
>> + * Make sure crng is ready. Otherwise we get "(ptrval)" instead
>> + * of a hashed address when printing '%p' in plain_hash() and
>> + * plain_format().
>> + */
>> + wait_for_random_bytes();
>> +
>> err = plain_hash();
>> if (err) {
>> pr_warn("plain 'p' does not appear to be hashed\n");
>> --
>> 2.14.1
>>
Powered by blists - more mailing lists