On Wed, Jun 13, 2018 at 8:18 PM, Thierry Escande
<thierry.esca...@linaro.org> 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____)" or "(ptrval)" instead
> (64-bit vs 32-bit).
> Since we cannot wait for the crng to be initialized for an undefined
> time, both plain 'p' tests now accept the strings "(____ptrval____)" or
> "(ptrval)" as a valid result and print a warning message.
>

LGTM.
Reviewed-by: Andy Shevchenko <andy.shevche...@gmail.com>

> Signed-off-by: Thierry Escande <thierry.esca...@linaro.org>
> ---
>
> Changes in v3:
> - Use "(____ptrval____)" for 64-bit
> - Update commit message headline
>
> Changes in v2:
> - Remove wait_for_random_bytes() usage
> - Remove Acked-by from Tobin as the proposed solution is not the same
>   anymore.
>
>  lib/test_printf.c | 24 ++++++++++++++++++++++--
>  1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/lib/test_printf.c b/lib/test_printf.c
> index 71ebfa43ad05..31f00b8ca657 100644
> --- a/lib/test_printf.c
> +++ b/lib/test_printf.c
> @@ -206,6 +206,7 @@ test_string(void)
>  #define PTR_WIDTH 16
>  #define PTR ((void *)0xffff0123456789ab)
>  #define PTR_STR "ffff0123456789ab"
> +#define PTR_VAL_NO_CRNG "(____ptrval____)"
>  #define ZEROS "00000000"       /* hex 32 zero bits */
>
>  static int __init
> @@ -216,7 +217,16 @@ plain_format(void)
>
>         nchars = snprintf(buf, PLAIN_BUF_SIZE, "%p", PTR);
>
> -       if (nchars != PTR_WIDTH || strncmp(buf, ZEROS, strlen(ZEROS)) != 0)
> +       if (nchars != PTR_WIDTH)
> +               return -1;
> +
> +       if (strncmp(buf, PTR_VAL_NO_CRNG, PTR_WIDTH) == 0) {
> +               pr_warn("crng possibly not yet initialized. plain 'p' buffer 
> contains \"%s\"",
> +                       PTR_VAL_NO_CRNG);
> +               return 0;
> +       }
> +
> +       if (strncmp(buf, ZEROS, strlen(ZEROS)) != 0)
>                 return -1;
>
>         return 0;
> @@ -227,6 +237,7 @@ plain_format(void)
>  #define PTR_WIDTH 8
>  #define PTR ((void *)0x456789ab)
>  #define PTR_STR "456789ab"
> +#define PTR_VAL_NO_CRNG "(ptrval)"
>
>  static int __init
>  plain_format(void)
> @@ -245,7 +256,16 @@ plain_hash(void)
>
>         nchars = snprintf(buf, PLAIN_BUF_SIZE, "%p", PTR);
>
> -       if (nchars != PTR_WIDTH || strncmp(buf, PTR_STR, PTR_WIDTH) == 0)
> +       if (nchars != PTR_WIDTH)
> +               return -1;
> +
> +       if (strncmp(buf, PTR_VAL_NO_CRNG, PTR_WIDTH) == 0) {
> +               pr_warn("crng possibly not yet initialized. plain 'p' buffer 
> contains \"%s\"",
> +                       PTR_VAL_NO_CRNG);
> +               return 0;
> +       }
> +
> +       if (strncmp(buf, PTR_STR, PTR_WIDTH) == 0)
>                 return -1;
>
>         return 0;
> --
> 2.14.1
>



-- 
With Best Regards,
Andy Shevchenko

Reply via email to