[LTP] [PATCH v2] Fix prctl02

Yang Xu xuyang_jy_0410@163.com
Fri Jan 24 12:10:26 CET 2020


Hi
> The prctl() system call takes 5 integer arguments but only 3 of them were
> passed in the test. This means that the system call read random garbage
> from stack in place of the two missing arguments and failed even on some
> perfectly valid combinations of arguments on some platforms.
> 
> - Change num_invalid to ULONG_MAX
> - Fix arguments in test case 9, 13 and 14
> - Fix test call of prctl() to have all 5 arguments
looks prctl manpages and kernel code, you are right, Thanks for the fix!
Feel free to add,
Reviewed-by: xuyang_jy_0410@163.com
Tested-by: xuyang_jy_0410@163.com

Also, do we should use 5 arguments for other prctl test cases?

Best Regards
Yang Xu
> 
> Signed-off-by: Martin Doucha <mdoucha@suse.cz>
> CC: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
> ---
>  
> Changes since v1:
> - Change num_invalid to ULONG_MAX
> - Return removed test cases and fix them instead
> 
>   testcases/kernel/syscalls/prctl/prctl02.c | 11 ++++++-----
>   1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/prctl/prctl02.c b/testcases/kernel/syscalls/prctl/prctl02.c
> index 93f30b54a..ebc0e5060 100644
> --- a/testcases/kernel/syscalls/prctl/prctl02.c
> +++ b/testcases/kernel/syscalls/prctl/prctl02.c
> @@ -41,6 +41,7 @@
>   #include <unistd.h>
>   #include <stdlib.h>
>   #include <stddef.h>
> +#include <limits.h>
>   #include "config.h"
>   #include "lapi/prctl.h"
>   #include "lapi/seccomp.h"
> @@ -65,7 +66,7 @@ static unsigned long bad_addr;
>   static unsigned long num_0;
>   static unsigned long num_1 = 1;
>   static unsigned long num_2 = 2;
> -static unsigned long num_invalid = 999;
> +static unsigned long num_invalid = ULONG_MAX;
>   static int seccomp_nsup;
>   static int nonewprivs_nsup;
>   static int thpdisable_nsup;
> @@ -87,12 +88,12 @@ static struct tcase {
>   	{PR_SET_SECCOMP, &num_2, &strict_addr, EACCES, "PR_SET_SECCOMP"},
>   	{PR_SET_TIMING, &num_1, &num_0, EINVAL, "PR_SET_TIMING"},
>   	{PR_SET_NO_NEW_PRIVS, &num_0, &num_0, EINVAL, "PR_SET_NO_NEW_PRIVS"},
> -	{PR_SET_NO_NEW_PRIVS, &num_1, &num_0, EINVAL, "PR_SET_NO_NEW_PRIVS"},
> +	{PR_SET_NO_NEW_PRIVS, &num_1, &num_1, EINVAL, "PR_SET_NO_NEW_PRIVS"},
>   	{PR_GET_NO_NEW_PRIVS, &num_1, &num_0, EINVAL, "PR_GET_NO_NEW_PRIVS"},
>   	{PR_SET_THP_DISABLE, &num_0, &num_1, EINVAL, "PR_SET_THP_DISABLE"},
>   	{PR_GET_THP_DISABLE, &num_1, &num_1, EINVAL, "PR_GET_THP_DISABLE"},
> -	{PR_CAP_AMBIENT, &num_2, &num_1, EINVAL, "PR_CAP_AMBIENT"},
> -	{PR_GET_SPECULATION_CTRL, &num_1, &num_0, EINVAL, "PR_GET_SPECULATION_CTRL"},
> +	{PR_CAP_AMBIENT, &num_invalid, &num_0, EINVAL, "PR_CAP_AMBIENT"},
> +	{PR_GET_SPECULATION_CTRL, &num_0, &num_invalid, EINVAL, "PR_GET_SPECULATION_CTRL"},
>   	{PR_SET_SECUREBITS, &num_0, &num_0, EPERM, "PR_SET_SECUREBITS"},
>   	{PR_CAPBSET_DROP, &num_1, &num_0, EPERM, "PR_CAPBSET_DROP"},
>   };
> @@ -140,7 +141,7 @@ static void verify_prctl(unsigned int n)
>   	break;
>   	}
>   
> -	TEST(prctl(tc->option, *tc->arg2, *tc->arg3));
> +	TEST(prctl(tc->option, *tc->arg2, *tc->arg3, 0, 0));
>   	if (TST_RET == 0) {
>   		tst_res(TFAIL, "prctl() succeeded unexpectedly");
>   		return;
> 



More information about the ltp mailing list