From 39e2e5b968fef9ddb786ae74a1ca4a2b105f416e Mon Sep 17 00:00:00 2001 From: Tan Yifeng Date: Thu, 25 Aug 2022 10:35:27 +0800 Subject: [PATCH] support set or get tcpsockopt TCP_MAXSEG, TCP_CONGESTION for hostnetwork. Signed-off-by: Tan Yifeng --- pkg/sentry/socket/hostinet/socket.go | 8 ++++++-- runsc/boot/filter/config.go | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pkg/sentry/socket/hostinet/socket.go b/pkg/sentry/socket/hostinet/socket.go index b921a1d91..4357bdee2 100644 --- a/pkg/sentry/socket/hostinet/socket.go +++ b/pkg/sentry/socket/hostinet/socket.go @@ -406,10 +406,12 @@ func (s *socketOpsCommon) GetSockOpt(t *kernel.Task, level int, name int, optVal } case linux.SOL_TCP: switch name { - case linux.TCP_NODELAY: + case linux.TCP_NODELAY, linux.TCP_MAXSEG: optlen = sizeofInt32 case linux.TCP_INFO: optlen = linux.SizeOfTCPInfo + case linux.TCP_CONGESTION: + optlen = outLen } } @@ -461,8 +463,10 @@ func (s *socketOpsCommon) SetSockOpt(t *kernel.Task, level int, name int, opt [] } case linux.SOL_TCP: switch name { - case linux.TCP_NODELAY, linux.TCP_INQ: + case linux.TCP_NODELAY, linux.TCP_INQ, linux.TCP_MAXSEG: optlen = sizeofInt32 + case linux.TCP_CONGESTION: + optlen = len(opt) } } diff --git a/runsc/boot/filter/config.go b/runsc/boot/filter/config.go index 471833812..fe09a4bc1 100644 --- a/runsc/boot/filter/config.go +++ b/runsc/boot/filter/config.go @@ -504,6 +504,16 @@ func hostInetFilters() seccomp.SyscallRules { seccomp.EqualTo(unix.SOL_TCP), seccomp.EqualTo(linux.TCP_INQ), }, + { + seccomp.MatchAny{}, + seccomp.EqualTo(unix.SOL_TCP), + seccomp.EqualTo(linux.TCP_MAXSEG), + }, + { + seccomp.MatchAny{}, + seccomp.EqualTo(unix.SOL_TCP), + seccomp.EqualTo(linux.TCP_CONGESTION), + }, }, unix.SYS_IOCTL: []seccomp.Rule{ { @@ -572,6 +582,18 @@ func hostInetFilters() seccomp.SyscallRules { seccomp.MatchAny{}, seccomp.EqualTo(4), }, + { + seccomp.MatchAny{}, + seccomp.EqualTo(unix.SOL_TCP), + seccomp.EqualTo(linux.TCP_MAXSEG), + seccomp.MatchAny{}, + seccomp.EqualTo(4), + }, + { + seccomp.MatchAny{}, + seccomp.EqualTo(unix.SOL_TCP), + seccomp.EqualTo(linux.TCP_CONGESTION), + }, { seccomp.MatchAny{}, seccomp.EqualTo(unix.SOL_IP),