[LTP] [PATCH 1/2] syscalls/pidfd_open01.c: Add check for close-on-exec flag

Viresh Kumar viresh.kumar@linaro.org
Mon May 4 07:09:37 CEST 2020


On 30-04-20, 16:57, Xiao Yang wrote:
> pidfd_open(2) will set close-on-exec flag on the file descriptor as it
> manpage states, so check close-on-exec flag by fcntl(2).
> 
> Also avoid compiler warning by replacing (long) TST_RET with (int) pidfd:
> ------------------------------------------------------
> In file included from pidfd_open01.c:9:
> pidfd_open01.c: In function ‘run’:
> ../../../../include/tst_test.h:76:41: warning: format ‘%i’ expects argument of type ‘int’, but argument 5 has type ‘long int’ [-Wformat=]
>    76 |   tst_brk_(__FILE__, __LINE__, (ttype), (arg_fmt), ##__VA_ARGS__);\
>       |                                         ^~~~~~~~~
> ../../../../include/tst_safe_macros.h:224:5: note: in expansion of macro ‘tst_brk’
>   224 |     tst_brk(TBROK | TERRNO,                          \
>       |     ^~~~~~~
> pidfd_open01.c:20:9: note: in expansion of macro ‘SAFE_FCNTL’
>    20 |  flag = SAFE_FCNTL(TST_RET, F_GETFD);

This log isn't useful as the warning started coming after your change
only and not before.

> ------------------------------------------------------
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
>  .../kernel/syscalls/pidfd_open/pidfd_open01.c  | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/pidfd_open/pidfd_open01.c b/testcases/kernel/syscalls/pidfd_open/pidfd_open01.c
> index 93bb86687..293e93b63 100644
> --- a/testcases/kernel/syscalls/pidfd_open/pidfd_open01.c
> +++ b/testcases/kernel/syscalls/pidfd_open/pidfd_open01.c
> @@ -6,17 +6,27 @@
>   * Basic pidfd_open() test, fetches the PID of the current process and tries to
>   * get its file descriptor.
>   */
> +
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <fcntl.h>
>  #include "tst_test.h"
>  #include "lapi/pidfd_open.h"
>  
>  static void run(void)
>  {
> -	TEST(pidfd_open(getpid(), 0));
> +	int pidfd = 0, flag = 0;

None of these need to be initialized.

> +
> +	pidfd = pidfd_open(getpid(), 0);
> +	if (pidfd == -1)
> +		tst_brk(TFAIL | TERRNO, "pidfd_open(getpid(), 0) failed");

This could have been written as:
        TEST(pidfd = pidfd_open(getpid(), 0));

> +
> +	flag = SAFE_FCNTL(pidfd, F_GETFD);
>  
> -	if (TST_RET == -1)
> -		tst_brk(TFAIL | TTERRNO, "pidfd_open(getpid(), 0) failed");
> +	SAFE_CLOSE(pidfd);
>  
> -	SAFE_CLOSE(TST_RET);
> +	if (!(flag & FD_CLOEXEC))
> +		tst_brk(TFAIL, "pidfd_open(getpid(), 0) didn't set close-on-exec flag");
>  
>  	tst_res(TPASS, "pidfd_open(getpid(), 0) passed");
>  }
> -- 
> 2.21.0
> 
> 

-- 
viresh


More information about the ltp mailing list