mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Disable xattr tests.
These can remain disabled until we actually support extended attributes. The following modifications were also made: 1. Disable save/restore on tests that change file permissions. Restore will not work properly for these tests, since it will try to open the file with read-write after it has been read- or write-only. 2. Change user.abc to user.test. PiperOrigin-RevId: 290123941
This commit is contained in:
@@ -717,11 +717,6 @@ syscall_test(test = "//test/syscalls/linux:proc_net_tcp_test")
|
||||
|
||||
syscall_test(test = "//test/syscalls/linux:proc_net_udp_test")
|
||||
|
||||
syscall_test(
|
||||
add_overlay = True,
|
||||
test = "//test/syscalls/linux:xattr_test",
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "syscall_test_runner",
|
||||
testonly = 1,
|
||||
|
||||
+42
-110
@@ -59,7 +59,8 @@ TEST_F(XattrTest, XattrLargeName) {
|
||||
std::string name = "user.";
|
||||
name += std::string(XATTR_NAME_MAX - name.length(), 'a');
|
||||
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
// An xattr should be whitelisted before it can be accessed--do not allow
|
||||
// arbitrary xattrs to be read/written in gVisor.
|
||||
if (!IsRunningOnGvisor()) {
|
||||
EXPECT_THAT(setxattr(path, name.c_str(), nullptr, 0, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
@@ -83,59 +84,53 @@ TEST_F(XattrTest, XattrInvalidPrefix) {
|
||||
SyscallFailsWithErrno(EOPNOTSUPP));
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, XattrReadOnly) {
|
||||
// Do not allow save/restore cycles after making the test file read-only, as
|
||||
// the restore will fail to open it with r/w permissions.
|
||||
TEST_F(XattrTest, XattrReadOnly_NoRandomSave) {
|
||||
// Drop capabilities that allow us to override file and directory permissions.
|
||||
ASSERT_NO_ERRNO(SetCapability(CAP_DAC_OVERRIDE, false));
|
||||
ASSERT_NO_ERRNO(SetCapability(CAP_DAC_READ_SEARCH, false));
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
size_t size = sizeof(val);
|
||||
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
if (!IsRunningOnGvisor()) {
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
}
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0), SyscallSucceeds());
|
||||
|
||||
DisableSave ds;
|
||||
ASSERT_NO_ERRNO(testing::Chmod(test_file_name_, S_IRUSR));
|
||||
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0),
|
||||
SyscallFailsWithErrno(EACCES));
|
||||
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
if (!IsRunningOnGvisor()) {
|
||||
char buf = '-';
|
||||
EXPECT_THAT(getxattr(path, name, &buf, size),
|
||||
SyscallSucceedsWithValue(size));
|
||||
EXPECT_EQ(buf, val);
|
||||
}
|
||||
char buf = '-';
|
||||
EXPECT_THAT(getxattr(path, name, &buf, size), SyscallSucceedsWithValue(size));
|
||||
EXPECT_EQ(buf, val);
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, XattrWriteOnly) {
|
||||
// Do not allow save/restore cycles after making the test file write-only, as
|
||||
// the restore will fail to open it with r/w permissions.
|
||||
TEST_F(XattrTest, XattrWriteOnly_NoRandomSave) {
|
||||
// Drop capabilities that allow us to override file and directory permissions.
|
||||
ASSERT_NO_ERRNO(SetCapability(CAP_DAC_OVERRIDE, false));
|
||||
ASSERT_NO_ERRNO(SetCapability(CAP_DAC_READ_SEARCH, false));
|
||||
|
||||
DisableSave ds;
|
||||
ASSERT_NO_ERRNO(testing::Chmod(test_file_name_, S_IWUSR));
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
size_t size = sizeof(val);
|
||||
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
if (!IsRunningOnGvisor()) {
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
}
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0), SyscallSucceeds());
|
||||
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0), SyscallFailsWithErrno(EACCES));
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, XattrTrustedWithNonadmin) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
// TODO(b/127675828): Support setxattr and getxattr with "trusted" prefix.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
SKIP_IF(ASSERT_NO_ERRNO_AND_VALUE(HaveCapability(CAP_SYS_ADMIN)));
|
||||
|
||||
@@ -147,11 +142,8 @@ TEST_F(XattrTest, XattrTrustedWithNonadmin) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, XattrOnDirectory) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
TempPath dir = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(setxattr(dir.path().c_str(), name, NULL, 0, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
EXPECT_THAT(getxattr(dir.path().c_str(), name, NULL, 0),
|
||||
@@ -159,13 +151,10 @@ TEST_F(XattrTest, XattrOnDirectory) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, XattrOnSymlink) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
TempPath dir = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
|
||||
TempPath link = ASSERT_NO_ERRNO_AND_VALUE(
|
||||
TempPath::CreateSymlinkTo(dir.path(), test_file_name_));
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(setxattr(link.path().c_str(), name, NULL, 0, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
EXPECT_THAT(getxattr(link.path().c_str(), name, NULL, 0),
|
||||
@@ -173,7 +162,7 @@ TEST_F(XattrTest, XattrOnSymlink) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, XattrOnInvalidFileTypes) {
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
|
||||
char char_device[] = "/dev/zero";
|
||||
EXPECT_THAT(setxattr(char_device, name, NULL, 0, /*flags=*/0),
|
||||
@@ -191,11 +180,8 @@ TEST_F(XattrTest, XattrOnInvalidFileTypes) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrSizeSmallerThanValue) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
std::vector<char> val = {'a', 'a'};
|
||||
size_t size = 1;
|
||||
EXPECT_THAT(setxattr(path, name, val.data(), size, /*flags=*/0),
|
||||
@@ -209,11 +195,8 @@ TEST_F(XattrTest, SetxattrSizeSmallerThanValue) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrZeroSize) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
EXPECT_THAT(setxattr(path, name, &val, 0, /*flags=*/0), SyscallSucceeds());
|
||||
|
||||
@@ -225,7 +208,7 @@ TEST_F(XattrTest, SetxattrZeroSize) {
|
||||
|
||||
TEST_F(XattrTest, SetxattrSizeTooLarge) {
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
|
||||
// Note that each particular fs implementation may stipulate a lower size
|
||||
// limit, in which case we actually may fail (e.g. error with ENOSPC) for
|
||||
@@ -235,43 +218,29 @@ TEST_F(XattrTest, SetxattrSizeTooLarge) {
|
||||
EXPECT_THAT(setxattr(path, name, val.data(), size, /*flags=*/0),
|
||||
SyscallFailsWithErrno(E2BIG));
|
||||
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
if (!IsRunningOnGvisor()) {
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0),
|
||||
SyscallFailsWithErrno(ENODATA));
|
||||
}
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0), SyscallFailsWithErrno(ENODATA));
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrNullValueAndNonzeroSize) {
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(setxattr(path, name, nullptr, 1, /*flags=*/0),
|
||||
SyscallFailsWithErrno(EFAULT));
|
||||
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
if (!IsRunningOnGvisor()) {
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0),
|
||||
SyscallFailsWithErrno(ENODATA));
|
||||
}
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0), SyscallFailsWithErrno(ENODATA));
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrNullValueAndZeroSize) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(setxattr(path, name, nullptr, 0, /*flags=*/0), SyscallSucceeds());
|
||||
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0), SyscallSucceedsWithValue(0));
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrValueTooLargeButOKSize) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
std::vector<char> val(XATTR_SIZE_MAX + 1);
|
||||
std::fill(val.begin(), val.end(), 'a');
|
||||
size_t size = 1;
|
||||
@@ -286,11 +255,8 @@ TEST_F(XattrTest, SetxattrValueTooLargeButOKSize) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrReplaceWithSmaller) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
std::vector<char> val = {'a', 'a'};
|
||||
EXPECT_THAT(setxattr(path, name, val.data(), 2, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
@@ -304,11 +270,8 @@ TEST_F(XattrTest, SetxattrReplaceWithSmaller) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrReplaceWithLarger) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
std::vector<char> val = {'a', 'a'};
|
||||
EXPECT_THAT(setxattr(path, name, val.data(), 1, /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
@@ -321,11 +284,8 @@ TEST_F(XattrTest, SetxattrReplaceWithLarger) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrCreateFlag) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(setxattr(path, name, nullptr, 0, XATTR_CREATE),
|
||||
SyscallSucceeds());
|
||||
EXPECT_THAT(setxattr(path, name, nullptr, 0, XATTR_CREATE),
|
||||
@@ -335,11 +295,8 @@ TEST_F(XattrTest, SetxattrCreateFlag) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, SetxattrReplaceFlag) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(setxattr(path, name, nullptr, 0, XATTR_REPLACE),
|
||||
SyscallFailsWithErrno(ENODATA));
|
||||
EXPECT_THAT(setxattr(path, name, nullptr, 0, /*flags=*/0), SyscallSucceeds());
|
||||
@@ -357,11 +314,8 @@ TEST_F(XattrTest, SetxattrInvalidFlags) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, Getxattr) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
int val = 1234;
|
||||
size_t size = sizeof(val);
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0), SyscallSucceeds());
|
||||
@@ -372,11 +326,8 @@ TEST_F(XattrTest, Getxattr) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrSizeSmallerThanValue) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
std::vector<char> val = {'a', 'a'};
|
||||
size_t size = val.size();
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0), SyscallSucceeds());
|
||||
@@ -387,11 +338,8 @@ TEST_F(XattrTest, GetxattrSizeSmallerThanValue) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrSizeLargerThanValue) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
EXPECT_THAT(setxattr(path, name, &val, 1, /*flags=*/0), SyscallSucceeds());
|
||||
|
||||
@@ -405,11 +353,8 @@ TEST_F(XattrTest, GetxattrSizeLargerThanValue) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrZeroSize) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
EXPECT_THAT(setxattr(path, name, &val, sizeof(val), /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
@@ -421,11 +366,8 @@ TEST_F(XattrTest, GetxattrZeroSize) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrSizeTooLarge) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
EXPECT_THAT(setxattr(path, name, &val, sizeof(val), /*flags=*/0),
|
||||
SyscallSucceeds());
|
||||
@@ -440,11 +382,8 @@ TEST_F(XattrTest, GetxattrSizeTooLarge) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrNullValue) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
size_t size = sizeof(val);
|
||||
EXPECT_THAT(setxattr(path, name, &val, size, /*flags=*/0), SyscallSucceeds());
|
||||
@@ -454,11 +393,8 @@ TEST_F(XattrTest, GetxattrNullValue) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrNullValueAndZeroSize) {
|
||||
// TODO(b/127675828): Support setxattr and getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
char name[] = "user.abc";
|
||||
const char name[] = "user.test";
|
||||
char val = 'a';
|
||||
size_t size = sizeof(val);
|
||||
// Set value with zero size.
|
||||
@@ -473,13 +409,9 @@ TEST_F(XattrTest, GetxattrNullValueAndZeroSize) {
|
||||
}
|
||||
|
||||
TEST_F(XattrTest, GetxattrNonexistentName) {
|
||||
// TODO(b/127675828): Support getxattr.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
|
||||
const char* path = test_file_name_.c_str();
|
||||
std::string name = "user.nonexistent";
|
||||
EXPECT_THAT(getxattr(path, name.c_str(), nullptr, 0),
|
||||
SyscallFailsWithErrno(ENODATA));
|
||||
const char name[] = "user.test";
|
||||
EXPECT_THAT(getxattr(path, name, nullptr, 0), SyscallFailsWithErrno(ENODATA));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user