[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20201030162625.GE20201@alley>
Date: Fri, 30 Oct 2020 17:26:25 +0100
From: Petr Mladek <pmladek@...e.com>
To: Rasmus Villemoes <linux@...musvillemoes.dk>
Cc: Shuah Khan <shuah@...nel.org>, Kees Cook <keescook@...omium.org>,
Willy Tarreau <w@....eu>, linux-kselftest@...r.kernel.org,
linux-kernel@...r.kernel.org,
Arpitha Raghunandan <98.arpi@...il.com>,
Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
Brendan Higgins <brendanhiggins@...gle.com>
Subject: Re: [PATCH 4/4] lib/test_printf.c: use deterministic sequence of
random numbers
On Sun 2020-10-25 22:48:42, Rasmus Villemoes wrote:
> The printf test suite does each test with a few different buffer sizes
> to ensure vsnprintf() behaves correctly with respect to truncation and
> size reporting. It calls vsnprintf() with a buffer size that is
> guaranteed to be big enough, a buffer size of 0 to ensure that nothing
> gets written to the buffer, but it also calls vsnprintf() with a
> buffer size chosen to guarantee the output gets truncated somewhere in
> the middle.
>
> That buffer size is chosen randomly to increase the chance of finding
> some corner case bug (for example, there used to be some %p<foo>
> extension that would fail to produce any output if there wasn't room
> enough for it all, despite the requirement of producing as much as
> there's room for). I'm not aware of that having found anything yet,
> but should it happen, it's annoying not to be able to repeat the
> test with the same sequence of truncated lengths.
>
> For demonstration purposes, if we break one of the test cases
> deliberately, we still get different buffer sizes if we don't pass the
> seed parameter:
>
> root@(none):/# modprobe test_printf
> [ 15.317783] test_printf: vsnprintf(buf, 18, "%piS|%pIS", ...) wrote '127.000.000.001|1', expected '127-000.000.001|1'
> [ 15.323182] test_printf: failed 3 out of 388 tests
> [ 15.324034] test_printf: random seed used was 0x278bb9311979cc91
> modprobe: ERROR: could not insert 'test_printf': Invalid argument
>
> root@(none):/# modprobe test_printf
> [ 13.940909] test_printf: vsnprintf(buf, 22, "%piS|%pIS", ...) wrote '127.000.000.001|127.0', expected '127-000.000.001|127.0'
> [ 13.944744] test_printf: failed 3 out of 388 tests
> [ 13.945607] test_printf: random seed used was 0x9f72eee1c9dc02e5
> modprobe: ERROR: could not insert 'test_printf': Invalid argument
>
> but to repeat a specific sequence of tests, we can do
>
> root@(none):/# modprobe test_printf seed=0x9f72eee1c9dc02e5
> [ 448.328685] test_printf: vsnprintf(buf, 22, "%piS|%pIS", ...) wrote '127.000.000.001|127.0', expected '127-000.000.001|127.0'
> [ 448.331650] test_printf: failed 3 out of 388 tests
> [ 448.332295] test_printf: random seed used was 0x9f72eee1c9dc02e5
> modprobe: ERROR: could not insert 'test_printf': Invalid argument
>
> Signed-off-by: Rasmus Villemoes <linux@...musvillemoes.dk>
Great feature!
Reviewed-by: Petr Mladek <pmladek@...e.com>
Best Regards,
Petr
Powered by blists - more mailing lists