lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230817154754.278218ae@donnerap.manchester.arm.com>
Date:   Thu, 17 Aug 2023 15:47:54 +0100
From:   Andre Przywara <andre.przywara@....com>
To:     Shuah Khan <skhan@...uxfoundation.org>
Cc:     Shuah Khan <shuah@...nel.org>, Nhat Pham <nphamcs@...il.com>,
        Johannes Weiner <hannes@...xchg.org>,
        linux-kselftest@...r.kernel.org, linux-mm@...ck.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/3] selftests: cachestat: test for cachestat
 availability

On Wed, 16 Aug 2023 11:11:49 -0600
Shuah Khan <skhan@...uxfoundation.org> wrote:

Hi,

> On 8/15/23 09:56, Andre Przywara wrote:
> > As cachestat is a new syscall, it won't be available on older kernels,
> > for instance those running on a build machine. In this case, a run
> > reports all tests as "not ok" at the moment.
> > 
> > Test for the cachestat syscall availability first, before doing further
> > tests, and bail out early with a TAP SKIP comment.
> > 
> > This also uses the opportunity to add the proper TAP headers, and add
> > one check for the syscall error handling (illegal file descriptor).
> > 
> > Signed-off-by: Andre Przywara <andre.przywara@....com>
> > ---
> >   .../selftests/cachestat/test_cachestat.c      | 22 ++++++++++++++++++-
> >   1 file changed, 21 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tools/testing/selftests/cachestat/test_cachestat.c b/tools/testing/selftests/cachestat/test_cachestat.c
> > index a5a4ac8dcb76c..77620e7ecf562 100644
> > --- a/tools/testing/selftests/cachestat/test_cachestat.c
> > +++ b/tools/testing/selftests/cachestat/test_cachestat.c
> > @@ -15,6 +15,8 @@
> >   
> >   #include "../kselftest.h"
> >   
> > +#define NR_TESTS	8
> > +
> >   static const char * const dev_files[] = {
> >   	"/dev/zero", "/dev/null", "/dev/urandom",
> >   	"/proc/version", "/proc"
> > @@ -235,7 +237,25 @@ bool test_cachestat_shmem(void)
> >   
> >   int main(void)
> >   {
> > -	int ret = 0;
> > +	int ret;
> > +
> > +	ksft_print_header();
> > +
> > +	ret = syscall(__NR_cachestat, -1, NULL, NULL, 0);
> > +	if (ret == -1 && errno == ENOSYS) {
> > +		printf("1..0 # Skipped: cachestat syscall not available\n");
> > +		return KSFT_SKIP;  
> What happens when other errors besides ENOSYS? The test shouldn't
> continue.

-1 is an illegal file descriptor, and this is checked below (still using
the same ret and errno), but reported using the normal framework.
This check above is done early, before we even announce the plan, so that
we can skip *all* of the tests, since they don't make any sense when the
syscall is not available at all.

Does that make sense?

Cheers,
Andre

> 
> > +	}
> > +
> > +	ksft_set_plan(NR_TESTS);
> > +
> > +	if (ret == -1 && errno == EBADF) {
> > +		ksft_test_result_pass("bad file descriptor recognized\n");
> > +		ret = 0;
> > +	} else {
> > +		ksft_test_result_fail("bad file descriptor ignored\n");
> > +		ret = 1;
> > +	}
> >   
> >   	for (int i = 0; i < 5; i++) {
> >   		const char *dev_filename = dev_files[i];  
> 
> thanks,
> -- Shuah

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ