From: Yiyang Chen <cyyzero16@gmail.com>
To: akpm@linux-foundation.org
Cc: bsingharora@gmail.com, cyyzero16@gmail.com, fan.yu9@zte.com.cn,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
thomas.orgis@uni-hamburg.de, wang.yaxin@zte.com.cn
Subject: Re: [PATCH 1/2] taskstats: set version in TGID exit notifications
Date: Wed, 1 Apr 2026 00:20:40 +0800 [thread overview]
Message-ID: <20260331162040.52631-1-cyyzero16@gmail.com> (raw)
In-Reply-To: <20260330142909.3a5fe0ce22798a8cc34a8abe@linux-foundation.org>
On Tue, Mar 31, 2026 at 5:29 AM Andrew Morton <akpm@linux-foundation.org> wrote:
>
> On Mon, 30 Mar 2026 03:00:40 +0800 Yiyang Chen <cyyzero16@gmail.com> wrote:
>
> > delay accounting started populating taskstats records with a valid
> > version field via fill_pid() and fill_tgid().
> >
> > Later, commit ad4ecbcba728 ("[PATCH] delay accounting taskstats
> > interface send tgid once") changed the TGID exit path to send the
> > cached signal->stats aggregate directly instead of building the outgoing
> > record through fill_tgid(). Unlike fill_tgid(), fill_tgid_exit() only
> > accumulates accounting data and never initializes stats->version.
> >
> > As a result, TGID exit notifications can reach userspace with
> > version == 0 even though PID exit notifications and
> > TASKSTATS_CMD_GET replies carry a valid taskstats version.
> >
> > Set stats->version = TASKSTATS_VERSION after copying the cached TGID
> > aggregate into the outgoing netlink payload so all taskstats records are
> > self-describing again.
> >
> > Fixes: ad4ecbcba728 ("[PATCH] delay accounting taskstats interface send tgid once")
>
> Thanks, lol, 20 years ago.
>
> Can you explain how others can trigger this? Some combination of
> steps which results in the bad output?
Yes. This is easy to reproduce with `tools/accounting/getdelays.c`.
I have a small follow-up patch for that tool which:
1. increases the receive buffer/message size so the pid+tgid combined exit
notification is not dropped/truncated
2. prints `stats->version`.
With that patch, the reproducer is:
Terminal 1:
./getdelays -d -v -l -m 0
Terminal 2:
taskset -c 0 python3 -c 'import threading,time; t=threading.Thread(target=time.sleep,args=(0.1,)); t.start(); t.join()'
That produces both PID and TGID exit notifications for the same process. The PID
exit record reports a valid taskstats version, while the TGID exit record reports
`version 0`.
>
> > Cc: stable@vger.kernel.org
>
> Is there a chance of breaking existing userspace here? Some existing
> userspace code which is expecting 0 here and will get surprised by this
> change?
In practice, userspace uses `taskstats.version` to decide which fields are
present in `struct taskstats`, i.e. as a schema/version discriminator. A zero
version does not describe a valid taskstats layout, so it is hard to see how
userspace could use `0` as a meaningful or useful distinction here.
So I do not think fixing this in mainline should break sensible userspace. It
just restores consistency of the taskstats version semantics across
`TASKSTATS_CMD_GET`, PID exit notifications, and TGID exit notifications.
To be honest, I'm also not sure if this should backport to stable. But I think
mainline should still fix it.
Thanks,
Yiyang
next prev parent reply other threads:[~2026-03-31 16:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-29 19:00 [PATCH 0/2] taskstats: fix TGID exit version and tool message truncation Yiyang Chen
2026-03-29 19:00 ` [PATCH 1/2] taskstats: set version in TGID exit notifications Yiyang Chen
2026-03-30 21:29 ` Andrew Morton
2026-03-31 16:20 ` Yiyang Chen [this message]
2026-03-29 19:00 ` [PATCH 2/2] tools/accounting: handle truncated taskstats netlink messages Yiyang Chen
[not found] <cover.1774806788.git.cyyzero16@gmail.com>
2026-03-29 18:45 ` [PATCH 1/2] taskstats: set version in TGID exit notifications Yiyang Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260331162040.52631-1-cyyzero16@gmail.com \
--to=cyyzero16@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bsingharora@gmail.com \
--cc=fan.yu9@zte.com.cn \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=thomas.orgis@uni-hamburg.de \
--cc=wang.yaxin@zte.com.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.