[PATCH v5] selftests/landlock: Skip overlayfs tests not supported

Mickaël Salaün mic at digikod.net
Tue Sep 27 16:47:53 UTC 2022


On 26/09/2022 16:23, Jeff Xu wrote:
> On Thu, Aug 25, 2022 at 1:23 AM Mickaël Salaün <mic at digikod.net> wrote:
>>
>> As discussed for the v4, the next version of this patch needs a
>> TEST_F_FORK() fix.
>>
> I can make TEST_F_FORK() to be skipped when SKIP() is called
> in FIXTURE_SETUP(), but this makes FIXTURE_TEARDOWN()
> complicated, because SKIP() can be called after any resource
> creation failure in the FIXTURE_SETUP().
> 
> Another (better) option:  add generic FIXTURE_CONFIG_CHECK()
> FIXTURE_CONFIG_CHECK() checks the runtime configuration for
> current FIXTURE, if the configuration is not met, the whole test will be
> skipped, including FIXTURE_SETUP()/TEARDOWN(), TEST_F_FORK(),
> so there is no resource clear up issue after test.

This looks like a good idea. What do you think Shuah?


> 
>> Please add a link to the previous patch (lore.kernel.org) for each new
>> version.
>>
>>
>> On 24/08/2022 03:58, jeffxu at chromium.org wrote:
>>> From: Jeff Xu <jeffxu at chromium.org>
>>>
>>> overlayfs can be disabled in the kernel configuration (which is the case
>>> for chromeOS), causing related tests to fail.  Skip such tests when an
>>> overlayfs mount operation failed because the running kernel doesn't
>>> support this file system.
>>>
>>> Signed-off-by: Jeff Xu <jeffxu at chromium.org>
>>> Reviewed-by: Guenter Roeck <groeck at chromium.org>
>>> ---
>>>    tools/testing/selftests/landlock/fs_test.c | 54 ++++++++++++++++++++--
>>>    1 file changed, 51 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/tools/testing/selftests/landlock/fs_test.c b/tools/testing/selftests/landlock/fs_test.c
>>> index 21a2ce8fa739..645304d9fe98 100644
>>> --- a/tools/testing/selftests/landlock/fs_test.c
>>> +++ b/tools/testing/selftests/landlock/fs_test.c
>>> @@ -11,6 +11,7 @@
>>>    #include <fcntl.h>
>>>    #include <linux/landlock.h>
>>>    #include <sched.h>
>>> +#include <stdio.h>
>>>    #include <string.h>
>>>    #include <sys/capability.h>
>>>    #include <sys/mount.h>
>>> @@ -169,6 +170,42 @@ static int remove_path(const char *const path)
>>>        return err;
>>>    }
>>>
>>> +static bool fgrep(FILE *file, const char *str)
>>> +{
>>> +     char line[32];
>>> +     int str_len = strlen(str);
>>> +
>>> +     while (!feof(file)) {
>>> +             if (!fgets(line, sizeof(line), file))
>>> +                     break;
>>> +             if (strncmp(line, str, str_len))
>>> +                     continue;
>>> +
>>> +             return true;
>>> +     }
>>> +
>>> +     return false;
>>> +}
>>> +
>>> +static bool supports_overlayfs(void)
>>> +{
>>> +     bool ret;
>>> +     FILE *file = fopen("/proc/filesystems", "r");
>>> +
>>> +     /*
>>> +      * A failed attempt to open /proc/filesystems
>>> +      * implies that the file system is supported (default
>>> +      * behavior). This can help detect such unattended issue
>>> +      * (which should not happen)."
>>> +      */
>>> +     if (!file)
>>> +             return true;
>>> +
>>> +     ret = fgrep(file, "nodev\toverlay\n");
>>> +     fclose(file);
>>> +     return ret;
>>> +}
>>> +
>>>    static void prepare_layout(struct __test_metadata *const _metadata)
>>>    {
>>>        disable_caps(_metadata);
>>> @@ -3404,6 +3441,8 @@ FIXTURE(layout2_overlay) {};
>>>
>>>    FIXTURE_SETUP(layout2_overlay)
>>>    {
>>> +     int ret, err;
>>> +
>>>        prepare_layout(_metadata);
>>>
>>>        create_directory(_metadata, LOWER_BASE);
>>> @@ -3431,11 +3470,20 @@ FIXTURE_SETUP(layout2_overlay)
>>>        create_directory(_metadata, MERGE_DATA);
>>>        set_cap(_metadata, CAP_SYS_ADMIN);
>>>        set_cap(_metadata, CAP_DAC_OVERRIDE);
>>> -     ASSERT_EQ(0, mount("overlay", MERGE_DATA, "overlay", 0,
>>> -                        "lowerdir=" LOWER_DATA ",upperdir=" UPPER_DATA
>>> -                        ",workdir=" UPPER_WORK));
>>> +
>>> +     ret = mount("overlay", MERGE_DATA, "overlay", 0,
>>> +                "lowerdir=" LOWER_DATA ",upperdir=" UPPER_DATA
>>> +                ",workdir=" UPPER_WORK);
>>> +     err = errno;
>>>        clear_cap(_metadata, CAP_DAC_OVERRIDE);
>>>        clear_cap(_metadata, CAP_SYS_ADMIN);
>>> +
>>> +     if (ret == -1) {
>>> +             ASSERT_EQ(ENODEV, err);
>>> +             ASSERT_FALSE(supports_overlayfs());
>>> +             SKIP(return, "overlayfs is not supported");
>>> +     }
>>> +     ASSERT_EQ(0, ret);
>>>    }
>>>
>>>    FIXTURE_TEARDOWN(layout2_overlay)
>>>
>>> base-commit: 50cd95ac46548429e5bba7ca75cc97d11a697947



More information about the Linux-security-module-archive mailing list