[LTP] [PATCH] mmap18: fix when PTHREAD_STACK_MIN < PAGE_SIZE

Cyril Hrubis chrubis@suse.cz
Mon Jul 12 15:47:32 CEST 2021


Hi!
> PTHREAD_STACK_MIN can be less than the page size, to be more
> precise 2048 on musl. This value is used in the test as an
> offset for a new stack address with mmap() + MAP_FIXED flag.
> Though it might not be aligned to the page size.
> 
> This breaks the test with musl:
> 
>   tst_test.c:1311: TINFO: Timeout per run is 0h 05m 00s
>   mmap18.c:98: TBROK: mmap(0x7fe67e2ee800,2048,3,306,-1,0) failed: EINVAL (22)
>   mmap18.c:169: TFAIL: Child: exited with 2
>   [...]
> 
> The fix is to align mapped_size arg to the page size.
> 
> Signed-off-by: Alexey Kodanev <aleksei.kodanev@bell-sw.com>
> ---
>  testcases/kernel/syscalls/mmap/mmap18.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/mmap/mmap18.c b/testcases/kernel/syscalls/mmap/mmap18.c
> index dc2926454..b37b29890 100644
> --- a/testcases/kernel/syscalls/mmap/mmap18.c
> +++ b/testcases/kernel/syscalls/mmap/mmap18.c
> @@ -200,11 +200,12 @@ static void grow_stack_fail(size_t stack_size, size_t mapped_size)
>  
>  static void run_test(void)
>  {
> -	size_t stack_size = 8 * PTHREAD_STACK_MIN;
> +	size_t pthread_stack = LTP_ALIGN(PTHREAD_STACK_MIN, getpagesize());
> +	size_t stack_size = 8 * pthread_stack;

Looking at the code we have to align both stack size and mapped size so
this is correct. I guess that we can save a bit by aligning each of them
independently since 8 * PTHREAD_STACK_MIN would in most cases be aligned
allready.

	size_t pthread_stack = LTP_ALIGN(PTHREAD_STACK_MIN, getpagesize());
	size_t stack_size = LTP_ALIGN(8 * PTHREAD_STACK_MIN, getpagesize());

Either way this looks good so:

Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

> -	grow_stack_success(stack_size, PTHREAD_STACK_MIN);
> +	grow_stack_success(stack_size, pthread_stack);
>  	grow_stack_success(stack_size, stack_size/2);
> -	grow_stack_fail(stack_size, PTHREAD_STACK_MIN);
> +	grow_stack_fail(stack_size, pthread_stack);
>  	grow_stack_fail(stack_size, stack_size/2);
>  }
>  
> -- 
> 2.25.1
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list