From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA1BFC3600C for ; Thu, 3 Apr 2025 16:17:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F0CA2280003; Thu, 3 Apr 2025 12:17:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EBC3B280001; Thu, 3 Apr 2025 12:17:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D8400280003; Thu, 3 Apr 2025 12:17:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id B9E7F280001 for ; Thu, 3 Apr 2025 12:17:22 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 6AE871CB6A9 for ; Thu, 3 Apr 2025 16:17:23 +0000 (UTC) X-FDA: 83293237566.30.D59C3A8 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by imf24.hostedemail.com (Postfix) with ESMTP id 7CA5718000E for ; Thu, 3 Apr 2025 16:17:21 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="BYx6RlG/"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.210.170 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743697041; a=rsa-sha256; cv=none; b=vrAWvIHdaiJaSF1ilrkHng5rE9w7RpqESaAyMGx2bym//ORizkGBZdLeWN0mQJRbLPwEQP mIRBH3Ef63X81bSulRqQp6Mca3bxE5W9Vxdashgc1AG5y9+/FU7ooksf2JseB0Cl8LqKJZ jWEQAo5e0dVINN2BEVCDsGyzg9QBe9c= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="BYx6RlG/"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.210.170 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743697041; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=lrlDtqZMiFT4AIYDXfp4xswJ1nrQcwl2WHvmHsEcdj8=; b=oK4UWHM7vEoBJk/wj1dkGcxc2QxUxIjlAMPzGGUGQdlwciSldBsZYt+eB//hg9+YNTuBAJ LRYOhmGEzBEaLUCJjfdUlb+Q+QcwW3JtnidUsbIhl8kxPG8fSfsyyd2z8eyOi63G0C3gK+ 4TBYVnGq/vrFmsZ2fO9m6Yzmi4Znbno= Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-7376dd56eccso1247781b3a.0 for ; Thu, 03 Apr 2025 09:17:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743697040; x=1744301840; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=lrlDtqZMiFT4AIYDXfp4xswJ1nrQcwl2WHvmHsEcdj8=; b=BYx6RlG/jseKXy6H1lKG3WaGH4fmHYsPavUDdTSty1NRiIWWthJ2nR3slaPUhrjAUT QmJIkFQ6FMNGK4rbNbzmB+/PNWaK/rdDXS9FmE8fEjU06+TkvxH02e5DG0KH4pFc9fJa auTDvs9i/84LnTxZiuIwCkEWjLcYC02+AnP+9eobFCS/ZOnMvTUFNOijT1FFU7yqvC9I NaQzXR0Hx4Y/t2PIOGZkpJ8kNSYR2261mv3GSATJmgwF5fuHkGHA6W8PkQKqE7T9wBpa cEfFEpXNU+C+MM0+QPzUrBcIoB/9T3fYu0L7dD6u47q1K8C5Cs21cioq0LA7HJ0i6TbO t0sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743697040; x=1744301840; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lrlDtqZMiFT4AIYDXfp4xswJ1nrQcwl2WHvmHsEcdj8=; b=gYx39I0sPNNJfcGw9PCwMY8wjqdFTvQgUaOM9/nxFArM/VfSLJG4ZQcLVYEVuDeDie tu09PG+onbKFO1/iF8g7kG25HAj303cxeI7vWkihs/dSs1IebVvsAbRoJYc/SGzt8PbE VwVzjX3y8+iQ6rao9mdpFuLByB/QwNEuoeDh+JyXI5/jKXYzRJo2qBROYUVoIRHNW3Wk nLYITLljoyLSEeiROVopZG7HkwpnrW7IwQ/RbsyIoTSgAP9ugJRqZnB8ZiGzS6qY1t1x wU/hvSOfd+I+HvwyZUQoar87sJjKKnaclcw0ibS2H8bd3Z8gHNvR97YpXy3EY2GK6FAb IuLQ== X-Forwarded-Encrypted: i=1; AJvYcCUn1PKlG/WHmPhlQSTt77ZRuQdzlDrSF6qFb/Y6oW7ymOT95fgtlMgTwPYLoe457kdfzEKp0RNtDA==@kvack.org X-Gm-Message-State: AOJu0YxrNH4f+g7EWgAiD7zvsjviHTZpQY9BoQLqFPqdRByb3e/fP8JP ftNruFcPyPko+vemfyJS6OQmXOn7Pf/+aGAoLk4eTSeeLmcF16ELOBaCrPTwAqLssJ9kEFJXOHM be822gN11IpD3QqMrEBpRMwvuio4= X-Gm-Gg: ASbGncuQo4WoVs85lWFFpPIdHuoxfRmzE+tkWPx5XajWucNdIC7VpZGSHrJG/A/2H5/ ++KBMq5ILeaR5/DtDsurjAdYHu5sBR4lk4PJK0SIBg5G844q2V8bUNzoq5EF+atb8kRWDdHFvR1 U9vpSS4Hr8tgVGqd4RLoAxeJgDQ5lmII7czy6z/7bRWA== X-Google-Smtp-Source: AGHT+IEBSskNXsIbuqDvn/U9LSu6LemK4P3tlqREkuD8KUd3EhC5S8wl7sbDcR2Rt95XQ/sMlfmu/6VNCXsvhSJaXm8= X-Received: by 2002:a05:6a00:3a1e:b0:730:95a6:3761 with SMTP id d2e1a72fcca58-739e48f9521mr216458b3a.3.1743697040257; Thu, 03 Apr 2025 09:17:20 -0700 (PDT) MIME-Version: 1.0 References: <20250331121820.455916-1-bhupesh@igalia.com> <20250331121820.455916-2-bhupesh@igalia.com> In-Reply-To: <20250331121820.455916-2-bhupesh@igalia.com> From: Andrii Nakryiko Date: Thu, 3 Apr 2025 09:17:07 -0700 X-Gm-Features: AQ5f1JoPHx0PeSv2IqtIqL5NZPMMksgJM8eq0HuoqlbPglyYkI1vhpYvqJ-LgI4 Message-ID: Subject: Re: [PATCH v2 1/3] exec: Dynamically allocate memory to store task's full name To: Bhupesh Cc: akpm@linux-foundation.org, kernel-dev@igalia.com, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, oliver.sang@intel.com, lkp@intel.com, laoar.shao@gmail.com, pmladek@suse.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, arnaldo.melo@gmail.com, alexei.starovoitov@gmail.com, mirq-linux@rere.qmqm.pl, peterz@infradead.org, willy@infradead.org, david@redhat.com, viro@zeniv.linux.org.uk, keescook@chromium.org, ebiederm@xmission.com, brauner@kernel.org, jack@suse.cz, mingo@redhat.com, juri.lelli@redhat.com, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 7CA5718000E X-Stat-Signature: hk6e3u3moipnb3z5nxz1esrst9hsr4az X-HE-Tag: 1743697041-184404 X-HE-Meta: U2FsdGVkX1+Pvs9UgcnRuLSD4V1s2uNSG+xoh59ghcY/b70I1B37Fu2xbbBnOys4JlKwvakuz/umjXZvq8SY04hBPrdZB9y+KYdL4pqtV+s1W6ON4i4d9EnKYGWuhGbgZs8zgX2x8PVHsq5H3GbeVQyH29sTR6c2lucHU0L2PZby1hN4NKXzQkZII7kwxGjxgA/GEjEJA7g7xwkLjD/SOX+mK/+eOCMkkJWbUb5o7gnsn3tgI/jBfm5lv6Tv2S20Ieot6rxqNmL621QCt+FSfsjgYefVK1Nlf7g7nhfOVmVfH6hJjtw+6XaMJqJ4FuF+Z26RaL/NrSln5Q0wQY3ia7s1URS8fMMhMAiQhZnjh7nIUS2pR/VtlychIHg6lLhjrIDL3v02MBP1B+d3dgt2IaGHc30NKoWjxRt5RUiuVVREi/eyRF73Ancly/8yJ+Fh/WymfyYP55h5eYzhRHBcK/cyqka0VxZazaAZkoXFhAU9Bh58/rXN1VREt1efCho4zNUP34iZMPG3kr2zfiWSiuY7E1Ad+Wi8MDxka7hsA++a5vyaXzKfX/6bfDGA1JpSuq+lYh9bGM/QcJ8tqTfWnJJJ2UYDV8DAAh0F21Uvbx3Z/1zNpOg55AUJKHP7r9HwsM10AnA9el4yDBgAdKcX5ZANuV+CciahZwdpjK598NOQn4I799lIlihd5vTz6x1cRXeGRIK5hJZ+MYIT8o2O4GvyCXnTwdO4O0ZA+m5RWxxW84sQaDAUnlrXZeqPM7FLxBjYKI5Uiy1qbSz+IMU8Z3Ha4nU+wL/UcqWwpoQQPx+jFkvLizeBkV6uPTn3weTetjVoYxSLZVOpfmdcmgpLiFy+OhBfFOi1B/CxQ3TwYkGfPeSzDTWs5Ni1/PHYnfkm5CXPLLAFqc0X4HlnOxb4Gs4yUFHQZsugYqyFE8bbUa6Lu4NcfchEEX1G/36931/jia6uyPIujCpdrnYCQgd Mst4Wj2w sDLTcHlYBlNmF1SRIIenXbZSmpUDlnGhdXo3B+utBA+RL2xVsbQRLJEq+CQILC8ZsXHSYpunN/4QPpt8HXErcEp7PAmiLCkT41/ZoI2vLLg5DtJy2fg96+eibqEzD9lHR+mU0DMuJgNFae/cVSQqeX/vCJ7IgVB4fMPc3L2i3YD8qnwYXKgkxniqRSbp6icntIVci0fyqzROb0NHCfLIyIrATSIs2qFSrnl1tblBKk/8xPdfewowWdPtOG//Bx8Z9aVY6TBww9xI8XfpMOzIFwCk2Qla8wEYghot3PwS495YS1fw5BSYPM6QxeBYpXdD78wkM2O07aLf9tYunWakyB/0YdjgpvTzmjIbUaQ7UhvvsKW4KxZJLhnp5MRV3XltFoSDWaRak4OFi3ACqZwy0cIRuJnC134o4bZLat6nsZPArIZeaRud+u6knPmqFiE+l/boFl2muNXDo42vBsBPfkX9wcbbeOsfHIN09aQ2TI13yeDA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, Mar 31, 2025 at 5:18=E2=80=AFAM Bhupesh wrote: > > Provide a parallel implementation for get_task_comm() called > get_task_full_name() which allows the dynamically allocated > and filled-in task's full name to be passed to interested > users such as 'gdb'. > > Currently while running 'gdb', the 'task->comm' value of a long > task name is truncated due to the limitation of TASK_COMM_LEN. > > For example using gdb to debug a simple app currently which generate > threads with long task names: > # gdb ./threadnames -ex "run info thread" -ex "detach" -ex "quit" > log > # cat log > > NameThatIsTooLo > > This patch does not touch 'TASK_COMM_LEN' at all, i.e. > 'TASK_COMM_LEN' and the 16-byte design remains untouched. Which means > that all the legacy / existing ABI, continue to work as before using > '/proc/$pid/task/$tid/comm'. > > This patch only adds a parallel, dynamically-allocated > 'task->full_name' which can be used by interested users > via '/proc/$pid/task/$tid/full_name'. > > After this change, gdb is able to show full name of the task: > # gdb ./threadnames -ex "run info thread" -ex "detach" -ex "quit" > log > # cat log > > NameThatIsTooLongForComm[4662] > > Signed-off-by: Bhupesh > --- > fs/exec.c | 21 ++++++++++++++++++--- > include/linux/sched.h | 9 +++++++++ > 2 files changed, 27 insertions(+), 3 deletions(-) > > diff --git a/fs/exec.c b/fs/exec.c > index f45859ad13ac..4219d77a519c 100644 > --- a/fs/exec.c > +++ b/fs/exec.c > @@ -1208,6 +1208,9 @@ int begin_new_exec(struct linux_binprm * bprm) > { > struct task_struct *me =3D current; > int retval; > + va_list args; > + char *name; > + const char *fmt; > > /* Once we are committed compute the creds */ > retval =3D bprm_creds_from_file(bprm); > @@ -1348,11 +1351,22 @@ int begin_new_exec(struct linux_binprm * bprm) > * detecting a concurrent rename and just want a terminat= ed name. > */ > rcu_read_lock(); > - __set_task_comm(me, smp_load_acquire(&bprm->file->f_path.= dentry->d_name.name), > - true); > + fmt =3D smp_load_acquire(&bprm->file->f_path.dentry->d_na= me.name); > + name =3D kvasprintf(GFP_KERNEL, fmt, args); this `args` argument, it's not initialized anywhere, right? It's not clear where it's coming from, but you are passing it directly into kvasprintf(), I can't convince myself that this is correct. Can you please explain what is happening here? Also, instead of allocating a buffer unconditionally, maybe check that comm is longer than 16, and if not, just use the old-schoold 16-byte comm array? > + if (!name) > + return -ENOMEM; > + > + me->full_name =3D name; > + __set_task_comm(me, fmt, true); > rcu_read_unlock(); > } else { > - __set_task_comm(me, kbasename(bprm->filename), true); > + fmt =3D kbasename(bprm->filename); > + name =3D kvasprintf(GFP_KERNEL, fmt, args); > + if (!name) > + return -ENOMEM; > + > + me->full_name =3D name; > + __set_task_comm(me, fmt, true); > } > > /* An exec changes our domain. We are no longer part of the threa= d > @@ -1399,6 +1413,7 @@ int begin_new_exec(struct linux_binprm * bprm) > return 0; > > out_unlock: > + kfree(me->full_name); > up_write(&me->signal->exec_update_lock); > if (!bprm->cred) > mutex_unlock(&me->signal->cred_guard_mutex); > diff --git a/include/linux/sched.h b/include/linux/sched.h > index 56ddeb37b5cd..053b52606652 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -1166,6 +1166,9 @@ struct task_struct { > */ > char comm[TASK_COMM_LEN]; > > + /* To store the full name if task comm is truncated. */ > + char *full_name; > + > struct nameidata *nameidata; > > #ifdef CONFIG_SYSVIPC > @@ -2007,6 +2010,12 @@ extern void __set_task_comm(struct task_struct *ts= k, const char *from, bool exec > buf; \ > }) > > +#define get_task_full_name(buf, buf_size, tsk) ({ \ > + BUILD_BUG_ON(sizeof(buf) < TASK_COMM_LEN); \ > + strscpy_pad(buf, (tsk)->full_name, buf_size); \ > + buf; \ > +}) > + > #ifdef CONFIG_SMP > static __always_inline void scheduler_ipi(void) > { > -- > 2.38.1 >