diff --git a/pkg/sentry/fsimpl/proc/tasks_sys.go b/pkg/sentry/fsimpl/proc/tasks_sys.go index 91f500f28f..b365254792 100644 --- a/pkg/sentry/fsimpl/proc/tasks_sys.go +++ b/pkg/sentry/fsimpl/proc/tasks_sys.go @@ -158,6 +158,12 @@ func (fs *filesystem) newSysNetDir(ctx context.Context, root *auth.Credentials, "wmem_default": fs.newInode(ctx, root, 0444, newStaticFile("212992")), "wmem_max": fs.newInode(ctx, root, 0444, newStaticFile("212992")), }), + "ipv6": fs.newStaticDir(ctx, root, map[string]kernfs.Inode{ + "bindv6only": fs.newInode(ctx, root, 0444, newStaticFile("0")), + "ip6frag_time": fs.newInode(ctx, root, 0444, newStaticFile("60")), + "ip_nonlocal_bind": fs.newInode(ctx, root, 0444, newStaticFile("0")), + "auto_flowlabels": fs.newInode(ctx, root, 0444, newStaticFile("1")), + }), } } diff --git a/test/syscalls/linux/proc_net.cc b/test/syscalls/linux/proc_net.cc index 0989c9e0a3..ba625dcd7c 100644 --- a/test/syscalls/linux/proc_net.cc +++ b/test/syscalls/linux/proc_net.cc @@ -41,6 +41,7 @@ namespace { constexpr const char kProcNet[] = "/proc/net"; constexpr const char kIpForward[] = "/proc/sys/net/ipv4/ip_forward"; constexpr const char kRangeFile[] = "/proc/sys/net/ipv4/ip_local_port_range"; +constexpr const char kProcSysNetIpv6[] = "/proc/sys/net/ipv6"; TEST(ProcNetSymlinkTarget, FileMode) { struct stat s; @@ -73,6 +74,26 @@ TEST(ProcNetIfInet6, Format) { "^([a-f0-9]{32}( [a-f0-9]{2}){4} +[a-z][a-z0-9]*\n)+$")); } +TEST(ProcSysNetIpv6, DirectoryExists) { + struct stat s; + ASSERT_THAT(stat(kProcSysNetIpv6, &s), SyscallSucceeds()); + EXPECT_EQ(s.st_mode & S_IFMT, S_IFDIR); + EXPECT_EQ(s.st_mode & 0777, 0555); +} + +TEST(ProcSysNetIpv6, FilesExist) { + const char* files[] = { + "/proc/sys/net/ipv6/auto_flowlabels", + "/proc/sys/net/ipv6/bindv6only", + "/proc/sys/net/ipv6/ip6frag_time", + "/proc/sys/net/ipv6/ip_nonlocal_bind", + }; + + for (const char* file : files) { + EXPECT_THAT(open(file, O_RDONLY), SyscallSucceeds()) << file; + } +} + TEST(ProcSysNetIpv4Sack, Exists) { EXPECT_THAT(open("/proc/sys/net/ipv4/tcp_sack", O_RDONLY), SyscallSucceeds()); }