[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