From nobody Thu Apr 2 10:44:11 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C86821F5858 for ; Sun, 29 Mar 2026 19:00:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774810854; cv=none; b=nvXy4aioT0xFZI7bvQuPBPycGVJo27o3tdOFi+qTzPDto6bI/54cN4Wdl8AoA2G4VsJfOdlgy9g/TEJZYOhe046RoH+QeaFUvoGImjuEUATsRL+CDUH4SZoXFVOtRGCqjHsa5sDy+QYJsIdQbTkjiD+2WyUfxhU+e0rfAHqXHqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774810854; c=relaxed/simple; bh=XQCPzJhZ2kxsvNzsyz7iOaWsSty5HK6uks1lpyfPqJQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U6LFWTyXvHBFTHJS6BLqWFYtDc2MSyKWwCi+5YnnjOOlhbN9HTFbJJWaOrnvbJzIkbciX2LDji6TQjHRM3c4jScLVDgUeM3EzFIuUTeaU9KtxvxAdKdD1X7wwjAd49wfV9g74cKOggMu26H1tGv7uZXWrfGengIXhVGI3f+7e3w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=atOremrL; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="atOremrL" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-35d99bae2ebso841394a91.3 for ; Sun, 29 Mar 2026 12:00:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774810853; x=1775415653; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/gnh0uYoTrakzMqa8ayVORbXmnsfDVgazJoZT9TbWcI=; b=atOremrLMeK0mAjYLR3nrtprFY0wOrF+VQJI6VF9lBDEGbrVDJafD6GivNwlHCoSEg 0GdmnzKtbRfyOxSjB2T/ozjioynck3iA8oozN2LkMm1Q+VRDf4U2ZHcPXI1/oCdRm4Q0 +g1ZO8wlLfwnyGy0LH44e3Qw2cl5ooidCOcwinyQfkmujK1S7a2BvsMK9ljpLs11JhHS nInwGkByBEsL+S/KUkunZepxddUl/UHENfKUUS1xeEVTWH6SIecXXwZ0rs7PourA3t9S 6lUkjh19/lPwWMYdO+TgAhtT+B2mPySv7vpMkDpVEFPRB7Sm8kI18oAQXWkMgzL2hTGY gBog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774810853; x=1775415653; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/gnh0uYoTrakzMqa8ayVORbXmnsfDVgazJoZT9TbWcI=; b=kQFpnynn1HcJMlWB7LfyW7OjhqdAb7T50Ef6Av9tArs5R73bfGK7VtAY8TKJRE7D9Z ozuHLfF2/smyGXtr4ysZxodhrwjdwHIUF9cCqHUam2PTNeJ1fyhqPPjyl3DsjoLbtRbF iLt4D8urNJX6h2bIeVwr2qhGuaS9re+PyJc2XenmCGwri+o+rcUB/WtifaU3tDAm0RaC PEIQI9My6s4FuZbdsjs6v2BgfqVZK/43dGQNjI0dMjQgLAxddsfsZZZhKyDoE2ICKdth n4uMwCmYztvcyWEYZVKiKqXYCbgmTslXr8IybN9kRniLqcy2pokg2O+0nEG9FQlxmRUl l9FA== X-Gm-Message-State: AOJu0Ywps6oqaBAWc8nQ4n0fRusx53P57sSJa1pFX9yV5j4sIEOPyeRv e1Px6E9TAT5sNhkX4O59EGknBDGHfcdFWMK1evafpv1p1cTz/A+DA9O1 X-Gm-Gg: ATEYQzw7vLlZfekRhpOXSFygl6cNhMd0UvVKirm2cfScC2Ql+bnJneHIxxbUEb2UY56 67yNtYYk1psSXoFdt4J5MK71OuQamAeyWO1odai/SslwWBVCrMUOu7/6ZdmYW6SlLE/kvI3xXIX AF/ny5DLFvPKBuhGtOf7wH3t5c3bWK9ZglnMtd3+K7Glrz86MrEBOCTmEcjNjELwDBETjcXFG7f uLZNGLpH51QNyHya++WapZPk8a1awgO+9y07HHL3152dTrm5eHNNeXpzulp1Po0twHvkf7J6E2N bIvQqBNY8X2Z7AhQCfSX9n39FPtFDe9JMtUwA4nC9TM8MJyLzUt3OJQmsSHw7MaPyvCVCnIcC3i b8/zWUJ6Ch4/S2W5qv9TY/bPd8mic1GnxuUO1chPXkvEgW46ezAGFqTzlSvL+HgRdWFbmyP06y0 D8W7BFcGTLoR8/0dfZz1j9sc/7 X-Received: by 2002:a17:903:228e:b0:2b0:5453:1932 with SMTP id d9443c01a7336-2b0cdc263c6mr106483985ad.15.1774810853211; Sun, 29 Mar 2026 12:00:53 -0700 (PDT) Received: from ubuntu24.. ([240e:47e:3870:786a:45b9:eb23:e7cd:d2fa]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b242676e13sm57685335ad.28.2026.03.29.12.00.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Mar 2026 12:00:52 -0700 (PDT) From: Yiyang Chen To: Balbir Singh Cc: linux-kernel@vger.kernel.org, Andrew Morton , Wang Yaxin , Fan Yu , "Dr . Thomas Orgis" , Yiyang Chen , stable@vger.kernel.org Subject: [PATCH 1/2] taskstats: set version in TGID exit notifications Date: Mon, 30 Mar 2026 03:00:40 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 =3D=3D 0 even though PID exit notifications and TASKSTATS_CMD_GET replies carry a valid taskstats version. Set stats->version =3D 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 tgi= d once") Cc: stable@vger.kernel.org Signed-off-by: Yiyang Chen --- kernel/taskstats.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 0cd680ccc7e5..73bd6a6a7893 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c @@ -649,6 +649,7 @@ void taskstats_exit(struct task_struct *tsk, int group_= dead) goto err; =20 memcpy(stats, tsk->signal->stats, sizeof(*stats)); + stats->version =3D TASKSTATS_VERSION; =20 send: send_cpu_listeners(rep_skb, listeners); --=20 2.43.0 From nobody Thu Apr 2 10:44:11 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E35A26E706 for ; Sun, 29 Mar 2026 19:00:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774810859; cv=none; b=Z+GmvQnhei2KhArYLX6LdLKonXeteFifSoXfG4KpgOkCafH6Y0RzSlrd4Q+hqmvIJQfdm1sd2Sax5H/kFiF65Jo7ufzmX8eip3KIu6SH8GnsQ3f2QWKYPP2rtYDH4J3hHU/HSdmwrrnfd5M9nfkthhT5L3yatvkLMM7QseHajZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774810859; c=relaxed/simple; bh=EA4zvN16g/uyWcSiZV8R2ClOKSZJuEb3qH5ogvRTOIA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f2ItE+rZIPIjC66MU6UG3an9s1GoYFDK1ltzLbzhPpp5He4m06G3Po2Qqx8D6BLFjSe7xoslduyOANBu/EPtgB6KrVGqrk95qeeMl9OxTKjIWHnhUCiRJ77lu7cJ7QhuOHVke55gXgvLS4uDTZCVTBVLZVS15HUaJh2FLi2tAHc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XiqVA0oc; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XiqVA0oc" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2ad9516a653so16148605ad.0 for ; Sun, 29 Mar 2026 12:00:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774810857; x=1775415657; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rPKejqXdRK3ybny+0cqgusGRRcP5G4OdbFaGYT9oNBM=; b=XiqVA0ocZhAUYsBvNd8BF7tEtAA8Ib/DXNZboYIMzoaUpLro13+X3W392lQtX+1PDG 1akdFiMdp7Um3dyueAczFP5JHuM11DhVfmzPCIyaZ7d85YBy0siyFZznaDkCml93gkP2 IXuvWtOHPxL+vA/Emlr3qucYekCOizdZQhQYxWrkWMll9e4OVdK7o3Aw3zq9jMxCPt9g 21jtNrEDjPw/wTPFJYSukR5og8VHgmD5l1NQzT/E1sOygEed8WXFLC5hf7JM8sCtMZPd N6p7Zq9paDIE0vCc6KSONF3ej6L+JxbMelkhNLTWisFTABwU7uH3LnhIn/0xDrIwItBQ Frag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774810857; x=1775415657; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rPKejqXdRK3ybny+0cqgusGRRcP5G4OdbFaGYT9oNBM=; b=qMDhXqPwV9/y0GUoacfiBgWunSMPeUJxLOX28pZ9+b1kVsFq4StAi5JJQG86YMQXFy 0cMkenDU5Q1gutlN1ad9C/RN2rkQl1Bb0LXfR7t+NbSItuyl/D4vb44uDJuqobZawIPn 5pXj7x7c0WBjlqQQSSAsNDAi6R998jKIhSKp7zfwpQKCK4KxW+V//gNDahvnH3c0vmsY vKLGXuI3a1Ty/iX0RubyHqhuh2Ue38NefqpM6KR2/ME7AWJlm2OUmC27kcAEUEfDmMjN lqX8JbtnhGSxrw52/0ht/HvhuoWM+2hBz+gDP4fyJZNT4dNdADgf5LyccK+YrZkrbsCW uupA== X-Gm-Message-State: AOJu0YwJCrVVIWpHBgyITNMfs1Fep2Zn0X8jh6fOt5d4FFPIivmi3o1X 7oqn9apVomcCerSZYqWUBps/NaURp7lYf8ffX4WVl/htJzR+86JqW4xF X-Gm-Gg: ATEYQzwu3DPVZt94qhz8/7bPu7A0NgwM8cezsYUf9VAVmtc3L/QokdFvQgmjIuZufeJ G073jCPz1u5O6WQWDI9+JfQxRoz57UrePFYMadMKRd8ClF3PGn7etBVGeR6pOaXyvKhp0DNb7c3 qDa1FCiAiAJ4SgSQGFIV0nV8gnmg/F2pQ95P+QilCxNsRNuat+0/ffhqvA/zwHlN2CxUxMMVuOO BHeuICcbvjXVrYSuIeTDy+y8o+N4xbl9fuzcw8IJgF6NgJHDxvrWO1M8nXdtQcb7epU+5feSk74 qtEKD8LK7xNat7CwImKOlmouoECHjMHMNRP9e7ffIKBEAnigpi6a7YSwsNljj0OOAWEHJsg66TE AIl9UxGhRoChjsG8Fbh/QKhGilkfjUr72tYNUH4WROsvK28PBijbDp9Dm83WrYVBiNhkwlzjNbY +mJ5a9SGeL9BxVTUia+hz5STx0bTFPEtBBtkg= X-Received: by 2002:a17:903:8c8:b0:2b0:61c2:8e7a with SMTP id d9443c01a7336-2b0cdcdbbabmr104973155ad.25.1774810857582; Sun, 29 Mar 2026 12:00:57 -0700 (PDT) Received: from ubuntu24.. ([240e:47e:3870:786a:45b9:eb23:e7cd:d2fa]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b242676e13sm57685335ad.28.2026.03.29.12.00.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Mar 2026 12:00:56 -0700 (PDT) From: Yiyang Chen To: Balbir Singh Cc: linux-kernel@vger.kernel.org, Andrew Morton , Wang Yaxin , Fan Yu , "Dr . Thomas Orgis" , Yiyang Chen Subject: [PATCH 2/2] tools/accounting: handle truncated taskstats netlink messages Date: Mon, 30 Mar 2026 03:00:41 +0800 Message-ID: <520308bb4cbbaf8dc2c7296b5f60f11e12fb30a5.1774810498.git.cyyzero16@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" procacct and getdelays use a fixed receive buffer for taskstats generic netlink messages. A multi-threaded process exit can emit a single PID+TGID notification large enough to exceed that buffer on newer kernels. Switch to recvmsg() so MSG_TRUNC is detected explicitly, increase the message buffer size, and report truncated datagrams clearly instead of misparsing them as fatal netlink errors. Also print the taskstats version in debug output to make version mismatches easier to diagnose while inspecting taskstats traffic. Signed-off-by: Yiyang Chen --- tools/accounting/getdelays.c | 41 ++++++++++++++++++++++++++++++++---- tools/accounting/procacct.c | 40 +++++++++++++++++++++++++++++++---- 2 files changed, 73 insertions(+), 8 deletions(-) diff --git a/tools/accounting/getdelays.c b/tools/accounting/getdelays.c index 50792df27707..368a622ca027 100644 --- a/tools/accounting/getdelays.c +++ b/tools/accounting/getdelays.c @@ -60,7 +60,7 @@ int print_task_context_switch_counts; } =20 /* Maximum size of response requested or message sent */ -#define MAX_MSG_SIZE 1024 +#define MAX_MSG_SIZE 2048 /* Maximum number of cpus expected to be specified in a cpumask */ #define MAX_CPUS 32 =20 @@ -115,6 +115,32 @@ static int create_nl_socket(int protocol) return -1; } =20 +static int recv_taskstats_msg(int sd, struct msgtemplate *msg) +{ + struct sockaddr_nl nladdr; + struct iovec iov =3D { + .iov_base =3D msg, + .iov_len =3D sizeof(*msg), + }; + struct msghdr hdr =3D { + .msg_name =3D &nladdr, + .msg_namelen =3D sizeof(nladdr), + .msg_iov =3D &iov, + .msg_iovlen =3D 1, + }; + int ret; + + ret =3D recvmsg(sd, &hdr, 0); + if (ret < 0) + return -1; + if (hdr.msg_flags & MSG_TRUNC) { + errno =3D EMSGSIZE; + return -1; + } + + return ret; +} + =20 static int send_cmd(int sd, __u16 nlmsg_type, __u32 nlmsg_pid, __u8 genl_cmd, __u16 nla_type, @@ -633,12 +659,16 @@ int main(int argc, char *argv[]) } =20 do { - rep_len =3D recv(nl_sd, &msg, sizeof(msg), 0); + rep_len =3D recv_taskstats_msg(nl_sd, &msg); PRINTF("received %d bytes\n", rep_len); =20 if (rep_len < 0) { - fprintf(stderr, "nonfatal reply error: errno %d\n", - errno); + if (errno =3D=3D EMSGSIZE) + fprintf(stderr, + "dropped truncated taskstats netlink message, please increase MAX_MSG= _SIZE\n"); + else + fprintf(stderr, "nonfatal reply error: errno %d\n", + errno); continue; } if (msg.n.nlmsg_type =3D=3D NLMSG_ERROR || @@ -680,6 +710,9 @@ int main(int argc, char *argv[]) printf("TGID\t%d\n", rtid); break; case TASKSTATS_TYPE_STATS: + PRINTF("version %u\n", + ((struct taskstats *) + NLA_DATA(na))->version); if (print_delays) print_delayacct((struct taskstats *) NLA_DATA(na)); if (print_io_accounting) diff --git a/tools/accounting/procacct.c b/tools/accounting/procacct.c index e8dee05a6264..46e5986ad927 100644 --- a/tools/accounting/procacct.c +++ b/tools/accounting/procacct.c @@ -71,7 +71,7 @@ int print_task_context_switch_counts; } =20 /* Maximum size of response requested or message sent */ -#define MAX_MSG_SIZE 1024 +#define MAX_MSG_SIZE 2048 /* Maximum number of cpus expected to be specified in a cpumask */ #define MAX_CPUS 32 =20 @@ -121,6 +121,32 @@ static int create_nl_socket(int protocol) return -1; } =20 +static int recv_taskstats_msg(int sd, struct msgtemplate *msg) +{ + struct sockaddr_nl nladdr; + struct iovec iov =3D { + .iov_base =3D msg, + .iov_len =3D sizeof(*msg), + }; + struct msghdr hdr =3D { + .msg_name =3D &nladdr, + .msg_namelen =3D sizeof(nladdr), + .msg_iov =3D &iov, + .msg_iovlen =3D 1, + }; + int ret; + + ret =3D recvmsg(sd, &hdr, 0); + if (ret < 0) + return -1; + if (hdr.msg_flags & MSG_TRUNC) { + errno =3D EMSGSIZE; + return -1; + } + + return ret; +} + =20 static int send_cmd(int sd, __u16 nlmsg_type, __u32 nlmsg_pid, __u8 genl_cmd, __u16 nla_type, @@ -239,6 +265,8 @@ void handle_aggr(int mother, struct nlattr *na, int fd) PRINTF("TGID\t%d\n", rtid); break; case TASKSTATS_TYPE_STATS: + PRINTF("version %u\n", + ((struct taskstats *)NLA_DATA(na))->version); if (mother =3D=3D TASKSTATS_TYPE_AGGR_PID) print_procacct((struct taskstats *) NLA_DATA(na)); if (fd) { @@ -347,12 +375,16 @@ int main(int argc, char *argv[]) } =20 do { - rep_len =3D recv(nl_sd, &msg, sizeof(msg), 0); + rep_len =3D recv_taskstats_msg(nl_sd, &msg); PRINTF("received %d bytes\n", rep_len); =20 if (rep_len < 0) { - fprintf(stderr, "nonfatal reply error: errno %d\n", - errno); + if (errno =3D=3D EMSGSIZE) + fprintf(stderr, + "dropped truncated taskstats netlink message, please increase MAX_MSG= _SIZE\n"); + else + fprintf(stderr, "nonfatal reply error: errno %d\n", + errno); continue; } if (msg.n.nlmsg_type =3D=3D NLMSG_ERROR || --=20 2.43.0