Message ID | 20230602170209.33275-1-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | time: Also check for EPERM while trying to clock_settime | expand |
On 6/2/23 13:02, Adhemerval Zanella via Libc-alpha wrote: > Container management default seccomp filter [1] only accepts > clock_settime if process has also CAP_SYS_TIME. So also handle > EPERM as well. > > Also adapt the test to libsupport and add a proper Copyright header. > LGTM. Reviewed-by: Carlos O'Donell <carlos@redhat.com> > Checked on aarch64-linux-gnu. > --- > time/tst-clock2.c | 59 ++++++++++++++++++++++++----------------------- > 1 file changed, 30 insertions(+), 29 deletions(-) > > diff --git a/time/tst-clock2.c b/time/tst-clock2.c > index 4c8fb9f247..9d1980e858 100644 > --- a/time/tst-clock2.c > +++ b/time/tst-clock2.c > @@ -1,43 +1,44 @@ > -/* Test setting the monotonic clock. */ > +/* Test setting the monotonic clock. > + Copyright (C) 2007-2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > > -#include <time.h> > -#include <unistd.h> > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > > -#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > > -# include <errno.h> > -# include <stdio.h> > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <errno.h> > +#include <support/check.h> > +#include <time.h> > +#include <unistd.h> > > -static int > +int > do_test (void) > { > +#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK > if (sysconf (_SC_MONOTONIC_CLOCK) <= 0) > - return 0; > + FAIL_UNSUPPORTED ("_SC_MONOTONIC_CLOCK not supported"); > > struct timespec ts; > - if (clock_gettime (CLOCK_MONOTONIC, &ts) != 0) > - { > - puts ("clock_gettime(CLOCK_MONOTONIC) failed"); > - return 1; > - } > + TEST_COMPARE (clock_gettime (CLOCK_MONOTONIC, &ts), 0); > > /* Setting the monotonic clock must fail. */ > - if (clock_settime (CLOCK_MONOTONIC, &ts) != -1) > - { > - puts ("clock_settime(CLOCK_MONOTONIC) did not fail"); > - return 1; > - } > - if (errno != EINVAL) > - { > - printf ("clock_settime(CLOCK_MONOTONIC) set errno to %d, expected %d\n", > - errno, EINVAL); > - return 1; > - } > - return 0; > -} > -# define TEST_FUNCTION do_test () > + TEST_VERIFY (clock_settime (CLOCK_MONOTONIC, &ts) == -1); > + TEST_VERIFY (errno == EINVAL || errno == EPERM); > > + return 0; > #else > -# define TEST_FUNCTION 0 > + return EXIT_UNSUPPORTED; > #endif > -#include "../test-skeleton.c" > +} > + > +#include <support/test-driver.c>
diff --git a/time/tst-clock2.c b/time/tst-clock2.c index 4c8fb9f247..9d1980e858 100644 --- a/time/tst-clock2.c +++ b/time/tst-clock2.c @@ -1,43 +1,44 @@ -/* Test setting the monotonic clock. */ +/* Test setting the monotonic clock. + Copyright (C) 2007-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. -#include <time.h> -#include <unistd.h> + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. -# include <errno.h> -# include <stdio.h> + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <support/check.h> +#include <time.h> +#include <unistd.h> -static int +int do_test (void) { +#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK if (sysconf (_SC_MONOTONIC_CLOCK) <= 0) - return 0; + FAIL_UNSUPPORTED ("_SC_MONOTONIC_CLOCK not supported"); struct timespec ts; - if (clock_gettime (CLOCK_MONOTONIC, &ts) != 0) - { - puts ("clock_gettime(CLOCK_MONOTONIC) failed"); - return 1; - } + TEST_COMPARE (clock_gettime (CLOCK_MONOTONIC, &ts), 0); /* Setting the monotonic clock must fail. */ - if (clock_settime (CLOCK_MONOTONIC, &ts) != -1) - { - puts ("clock_settime(CLOCK_MONOTONIC) did not fail"); - return 1; - } - if (errno != EINVAL) - { - printf ("clock_settime(CLOCK_MONOTONIC) set errno to %d, expected %d\n", - errno, EINVAL); - return 1; - } - return 0; -} -# define TEST_FUNCTION do_test () + TEST_VERIFY (clock_settime (CLOCK_MONOTONIC, &ts) == -1); + TEST_VERIFY (errno == EINVAL || errno == EPERM); + return 0; #else -# define TEST_FUNCTION 0 + return EXIT_UNSUPPORTED; #endif -#include "../test-skeleton.c" +} + +#include <support/test-driver.c>