proc: limit a comm len to TASK_COMM_LEN

PiperOrigin-RevId: 580532321
This commit is contained in:
Andrei Vagin
2023-11-08 07:50:23 -08:00
committed by gVisor bot
parent 9115b8d57c
commit 65e518c741
2 changed files with 16 additions and 1 deletions
+5 -1
View File
@@ -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
}
+11
View File
@@ -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"}, {}));