Skip to content

Commit

Permalink
selftests/landlock: Skip overlayfs tests when not supported
Browse files Browse the repository at this point in the history
overlayfs may be disabled in the kernel configuration, causing related
tests to fail.  Check that overlayfs is supported at runtime, so we can
skip layout2_overlay.* accordingly.

Signed-off-by: Jeff Xu <jeffxu@google.com>
Reviewed-by: Guenter Roeck <groeck@chromium.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230113053229.1281774-2-jeffxu@google.com
[mic: Reword comments and constify variables]
Signed-off-by: Mickaël Salaün <mic@digikod.net>
  • Loading branch information
Jeff Xu authored and Mickaël Salaün committed Jan 13, 2023
1 parent 3e52e5b commit 366617a
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions tools/testing/selftests/landlock/fs_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -89,6 +90,40 @@ static const char dir_s3d3[] = TMP_DIR "/s3d1/s3d2/s3d3";
* └── s3d3
*/

static bool fgrep(FILE *const inf, const char *const str)
{
char line[32];
const int slen = strlen(str);

while (!feof(inf)) {
if (!fgets(line, sizeof(line), inf))
break;
if (strncmp(line, str, slen))
continue;

return true;
}

return false;
}

static bool supports_overlayfs(void)
{
bool res;
FILE *const inf = fopen("/proc/filesystems", "r");

/*
* Consider that the filesystem is supported if we cannot get the
* supported ones.
*/
if (!inf)
return true;

res = fgrep(inf, "nodev\toverlay\n");
fclose(inf);
return res;
}

static void mkdir_parents(struct __test_metadata *const _metadata,
const char *const path)
{
Expand Down Expand Up @@ -4001,6 +4036,9 @@ FIXTURE(layout2_overlay) {};

FIXTURE_SETUP(layout2_overlay)
{
if (!supports_overlayfs())
SKIP(return, "overlayfs is not supported");

prepare_layout(_metadata);

create_directory(_metadata, LOWER_BASE);
Expand Down Expand Up @@ -4037,6 +4075,9 @@ FIXTURE_SETUP(layout2_overlay)

FIXTURE_TEARDOWN(layout2_overlay)
{
if (!supports_overlayfs())
SKIP(return, "overlayfs is not supported");

EXPECT_EQ(0, remove_path(lower_do1_fl3));
EXPECT_EQ(0, remove_path(lower_dl1_fl2));
EXPECT_EQ(0, remove_path(lower_fl1));
Expand Down Expand Up @@ -4068,6 +4109,9 @@ FIXTURE_TEARDOWN(layout2_overlay)

TEST_F_FORK(layout2_overlay, no_restriction)
{
if (!supports_overlayfs())
SKIP(return, "overlayfs is not supported");

ASSERT_EQ(0, test_open(lower_fl1, O_RDONLY));
ASSERT_EQ(0, test_open(lower_dl1, O_RDONLY));
ASSERT_EQ(0, test_open(lower_dl1_fl2, O_RDONLY));
Expand Down Expand Up @@ -4231,6 +4275,9 @@ TEST_F_FORK(layout2_overlay, same_content_different_file)
size_t i;
const char *path_entry;

if (!supports_overlayfs())
SKIP(return, "overlayfs is not supported");

/* Sets rules on base directories (i.e. outside overlay scope). */
ruleset_fd = create_ruleset(_metadata, ACCESS_RW, layer1_base);
ASSERT_LE(0, ruleset_fd);
Expand Down

0 comments on commit 366617a

Please sign in to comment.