From 65e518c7412dbad69891cdb5173a1c7bd03671ec Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Wed, 8 Nov 2023 07:48:03 -0800 Subject: [PATCH] proc: limit a comm len to TASK_COMM_LEN PiperOrigin-RevId: 580532321 --- pkg/sentry/fsimpl/proc/task_files.go | 6 +++++- test/syscalls/linux/proc.cc | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pkg/sentry/fsimpl/proc/task_files.go b/pkg/sentry/fsimpl/proc/task_files.go index c9047d4e0..c0d818b47 100644 --- a/pkg/sentry/fsimpl/proc/task_files.go +++ b/pkg/sentry/fsimpl/proc/task_files.go @@ -305,7 +305,11 @@ func (d *commData) Generate(ctx context.Context, buf *bytes.Buffer) error { // Write implements vfs.WritableDynamicBytesSource.Write. func (d *commData) Write(ctx context.Context, _ *vfs.FileDescription, src usermem.IOSequence, offset int64) (int64, error) { srclen := src.NumBytes() - name := make([]byte, srclen) + nameLen := int64(linux.TASK_COMM_LEN - 1) + if srclen < nameLen { + nameLen = srclen + } + name := make([]byte, nameLen) if _, err := src.CopyIn(ctx, name); err != nil { return 0, err } diff --git a/test/syscalls/linux/proc.cc b/test/syscalls/linux/proc.cc index 0d2408af9..a34d188f2 100644 --- a/test/syscalls/linux/proc.cc +++ b/test/syscalls/linux/proc.cc @@ -2554,6 +2554,17 @@ TEST(ProcTask, CommCannotSetAnotherProcessThreadName) { EXPECT_THAT(InForkedProcess(rest), IsPosixErrorOkAndHolds(0)); } +TEST(ProcTask, CommLenLimited) { + auto path = JoinPath("/proc", absl::StrCat(getpid()), "task", + absl::StrCat(syscall(SYS_gettid)), "comm"); + // comm is limited by 15 symbols (TASK_COMM_LEN). + constexpr char kThreadName[] = "0123456789abcde"; + ASSERT_NO_ERRNO(SetContents(path, absl::StrCat(kThreadName, "XYZ"))); + + auto got_thread_name = ASSERT_NO_ERRNO_AND_VALUE(GetContents(path)); + EXPECT_EQ(absl::StrCat(kThreadName, "\n"), got_thread_name); +} + TEST(ProcTaskNs, NsDirExistsAndHasCorrectMetadata) { EXPECT_NO_ERRNO(DirContains("/proc/self/ns", {"net", "pid", "user"}, {}));