Re: [PATCH v3] lib/test_printf.c: accept "ptrval" as valid result for plain 'p' tests

From: Andy Shevchenko
Date: Thu Jun 14 2018 - 04:59:59 EST


On Wed, Jun 13, 2018 at 8:18 PM, Thierry Escande
<thierry.escande@xxxxxxxxxx> 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.shevchenko@xxxxxxxxx>

> Signed-off-by: Thierry Escande <thierry.escande@xxxxxxxxxx>
> ---
>
> 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