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

Viresh Kumar viresh.kumar@linaro.org
Tue May 5 05:28:03 CEST 2020


On 04-05-20, 19:31, Xiao Yang wrote:
> On 5/4/20 1:09 PM, Viresh Kumar wrote:
> > 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.
> 
> Hi Viresh,
> 
> Thanks for your review.
> 
> Right,just add a hint why I use pidfd instead so I want to keep it.
> 
> Of course,I will mention that my change introduces the compiler warning in
> v2 patch.

Even that isn't required really. You can add a variable if you like.

> > 
> > > ------------------------------------------------------
> > > 
> > > 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.
> 
> Initialization or not initialization are both fine for me.
>
> Do you have any strong reason to drop Initialization?

Initializations are only required if there is a chance of the variable
getting used without being initialized, which isn't the case here.
Whatever value you set to these variables, they will get overwritten
anyway.

> > 
> > > +
> > > +	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));
> 
> Why do you want to keep TEST()? I don't think it is necessary:
> 
> 1) pidfd and TERRNO are enough to check return value and errno.
> 
> 2) It is OK for testcase to not use TEST().

As far as I have understood, that is the preferred way of doing it
from LTP maintainers.

Over that it was already there, why remove it now ? Just fix the
problems you are trying to fix and that should be good.

-- 
viresh


More information about the ltp mailing list