[Devel] [PATCH vz10 v2] selftests: binderfs: skip the stress test without binderfs

Konstantin Khorenko khorenko at virtuozzo.com
Wed Sep 23 21:03:32 MSK 2026


changelog?

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 9/10/26 05:10, Eva Kurchatova wrote:
> binderfs_stress mounts binderfs and asserts on the first mount, so on
> a kernel without CONFIG_ANDROID_BINDERFS the case fails rather than
> reporting that the filesystem is not there.
> 
> Ask /proc/filesystems whether the kernel has it, the way
> supports_filesystem() in the landlock tests and check_resctrlfs_support()
> in the resctrl ones already do, and skip when it does not.
> 
> Probing with a mount instead would not work here: the test is meant to
> run unprivileged, and path_mount() rejects an unprivileged caller in
> may_mount() before do_new_mount() ever looks the filesystem type up, so
> the probe would see EPERM whether binderfs is there or not.  The child
> would then still reach the real mount inside its userns and fail.
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-142449
> Feature: fix selftests
> 
> Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
> ---
>  .../filesystems/binderfs/binderfs_test.c      | 25 +++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c
> index 319567f0fae1..fd1f9b6e5d46 100644
> --- a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c
> +++ b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c
> @@ -36,6 +36,28 @@
>  		fd = -EBADF;        \
>  	}
>  
> +static bool binderfs_supported(void)
> +{
> +	char line[128];
> +	bool ret = false;
> +	FILE *f;
> +
> +	f = fopen("/proc/filesystems", "r");
> +	if (!f)
> +		return true;	/* Cannot tell, let the test run and report. */
> +
> +	while (fgets(line, sizeof(line), f)) {
> +		/* binderfs has no backing device, hence the "nodev" prefix. */
> +		if (!strcmp(line, "nodev\tbinder\n")) {
> +			ret = true;
> +			break;
> +		}
> +	}
> +
> +	fclose(f);
> +	return ret;
> +}
> +
>  static void change_mountns(struct __test_metadata *_metadata)
>  {
>  	int ret;
> @@ -388,6 +410,9 @@ TEST(binderfs_stress)
>  	char binderfs_mntpt[] = P_tmpdir "/binderfs_XXXXXX",
>  		device_path[sizeof(P_tmpdir "/binderfs_XXXXXX/") + BINDERFS_MAX_NAME];
>  
> +	if (!binderfs_supported())
> +		SKIP(return, "The Android binderfs filesystem is not available");
> +
>  	ret = socketpair(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0, syncfds);
>  	ASSERT_EQ(ret, 0) {
>  		TH_LOG("%s - Failed to create socket pair", strerror(errno));



More information about the Devel mailing list