[LTP] [PATCH] sycalls: select03: Make nfds use the correct value

Yang Xu xuyang2018.jy@cn.fujitsu.com
Thu Nov 5 11:56:41 CET 2020


Hi Feiyu
> When running select03 with runltp in /opt/ltp, this case failed as below:
> select03.c:52: TFAIL: Invalid readfds: select() passed unexpectedly with 0
> select03.c:52: TFAIL: Invalid writefds: select() passed unexpectedly with 0
> select03.c:52: TFAIL: Invalid exceptfds: select() passed unexpectedly with 0
>
> When running select03 with runltp, nfds should be 8 or 9 instead of 6.
>
> Reviewed-by: Yang Xu<xuyang2018.jy@cn.fujitsu.com>
> Signed-off-by: Feiyu Zhu<zhufy.jy@cn.fujitsu.com>
> ---
>   testcases/kernel/syscalls/select/select03.c | 19 ++++++++++++-------
>   1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/select/select03.c b/testcases/kernel/syscalls/select/select03.c
> index ca1b7a5..34264d1 100644
> --- a/testcases/kernel/syscalls/select/select03.c
> +++ b/testcases/kernel/syscalls/select/select03.c
> @@ -30,19 +30,24 @@ static struct tcases {
>   	int exp_errno;
>   } tests[] = {
>   	{ "Negative nfds", -1,&preadfds_reg,&pwritefds_reg,&nullfds,&valid_to, EINVAL },
> -	{ "Invalid readfds", 6,&pfds_closed,&pwritefds_reg,&nullfds,&valid_to, EBADF },
> -	{ "Invalid writefds", 6,&preadfds_reg,&pfds_closed,&nullfds,&valid_to, EBADF },
> -	{ "Invalid exceptfds", 6,&preadfds_reg,&pwritefds_reg,&pfds_closed,&valid_to, EBADF },
> -	{ "Faulty readfds", 6,&faulty_fds,&pwritefds_reg,&nullfds,&valid_to, EFAULT },
> -	{ "Faulty writefds", 6,&preadfds_reg,&faulty_fds,&nullfds,&valid_to, EFAULT },
> -	{ "Faulty exceptfds", 6,&preadfds_reg,&pwritefds_reg,&faulty_fds,&valid_to, EFAULT },
> -	{ "Faulty timeout", 6,&preadfds_reg,&pwritefds_reg,&nullfds,&invalid_to, EFAULT },
> +	{ "Invalid readfds", 1,&pfds_closed,&pwritefds_reg,&nullfds,&valid_to, EBADF },
> +	{ "Invalid writefds", 0,&preadfds_reg,&pfds_closed,&nullfds,&valid_to, EBADF },
> +	{ "Invalid exceptfds", 1,&preadfds_reg,&pwritefds_reg,&pfds_closed,&valid_to, EBADF },
> +	{ "Faulty readfds", 1,&faulty_fds,&pwritefds_reg,&nullfds,&valid_to, EFAULT },
> +	{ "Faulty writefds", 0,&preadfds_reg,&faulty_fds,&nullfds,&valid_to, EFAULT },
> +	{ "Faulty exceptfds", 1,&preadfds_reg,&pwritefds_reg,&faulty_fds,&valid_to, EFAULT },
> +	{ "Faulty timeout", 1,&preadfds_reg,&pwritefds_reg,&nullfds,&invalid_to, EFAULT },
>   };
>
>   static void run(unsigned int n)
>   {
>   	struct tcases *tc =&tests[n];
>
> +	if (tc->nfds == 0)
> +		tc->nfds = fd[0]+1;
> +	else if (tc->nfds == 1)
> +		tc->nfds = fd[1]+1;
I guess we should only use fd[1] + 1 because fd[1] is always greater 
than fds[0]. As man-page said" nfds is the highest-numbered file 
descriptor in any of the three sets, plus 1."

So the code maybe as below
diff --git a/testcases/kernel/syscalls/select/select03.c 
b/testcases/kernel/syscalls/select/select03.c
index ca1b7a504..099b622de 100644
--- a/testcases/kernel/syscalls/select/select03.c
+++ b/testcases/kernel/syscalls/select/select03.c
@@ -29,21 +29,21 @@ static struct tcases {
         struct timeval **timeout;
         int exp_errno;
  } tests[] = {
-       { "Negative nfds", -1, &preadfds_reg, &pwritefds_reg, &nullfds, 
&valid_to, EINVAL },
-       { "Invalid readfds", 6, &pfds_closed, &pwritefds_reg, &nullfds, 
&valid_to, EBADF },
-       { "Invalid writefds", 6, &preadfds_reg, &pfds_closed, &nullfds, 
&valid_to, EBADF },
-       { "Invalid exceptfds", 6, &preadfds_reg, &pwritefds_reg, 
&pfds_closed, &valid_to, EBADF },
-       { "Faulty readfds", 6, &faulty_fds, &pwritefds_reg, &nullfds, 
&valid_to, EFAULT },
-       { "Faulty writefds", 6, &preadfds_reg, &faulty_fds, &nullfds, 
&valid_to, EFAULT },
-       { "Faulty exceptfds", 6, &preadfds_reg, &pwritefds_reg, 
&faulty_fds, &valid_to, EFAULT },
-       { "Faulty timeout", 6, &preadfds_reg, &pwritefds_reg, &nullfds, 
&invalid_to, EFAULT },
+       { "Negative nfds", 0, &preadfds_reg, &pwritefds_reg, &nullfds, 
&valid_to, EINVAL },
+       { "Invalid readfds", 1, &pfds_closed, &pwritefds_reg, &nullfds, 
&valid_to, EBADF },
+       { "Invalid writefds", 1, &preadfds_reg, &pfds_closed, &nullfds, 
&valid_to, EBADF },
+       { "Invalid exceptfds", 1, &preadfds_reg, &pwritefds_reg, 
&pfds_closed, &valid_to, EBADF },
+       { "Faulty readfds", 1, &faulty_fds, &pwritefds_reg, &nullfds, 
&valid_to, EFAULT },
+       { "Faulty writefds", 1, &preadfds_reg, &faulty_fds, &nullfds, 
&valid_to, EFAULT },
+       { "Faulty exceptfds", 1, &preadfds_reg, &pwritefds_reg, 
&faulty_fds, &valid_to, EFAULT },
+       { "Faulty timeout", 1, &preadfds_reg, &pwritefds_reg, &nullfds, 
&invalid_to, EFAULT },
  };

  static void run(unsigned int n)
  {
         struct tcases *tc = &tests[n];

-       TEST(do_select_faulty_to(tc->nfds, *tc->readfds, *tc->writefds,
+       TEST(do_select_faulty_to(tc->nfds ? fd[1] + 1 : -1, 
*tc->readfds, *tc->writefds,
                                  *tc->exceptfds, *tc->timeout,
                                  tc->timeout == &invalid_to));


Best Regrads
Yang Xu
> +
>   	TEST(do_select_faulty_to(tc->nfds, *tc->readfds, *tc->writefds,
>   				 *tc->exceptfds, *tc->timeout,
>   				 tc->timeout ==&invalid_to));





More information about the ltp mailing list