From nobody Thu Apr 2 13:29:12 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