From nobody Mon Jun 15 05:19:41 2026 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 4D2CE376465 for ; Wed, 8 Apr 2026 07:09:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632145; cv=none; b=DXYWOkCtxY/yWt1bJH1pNV76NxgYo0PzDn+SrlTRhsvaTdYh87dsJYMZNe23Lt68o6T5SK4zFLq1VK6E7ZWcqdTLyvCPxOPMbxUR3ClbVCJ0uqsxnMkEsUbOpZm2LT6G31KjeSz0X0EdCYXZ3Ov5wlqCEsr8Ezt8ZgFPL2qCGe4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632145; c=relaxed/simple; bh=VWRVAtFJu4VciOy0IrY8WqRDMCzC0pdtaBc6B4XdvM8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mScZvnSaBt60zp+H2o8DHhGZ5+LzZoZ/HzC4WWNpJGDuv+4z3hXFNmQhHoQMQhdbGhyOiTYsK8t7koIoN+pl9jzvUHbFBaeYgJPmHY9D9ELVElWZbYSWOzwphp8VLTrJRw2YizH4DvXwsQt40Waop5iXxYDFZfz/d+wDWFgH8S8= 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=q/gp3Rac; arc=none smtp.client-ip=209.85.214.178 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="q/gp3Rac" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2b2589c26e3so52675705ad.1 for ; Wed, 08 Apr 2026 00:09:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775632143; x=1776236943; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=I0UuIfmemJrB2tpt/LluMWQs7qTsCKBTwZAZqA177Vg=; b=q/gp3RacFQdEo/v+ctzr3SscfVFxtLtCtVyHH9l1KeDpP8yOY43B0MZY4J6XrM1LGj JAz1BSCcS94b+u1agjtnMTykCbwRmpfgwiC5vz10y+52R6pxPhxUMVT0Bn5nYABf10Ch 8NhTQNHzC3VFKOMpm+C6tvmxRkWYM0xcSdGTqtzbrjiVBERqcTD46xaV7c841A7Lkdl8 WOGPTSaSXcDwnFvIAokIGDHgBm2jgHADxbg5JCRn0Mdk3VyVQYC3BLrvGtq+1rUjwMky r6/34Obe6nhf1oNpuD2cvne4oPS3fSsfUPN6fKA2o9q+XwCzjGQXPbVS3P95BlCuQxSM JIwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775632143; x=1776236943; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=I0UuIfmemJrB2tpt/LluMWQs7qTsCKBTwZAZqA177Vg=; b=s/lbXWvtJgdi0t1xHTB3Zp5eDJuHjqwqPLHpiTvkgvrSMRhHiePSzoQftGZ1oyILmL vKHX/wUl/VqF7X1JFA/WRKUEpd9NiMziNQnXJ3dds5B83kXYnijjEsxdTsYU5fWrqvy8 uxRlHiAYDcyLOe8aJeGkWVyXLp4Io/9A3ebkAqL7r2Jy5gZ+ri8VSS7Q9mbiAhFiMewE i22Ip9o1gKJrOiRlIckLcJn/tP+pLxH+ou7BeIto88C2j0yYmE/SiebR5sQBBc2muRbI FP9TOiGTiq/Yiw00HggV7UIlkEhP7mS+ASUR6uZFSEXdzv2VaDAIHRSkHE4H17sUWxrw giCA== X-Forwarded-Encrypted: i=1; AJvYcCVa9qaH68bx2D4MEycVhh7VhmfcMWqao9dcBKJIspeLtX7Yh1QRTeIfB0Xk7RSD02Al2oIBSvm86ywguE4=@vger.kernel.org X-Gm-Message-State: AOJu0YynRMomnMowfyYYblw3BgQ4MP511oOoiZIITmgG3/6L3syXKpum 8Kiqn6CF0tYyiy6xeFKWDV9R49pOr3AiWggX0kyUDzgYeN4UTn+Qet5D X-Gm-Gg: AeBDievu4scOYEK1v/aVMmwiL3Wio5nmD+vl11gQJDv/RLqj7I6y6lZlY5dfJT2Yh+P 35/Fs+LIwp+SpwHpUP3iIn4pCKDWeBRv5yHCgDaH7ioHeB4DmsGm6ONz1hawpQpx37c4Y45mVk2 GFDt87hBfKTxcVIddj2QHCDQ7KFWkhWb8QQt/Z5ZTbCAfmJhCUX1yJegmJ4smaopqj2kooD0pup l3Sszk0tJsDEftVo6BKy7+PNskdGLGZVItBe3OQRs9bXESodkwXLvq/4Ea5mQPE1//DI68qnS+J 1lV3oXxxqBE3UVE70PLxu8nm1PeP6GI6bNlpJ49QD+K/ohZqIK6IZTTQZXON+LVvV0UI5w5zaRU zub92zPckRU4tphftNV6d/FO3t6tOcR0xQmWu5M/sLzHUFu/wvrz/vAfVgAQabqfvoRwMvuAEWJ WF6fdiccId848mLfwWftmmDGkcEAaLoL8ngs7/gm2k8el53Sqt X-Received: by 2002:a17:902:ef12:b0:2b2:4bf9:1766 with SMTP id d9443c01a7336-2b2817c061fmr220093605ad.33.1775632143494; Wed, 08 Apr 2026 00:09:03 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749b66aasm202917785ad.68.2026.04.08.00.08.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 00:09:02 -0700 (PDT) From: Hangbin Liu Date: Wed, 08 Apr 2026 15:08:49 +0800 Subject: [PATCH net-next v2 1/5] tools: ynl: move ethtool.py to selftest Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-b4-ynl_ethtool-v2-1-7623a5e8f70b@gmail.com> References: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> In-Reply-To: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> To: Donald Hunter , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Simon Horman , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hangbin Liu X-Mailer: b4 0.14.3 We have converted all the samples to selftests. This script is the last piece of random "PoC" code we still have lying around. Let's move it to tests. Signed-off-by: Hangbin Liu --- tools/net/ynl/tests/Makefile | 5 ++++- tools/net/ynl/{pyynl =3D> tests}/ethtool.py | 2 +- tools/net/ynl/tests/test_ynl_ethtool.sh | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/net/ynl/tests/Makefile b/tools/net/ynl/tests/Makefile index 2a02958c7039..94bf0346b54d 100644 --- a/tools/net/ynl/tests/Makefile +++ b/tools/net/ynl/tests/Makefile @@ -36,7 +36,10 @@ TEST_GEN_FILES :=3D \ rt-route \ # end of TEST_GEN_FILES =20 -TEST_FILES :=3D ynl_nsim_lib.sh +TEST_FILES :=3D \ + ethtool.py \ + ynl_nsim_lib.sh \ +# end of TEST_FILES =20 CFLAGS_netdev:=3D$(CFLAGS_netdev) $(CFLAGS_rt-link) CFLAGS_ovs:=3D$(CFLAGS_ovs_datapath) diff --git a/tools/net/ynl/pyynl/ethtool.py b/tools/net/ynl/tests/ethtool.py similarity index 99% rename from tools/net/ynl/pyynl/ethtool.py rename to tools/net/ynl/tests/ethtool.py index f1a2a2a89985..6eeeb867edcf 100755 --- a/tools/net/ynl/pyynl/ethtool.py +++ b/tools/net/ynl/tests/ethtool.py @@ -14,7 +14,7 @@ import re import os =20 # pylint: disable=3Dno-name-in-module,wrong-import-position -sys.path.append(pathlib.Path(__file__).resolve().parent.as_posix()) +sys.path.append(pathlib.Path(__file__).resolve().parent.parent.joinpath('p= yynl').as_posix()) # pylint: disable=3Dimport-error from cli import schema_dir, spec_dir from lib import YnlFamily diff --git a/tools/net/ynl/tests/test_ynl_ethtool.sh b/tools/net/ynl/tests/= test_ynl_ethtool.sh index b826269017f4..b4480e9be7b7 100755 --- a/tools/net/ynl/tests/test_ynl_ethtool.sh +++ b/tools/net/ynl/tests/test_ynl_ethtool.sh @@ -8,7 +8,7 @@ KSELFTEST_KTAP_HELPERS=3D"$(dirname "$(realpath "$0")")/../= ../../testing/selftests source "$KSELFTEST_KTAP_HELPERS" =20 # Default ynl-ethtool path for direct execution, can be overridden by make= install -ynl_ethtool=3D"../pyynl/ethtool.py" +ynl_ethtool=3D"./ethtool.py" =20 readonly NSIM_ID=3D"1337" readonly NSIM_DEV_NAME=3D"nsim${NSIM_ID}" --=20 Git-155) From nobody Mon Jun 15 05:19:41 2026 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (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 030D2376465 for ; Wed, 8 Apr 2026 07:09:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632150; cv=none; b=rOmviyWd3jnVN7a7Goh8SzPfZ5youaZdZEisFX+inQOtX7elUZUpKIXU2HEadwtoFpfBLJr031acBCRv7zEUWft++QGPOhjJJOQAsw52mShMtNnuRzpoFOhpfaG1+AHDifA1poYVkf6SPuJWOZAxeYYiSAUR6nyEAjaAz2NYgTA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632150; c=relaxed/simple; bh=nKXB41y7VDENzvnPywjZ/CEAPXQdNhNRJWnavISbbq4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IVEFp6+LcnOklJArQjMlxePYJPWhkCMEXLMYq+I8DKANlLZ4VyLCqidyDZPzCMqBRMpoy3y0iyGX/mI2mskamPTv3q85j6FM3g7cU/w91U5RWIUKH3gKhpvDGTv/WdpvJQtFUxCkIoNC0XEMSPeM9xr7LIamkcHme9G4enxl+Jc= 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=fWoDBpEt; arc=none smtp.client-ip=209.85.215.181 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="fWoDBpEt" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-c76e702e01aso1287346a12.3 for ; Wed, 08 Apr 2026 00:09:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775632148; x=1776236948; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IDB8ejXWyf/utgwTbcAlTNKIHKdTUYoTuRoM9G0Gl9g=; b=fWoDBpEt/lPxkzEeSLWg+3wYZIJaCaSXJj1XZ9LwB5xtomEefTBigyDUTH+Naf1/j9 lrFkFDGSht8JEnW6YUAo2613eoUeOdVwbs4OCwiz0+rByDar0EEDENlv2y9bP353yPnt FSURRwMh7zTAq9j37OBxs9UQP766pY5+0Sb3kiI4psNdhHgj9BgF8cbFcIUJWkPDQj/7 nbjDQQG5cakFjMOHF9tT1y3CJK246QY368ygSabwDxhBeCkl15ft8U0Z88QA7bfWu8lP Y0GU4++I4ug4pUTeIUn1cY2iMIm0J45xC/BbNBmlWMQX/zxGVUkXz+EGNC3hQMloZrJI /fRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775632148; x=1776236948; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=IDB8ejXWyf/utgwTbcAlTNKIHKdTUYoTuRoM9G0Gl9g=; b=N61QBi4AmJTCfo6Aw/QCVL3xLmPkjac440D4d9CCT1kBLmhcEOVDKoUgUrHhjbctEB Csjr+8wGh9d7b7gWWj+mCDytEOkMnELE6oYXS0FG6jt/hiSWqJnKtaZstrBI4iaJOB6d Z+BD3kCmnQSWUoXTMPUZKrXiESymRAOB6K21lF3T1yERF8gxeRYv+XDEs38FLpDxufBR uMV1GkMpX1GJXhvVTdg9q65nbSubrZ6b9FYYrauSFHj4zrhjARoN9IJxyUmFXall0F09 wRlKJwuQtBY6hzdGmj7sRyvdmNw10oNAJOgEDAd57t9+JnLGO6degGaA+7w7v9pQMTP6 5xxg== X-Forwarded-Encrypted: i=1; AJvYcCVdsIkJIN4+3Gf2abl+vp33gMOzz4gruVz1i7SqW3eYVSDoURLmXXP6I/7WM6gvdMXYVD74Vlp113ABP5Y=@vger.kernel.org X-Gm-Message-State: AOJu0YyF2UyTMWrrjAZSlcmWjK6SvY74xXDU3v4G9qvpHnXs9n5gxBVh bDDqMJ6sTV8LW8O6IV4qF4kXM3rj2l4af5CI2ftiVyH8Rqqgi7UAkyLu X-Gm-Gg: AeBDies8qFUKcXHHHPIlaYzXOIps3hyayBmnSfK8jAyi/7Cw+qu0yJ1XjTnKOk5Wq27 KbPFBL0BfxuQrPiuQ1v6v3gjFtkAFxkB2qBj2xMEdOYJB58hwTu5GzeC2B9ZdtKq46mlnCHiFRe 4fi4cxXiZ/jZoznAi1R4tLuk021+T8ZzklHKeFRC6r5WHdCI1Yu7zTKaCVsow8B8+pSKwOIaOdU D7z1lt3mC045dtzJzCmccmH1jAuqDpJ5BOeekjwsibBUnVtJISV+hDyy45f3wtUUWsycVxDgbox piH+zM8o5pjWosQWWDXntGrB1qSI5it7re7f9pr62BYsbz/gGlYV3VgrDEyG+6wxH3E9iaEGno6 NVzGHsNV1T/mXg84GxF83IAC7yoWiyzjSqyZPYEWXgNbJvTzY/ceGECj8y66fXDFU63Mi26FAIY DozjRIkttOk6zQYZiu69dEXUlD/PlXq/YWoVRe9B+A2UYroJfgss0Fk7TRxBg= X-Received: by 2002:a17:902:ef48:b0:2b2:527d:103 with SMTP id d9443c01a7336-2b2817cc0d9mr187696245ad.43.1775632148297; Wed, 08 Apr 2026 00:09:08 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749b66aasm202917785ad.68.2026.04.08.00.09.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 00:09:07 -0700 (PDT) From: Hangbin Liu Date: Wed, 08 Apr 2026 15:08:50 +0800 Subject: [PATCH net-next v2 2/5] tools: ynl: ethtool: use doit instead of dumpit for per-device GET Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-b4-ynl_ethtool-v2-2-7623a5e8f70b@gmail.com> References: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> In-Reply-To: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> To: Donald Hunter , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Simon Horman , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hangbin Liu X-Mailer: b4 0.14.3 Rename the local helper doit() to do_set() and dumpit() to do_get() to better reflect their purpose. Convert do_get() to use ynl.do() with an explicit device header instead of ynl.dump() followed by client-side filtering. This is more efficient as the kernel only processes and returns data for the requested device, rather than dumping all devices across the netns. Signed-off-by: Hangbin Liu --- tools/net/ynl/tests/ethtool.py | 68 ++++++++++++++++++++------------------= ---- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/tools/net/ynl/tests/ethtool.py b/tools/net/ynl/tests/ethtool.py index 6eeeb867edcf..63854d21818c 100755 --- a/tools/net/ynl/tests/ethtool.py +++ b/tools/net/ynl/tests/ethtool.py @@ -84,9 +84,9 @@ def print_speed(name, value): speed =3D [ k for k, v in value.items() if v and speed_re.match(k) ] print(f'{name}: {" ".join(speed)}') =20 -def doit(ynl, args, op_name): +def do_set(ynl, args, op_name): """ - Prepare request header, parse arguments and doit. + Prepare request header, parse arguments and do a set operation. """ req =3D { 'header': { @@ -97,26 +97,24 @@ def doit(ynl, args, op_name): args_to_req(ynl, op_name, args.args, req) ynl.do(op_name, req) =20 -def dumpit(ynl, args, op_name, extra=3DNone): +def do_get(ynl, args, op_name, extra=3DNone): """ - Prepare request header, parse arguments and dumpit (filtering out the - devices we're not interested in). + Prepare request header and get info for a specific device using doit. """ extra =3D extra or {} - reply =3D ynl.dump(op_name, { 'header': {} } | extra) + req =3D {'header': {'dev-name': args.device}} + req['header'].update(extra.pop('header', {})) + req.update(extra) + + reply =3D ynl.do(op_name, req) if not reply: return {} =20 - for msg in reply: - if msg['header']['dev-name'] =3D=3D args.device: - if args.json: - pprint.PrettyPrinter().pprint(msg) - sys.exit(0) - msg.pop('header', None) - return msg - - print(f"Not supported for device {args.device}") - sys.exit(1) + if args.json: + pprint.PrettyPrinter().pprint(reply) + sys.exit(0) + reply.pop('header', None) + return reply =20 def bits_to_dict(attr): """ @@ -181,15 +179,15 @@ def main(): return =20 if args.set_eee: - doit(ynl, args, 'eee-set') + do_set(ynl, args, 'eee-set') return =20 if args.set_pause: - doit(ynl, args, 'pause-set') + do_set(ynl, args, 'pause-set') return =20 if args.set_coalesce: - doit(ynl, args, 'coalesce-set') + do_set(ynl, args, 'coalesce-set') return =20 if args.set_features: @@ -198,20 +196,20 @@ def main(): return =20 if args.set_channels: - doit(ynl, args, 'channels-set') + do_set(ynl, args, 'channels-set') return =20 if args.set_ring: - doit(ynl, args, 'rings-set') + do_set(ynl, args, 'rings-set') return =20 if args.show_priv_flags: - flags =3D bits_to_dict(dumpit(ynl, args, 'privflags-get')['flags']) + flags =3D bits_to_dict(do_get(ynl, args, 'privflags-get')['flags']) print_field(flags) return =20 if args.show_eee: - eee =3D dumpit(ynl, args, 'eee-get') + eee =3D do_get(ynl, args, 'eee-get') ours =3D bits_to_dict(eee['modes-ours']) peer =3D bits_to_dict(eee['modes-peer']) =20 @@ -232,18 +230,18 @@ def main(): return =20 if args.show_pause: - print_field(dumpit(ynl, args, 'pause-get'), + print_field(do_get(ynl, args, 'pause-get'), ('autoneg', 'Autonegotiate', 'bool'), ('rx', 'RX', 'bool'), ('tx', 'TX', 'bool')) return =20 if args.show_coalesce: - print_field(dumpit(ynl, args, 'coalesce-get')) + print_field(do_get(ynl, args, 'coalesce-get')) return =20 if args.show_features: - reply =3D dumpit(ynl, args, 'features-get') + reply =3D do_get(ynl, args, 'features-get') available =3D bits_to_dict(reply['hw']) requested =3D bits_to_dict(reply['wanted']).keys() active =3D bits_to_dict(reply['active']).keys() @@ -270,7 +268,7 @@ def main(): return =20 if args.show_channels: - reply =3D dumpit(ynl, args, 'channels-get') + reply =3D do_get(ynl, args, 'channels-get') print(f'Channel parameters for {args.device}:') =20 print('Pre-set maximums:') @@ -290,7 +288,7 @@ def main(): return =20 if args.show_ring: - reply =3D dumpit(ynl, args, 'channels-get') + reply =3D do_get(ynl, args, 'channels-get') =20 print(f'Ring parameters for {args.device}:') =20 @@ -319,7 +317,7 @@ def main(): print('NIC statistics:') =20 # TODO: pass id? - strset =3D dumpit(ynl, args, 'strset-get') + strset =3D do_get(ynl, args, 'strset-get') pprint.PrettyPrinter().pprint(strset) =20 req =3D { @@ -338,7 +336,7 @@ def main(): }, } =20 - rsp =3D dumpit(ynl, args, 'stats-get', req) + rsp =3D do_get(ynl, args, 'stats-get', req) pprint.PrettyPrinter().pprint(rsp) return =20 @@ -349,7 +347,7 @@ def main(): }, } =20 - tsinfo =3D dumpit(ynl, args, 'tsinfo-get', req) + tsinfo =3D do_get(ynl, args, 'tsinfo-get', req) =20 print(f'Time stamping parameters for {args.device}:') =20 @@ -377,7 +375,7 @@ def main(): return =20 print(f'Settings for {args.device}:') - linkmodes =3D dumpit(ynl, args, 'linkmodes-get') + linkmodes =3D do_get(ynl, args, 'linkmodes-get') ours =3D bits_to_dict(linkmodes['ours']) =20 supported_ports =3D ('TP', 'AUI', 'BNC', 'MII', 'FIBRE', 'Backplane') @@ -425,7 +423,7 @@ def main(): 5: 'Directly Attached Copper', 0xef: 'None', } - linkinfo =3D dumpit(ynl, args, 'linkinfo-get') + linkinfo =3D do_get(ynl, args, 'linkinfo-get') print(f'Port: {ports.get(linkinfo["port"], "Other")}') =20 print_field(linkinfo, ('phyaddr', 'PHYAD')) @@ -447,11 +445,11 @@ def main(): mdix =3D mdix_ctrl.get(linkinfo['tp-mdix'], 'Unknown (auto)') print(f'MDI-X: {mdix}') =20 - debug =3D dumpit(ynl, args, 'debug-get') + debug =3D do_get(ynl, args, 'debug-get') msgmask =3D bits_to_dict(debug.get("msgmask", [])).keys() print(f'Current message level: {" ".join(msgmask)}') =20 - linkstate =3D dumpit(ynl, args, 'linkstate-get') + linkstate =3D do_get(ynl, args, 'linkstate-get') detected_states =3D { 0: 'no', 1: 'yes', --=20 Git-155) From nobody Mon Jun 15 05:19:41 2026 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (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 56F2C3793D3 for ; Wed, 8 Apr 2026 07:09:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632154; cv=none; b=JNO2e2q8OT9J/vWq4iBAsT2suvjPXKg52Grvon5bAzpomx22RayghmQ0IGmji02VCfXkv/edFAw1K4z7sZ8S7Tvkb6Px4Uf/4XXIkuvwij5ymZ86jlB1E9J2HpVApwH6MQZ6H84vWdYDhccWb/cUm7FXjc8Iy4hAsCJ8f8/EOzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632154; c=relaxed/simple; bh=yW0EWQ0S7fZHnKrZijNI45+Zh8pLiM3aDw1H/YYr77Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AKv3eGuGeMxMOKoPCT/w8EZZtQs3JeScQij9QLIXbDbIbvWui2pSmp+9cz3JDDyoM4ByILMRmcu6yJdlUw8DCbDLSNMhyfCRllT4vuKj0qsEGK75ksM2X5H0e4gMAPo7jK8uWfCHzbIlHOBeXDXO3Y1NrZdqsSFXB8/8kDFOnsQ= 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=d0WRbAgp; arc=none smtp.client-ip=209.85.215.169 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="d0WRbAgp" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-c76b0cda2aeso2368783a12.2 for ; Wed, 08 Apr 2026 00:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775632153; x=1776236953; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sjikhea0j9xNgvdUdw09l94z78mqVFteQ985sCMSLyI=; b=d0WRbAgpYGUxKB4zVy5Etr77inb6L1y6hF0T7XTkz0EB11idWu5FTjeyCXiucAgnAS PeBX08/mOWQc3DlmRIqWuKAYplddVsvajdK1ZtDwSfTvZ8pl7bM29YJhKcKSWsCSQER7 9wgCFhvab+aAzLPqbZ8QQJvCFa2uuwTHbLxcv1GiUmERzR6DcPJOyJrZb2ia0vhzk6bJ 6d5zgHqYpEKSzj8Ii9x5n9kILz3Sr3O4RjDg7cVHObYpfOggz2YgWRMSGxwd23L9vK12 MzCdz+LGAhtA1O+1iud0uPv34Z7YD2ATuU4KqgNxJ9DuN66QBPC+tXiIbJVaFD3FLBeb e5nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775632153; x=1776236953; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sjikhea0j9xNgvdUdw09l94z78mqVFteQ985sCMSLyI=; b=n9bR6q89pgjtiPBmchMCO8zJBV9yvxPn2N/7LOagKuJM75F7mVBAKBHu+Ok5lM0XGZ jXNHpMC65PuqvoDbQ7+wKfzkPhsX2AWDpYpiUqqp/TTfCaTgVY5nT34xBmZ8CtJClEJn koDkAvdCFLbB+tqShZDpREpeQnrRr3Dbo474wY1+N/oKQFkFDZvH/+w+SE+oISobPvll E6IMTQzDH3fkTVsxfnooL+v4Dx+ySsGn7f2AA6jnmqSbXYskUeDz0lpxCyWUoZudOORs Tg7MsmDEZsiBgj5ot6u6iGJmVSTATyC5Wo/coSFkhCkg9npOAWO4ZNwzrPOQAAVL6BTx zv5g== X-Forwarded-Encrypted: i=1; AJvYcCUBEBOmp1L3JLeh48kkJVl6xJzd1UQLskNSZ+LFop6qSiZk7ZWGBWAOlS2rvqNOmrUtrEltGm7jKvEa8Sg=@vger.kernel.org X-Gm-Message-State: AOJu0YxsRz91EIusF0q5otel6OiDyDsVTdpq/CIZd1VziPpweOWiREqk t1XK6KdCcJ5gVa1l/UQrqO7NEf48tvA4oSv1Gvf1p+lp3klvzbFHBEJb X-Gm-Gg: AeBDietX3hD+bJmn7O7I3lgD2lLdwWnx4n4Fyst9AKdZA2kkyFCHty7EzVifnC6GMec Pi0ejzc1Mc8vlGeqq5HekNOK0AnDyQVVMx+zz82h6c+6K9toEFseAEVJ8USTxLCsU7SgDpMjR7Z S5ELqxVzEx2jmsVE7HVGQxwZ0UeZs63m9In4J2tLQsmfO2Zv/yzT3x5iLoEKJ3/mofgCDsUO5hf VmIHjrn8h7xYVwmHlCxtRFW06SM++a5Izuqb4wZxRV9U6fILO95BtdQsmKB1CDdMJwP3v0G0s2a VV2hRPOlBKtbNIczEFGXAkIrBSbMEYv1LHvPEtpnaQYoy4QqRnGITYaEyTTKThFlqOE7MvMBZ4X 69u5wMdxQ4CCfRrx8bN5c2Sn4k8tGxOUkRYqk3eWe/k8g4wE/ouPAbGmWlq+WdTcmTsvGrHZ5Og /pBcVmjZKO9Vd/wmCMxCCz0WeWQ+ZfGJKPxavkvQQ4vHesuArPFFmiCkB2Mmk= X-Received: by 2002:a17:903:2c07:b0:2b2:67ca:5ff1 with SMTP id d9443c01a7336-2b2818afe20mr216067485ad.31.1775632152759; Wed, 08 Apr 2026 00:09:12 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749b66aasm202917785ad.68.2026.04.08.00.09.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 00:09:12 -0700 (PDT) From: Hangbin Liu Date: Wed, 08 Apr 2026 15:08:51 +0800 Subject: [PATCH net-next v2 3/5] tools: ynl: ethtool: add --dbg-small-recv option Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-b4-ynl_ethtool-v2-3-7623a5e8f70b@gmail.com> References: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> In-Reply-To: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> To: Donald Hunter , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Simon Horman , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hangbin Liu X-Mailer: b4 0.14.3 Add a --dbg-small-recv debug option to control the recv() buffer size used by YNL, matching the same option already present in cli.py. This is useful if user need to get large netlink message. Signed-off-by: Hangbin Liu --- tools/net/ynl/tests/ethtool.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/net/ynl/tests/ethtool.py b/tools/net/ynl/tests/ethtool.py index 63854d21818c..db3b62c652e7 100755 --- a/tools/net/ynl/tests/ethtool.py +++ b/tools/net/ynl/tests/ethtool.py @@ -166,12 +166,19 @@ def main(): parser.add_argument('device', metavar=3D'device', type=3Dstr) parser.add_argument('args', metavar=3D'args', type=3Dstr, nargs=3D'*') =20 + dbg_group =3D parser.add_argument_group('Debug options') + dbg_group.add_argument('--dbg-small-recv', default=3D0, const=3D4000, + action=3D'store', nargs=3D'?', type=3Dint, meta= var=3D'INT', + help=3D"Length of buffers used for recv()") + args =3D parser.parse_args() =20 spec =3D os.path.join(spec_dir(), 'ethtool.yaml') schema =3D os.path.join(schema_dir(), 'genetlink-legacy.yaml') =20 - ynl =3D YnlFamily(spec, schema) + ynl =3D YnlFamily(spec, schema, recv_size=3Dargs.dbg_small_recv) + if args.dbg_small_recv: + ynl.set_recv_dbg(True) =20 if args.set_priv_flags: # TODO: parse the bitmask --=20 Git-155) From nobody Mon Jun 15 05:19:41 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 0EEC0377EBC for ; Wed, 8 Apr 2026 07:09:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632159; cv=none; b=Q4EejCtsP/R/s+AEcrhSWxXXyk7vuFq1cxrPBWtxcbDx3MrHz8jPIz8aUbfEnVQZVL5PgnJwQcA5UfHl+KtdZ3mEGHYwqgQ7Zm0Z1iWeuIleCx4tW0TWBa0o+YhpUY5iRTpiioEazvXoGat0+Bd4upSNZNZ9C97hWt9uopS++LI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632159; c=relaxed/simple; bh=arnp7gczBQAyyQIAMvp6Am0+WUL06koxo245kjp/MoA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PCiHzsSaGJhqgy8iyFOdBCDH7KbwTQr/2SGYY0TZ1njoM0Fbt8TG2gMhTW8syrwAtdpjRzWX7UHLNFHfZ4DQ2q9u/tVoGmtmF5WTlQF4mtdYo1nw55me7JKFybtNMxcWmOmSjP4F4fTGpqaWvfYwiWI0XmqfTSQVyZpLTrEX+h0= 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=fLI+YVNh; arc=none smtp.client-ip=209.85.214.172 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="fLI+YVNh" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2ad21f437eeso3987165ad.0 for ; Wed, 08 Apr 2026 00:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775632157; x=1776236957; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=SHfInxTMO4F5kmKiIP6zRL2QqGxjyp1w4ES+9lythuw=; b=fLI+YVNhEyUhuDmcXkH5El4vGdT5dg8cfhPn8N/J2Z/xWn/sw3NePx7sZSZEpRblRv xe4TKBPpj4rUtNO3FHr8f52DICz4unSqOOnSfPl/bibcHhRiQKxknK9tEjuft21DZ1Ko zI2h9Ux1v5fU/HIkzYmJHf8NY/xYeJuHzKVqrWVz063H2SuGur9JJOUqaOp/ODlue0V3 d2sbyUiVcb9gGG/1yMIIq6kjwYIeoKX0VUYqd6XP/aU4bwhGXRTIsdlen4FIY/leuZcR bfGIuAwAtOB1rRmvKhgO5DCx2GDzUfJQh/Hi5ZjUnrGP0uIAkEQM04QjEPTwt4pP3o4x tB1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775632157; x=1776236957; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=SHfInxTMO4F5kmKiIP6zRL2QqGxjyp1w4ES+9lythuw=; b=WAYbEIaYM/sAb6/PQ0V3W4HfATKECTpLG5VxaNk55kVwksYm8t9u0cltNv99Xdfztt qxjfT18PPNhp2udBgpv6GiRHls+pxZyU/2bD1PThul3taJ+WVkhGc/8xbyH51TYPsjVB tahpoJYNafvP/C4XPGU2KAt7ObdqXWMAUzkjdJdMTEjiQLr80Gj0kYiMGWAwWZ1zcOgs Ug1puWZObxqSAPp12xZdAv6hPy1D6S0oZHi0cWyjebKKf0i0e6g8Bg9xyHuir6Qh7yI4 6yBScSVNkrEAP/z755fn/xOE0vl8MSzWDa56xK/ugHZYdAtgDO5/1iIJSs8rLxc7EGIt tTdA== X-Forwarded-Encrypted: i=1; AJvYcCVuxvKybjfoX/jD5eiPkwEkl157VEParlBCwToAU8yj5/JL+mvxujIjd3x+Y2NBZhegQfty0W3hRscXPDY=@vger.kernel.org X-Gm-Message-State: AOJu0YwRQAA8F5o2NIGAcSDRLHh4f+GVSM8ZVivn2YiKMTP9p07/yMNh SqOzFetdvTHI1dW17FPnQ3lI1OfhzLmqotd88QgKrFOOJz5Ylps+TKbE X-Gm-Gg: AeBDieupIdUBTYTLZjps87ZfhZEkaxRz/zpMuwv11ejXOvMCgPyhWNu4VsBVc5hTt7k 478b/Xy+QuErC0TTbXZb6rOtkPnjiin3C6M9ksJzQ3rS9faXl5PNjJ3KB883KH1ESmOVMEw/0WN gOIqLjM0ax9wz36Jmeez+elNRbsF9BU72/Qhl1THZ308So/5l8tC6KQBHXWVREK1/Cw1R0PCEDf 6jD7mUHpefI/Lalv/PoftJNz0YFYpE1jgBdHp70CkKCD97DG4HrDjhmyXvBFAoxhIsdDsFe6eQr VjYxevn9hTIP0l0miMz4Q9XwNvf2QfdmlHsXp9c8/acSjKwj+UiP1ajwVzXUWast0uT3iBQXLqo 6vNpoxaFllkqcwlm/LkdMU9UHi4TnVZLN575o2FXPVsKN5FcH/PKSQG6OGdy/D+s0tN5CdVp135 +uX4hPdPLbyumNMh1N3dLqe/yeRHNZhMQdTJM38H57sKylMLKx X-Received: by 2002:a17:902:e78f:b0:2b0:b258:2a57 with SMTP id d9443c01a7336-2b277e7ebf0mr202325165ad.27.1775632157316; Wed, 08 Apr 2026 00:09:17 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749b66aasm202917785ad.68.2026.04.08.00.09.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 00:09:16 -0700 (PDT) From: Hangbin Liu Date: Wed, 08 Apr 2026 15:08:52 +0800 Subject: [PATCH net-next v2 4/5] netlink: add a nla_nest_end_safe() helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-b4-ynl_ethtool-v2-4-7623a5e8f70b@gmail.com> References: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> In-Reply-To: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> To: Donald Hunter , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Simon Horman , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hangbin Liu X-Mailer: b4 0.14.3 The nla_len field in struct nlattr is a __u16, which can only hold values up to 65535. If a nested attribute grows beyond this limit, nla_nest_end() silently truncates the length, producing a corrupted netlink message with no indication of the problem. Since nla_nest_end() is used everywhere and this issue rarely happens, let's add a new helper to check the length. Signed-off-by: Hangbin Liu --- include/net/netlink.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/net/netlink.h b/include/net/netlink.h index 1a8356ca4b78..546d10586576 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -2264,6 +2264,25 @@ static inline int nla_nest_end(struct sk_buff *skb, = struct nlattr *start) return skb->len; } =20 +/** + * nla_nest_end_safe - Validate and finalize nesting of attributes + * @skb: socket buffer the attributes are stored in + * @start: container attribute + * + * Corrects the container attribute header to include all appended + * attributes. + * + * Returns: the total data length of the skb, or -EMSGSIZE if the + * nested attribute length exceeds U16_MAX. + */ +static inline int nla_nest_end_safe(struct sk_buff *skb, struct nlattr *st= art) +{ + if (skb_tail_pointer(skb) - (unsigned char *)start > U16_MAX) + return -EMSGSIZE; + + return nla_nest_end(skb, start); +} + /** * nla_nest_cancel - Cancel nesting of attributes * @skb: socket buffer the message is stored in --=20 Git-155) From nobody Mon Jun 15 05:19:41 2026 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 7C16437754F for ; Wed, 8 Apr 2026 07:09:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632163; cv=none; b=DBY56SByqq5q8oHP5lLLXo2KMll+6UffDqUMGn3Ogp0QZZY1z/nHAM7tho6sN3DT8hN12fMM+bsncAcPK8DBT+5nXrgCBseaaZNtXvwUU0UjX3euZS4SKx80vcy9J9/qVDvUuwY8eQaRHzNP0rL2S9vwPP/ohNGbECezb46nIn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775632163; c=relaxed/simple; bh=Vxcbk+0KCUKwsKzBSHDoUBsC/cy/EaOWyXcWYWFiBvI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=crZU2tZhEyx8e8sSJVV9oV9hMi/+X97XR7lL7McbURFiXeNzdymDYZzX2f4fIds4MjzlcvLMP8cVCujWxDV/noj/2aQQJZRROIydN/0X9iURKGDdgZeBHxQ/NzPRe9y3sb/cSbYn/dI1Xwhm8YQvgJ97gJE5eyMCJHcAnP7zdeU= 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=ZF7ko3im; arc=none smtp.client-ip=209.85.216.51 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="ZF7ko3im" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-354a18c48b5so5126947a91.1 for ; Wed, 08 Apr 2026 00:09:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775632162; x=1776236962; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=7XcPeFEkX6jrjhcG/SmkZCF91BEDg8hDcsanGa5vj9c=; b=ZF7ko3im7Eqp9ltSq86Cpu7qLZUz1f/L7K8ULy1zPzOOVq4/ETrPgnGPdfLF2k6lDu swuXtJX89wHg967f3UdyKTBNVSBOd8EhYN5etuiO1gSNP0g401NIFp9uXUzq3UF7peFS OdHb28tDUgM8+VhcvUEGWtQjRZmQ/mlVELrGfI5KCxkQ4+vSE8ae2ZznpWfOGeHZlab3 9TGjVBHR6oAhghD7kW/19ONanJepGQfdFucJKrErESlXuwno8MpK55gWwKTy44+GIC3M aSpAu/POrbVGnevNDpjKJIWsfAJWL1FcwL3/P0nUTDbnh55Bz5HIjK1Uwr9xMAU1ghJh hnXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775632162; x=1776236962; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=7XcPeFEkX6jrjhcG/SmkZCF91BEDg8hDcsanGa5vj9c=; b=Bz1hW9xAVHvnnmp2nEz6p7399yhQd50mvxSViQkZypcee1WxYqsPaVT2NTZz67l9+5 wdBiqFx7ZuY9PE9o6vSd7uHfQbP+mVF3SCDDMaZhSVXeUXlJIfb9O7D1Zss4iwWZ4vEW bHxwb01/uCn0MmZpsfQ7g+/W3AuiFnjhUdMIVVgMa9JRcSDs73JEhchQ8CBw/hrvTbW+ lMJHp2pfasJ/Bai9iT7BElgmgX4skWx9xmmtu+4DJXd7KXbDv1lKztUj/DmmOTxSY8Lo K4ADRydvN2t13gtVbS2tYjuIC34lcLHtNOpxDhe0hnWi6etF8fm6sRPaodG6QyEpey2l roCA== X-Forwarded-Encrypted: i=1; AJvYcCUGwnBlOPvKeSOuGwhk3uiEJyWqZH35TEE01Bi3LbgzJMwmEDuGdFdmFolHjHY1pj4D9tKlMg8IDDWuSvo=@vger.kernel.org X-Gm-Message-State: AOJu0Yyz1+CWf9VMH41/RRxMc8rgi+YeMAx/We2NFxiKBHn5kUinTIXv fttsEAFnpuyZSKXVdywbNKPaUKOODeCmDK0/G6XsESwGQQyzQpoWmxUs X-Gm-Gg: AeBDiet04/3MdRj9oUm7qbbged4KHaK378daD6Y/Lax9tvAujU9F/xUDQCJHHatq6m1 6gPKeyJBDJIyMejWI3Apmyc++ttq8CyK2ezzvtvI3QNAjPE+vYYtkdRX58Qg30eK4zZ8jrqRn5y uQTgKf/ZAGG96cSmDoVYh249yAUsnB8DcOICMcJ6oBZ9NPWZqfVlASVwoLOqCvGpVWeFS8dbRJS WixdqSbT+OoHbph9H4Uc7RMUlVbiMMnl9giZ/mW2242DxvceLsnAa1tKw1M7fyHR1O+QbOn5QNb rJZEnF8EI40OOGm4FT8kKlhyqOfxRwm4uNqRzVx2shbspQ31HrOFuK53GYBO1C8BYtMhWswKRid FvujgIwu88E08Q+NDbx+2IltkY3M0Cd3jjvw3JdtCweEYyNFU28JNqQErNCc7aJguXCBaw3hIx+ pW5+mvt3PUZ7zNARld1ascCXa7nlMH9L9wd3YDe8PJIhmoH6Jd X-Received: by 2002:a17:903:b0e:b0:2b2:52af:52b8 with SMTP id d9443c01a7336-2b28184a5cfmr209513175ad.11.1775632161906; Wed, 08 Apr 2026 00:09:21 -0700 (PDT) Received: from 1.0.0.127.in-addr.arpa ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2749b66aasm202917785ad.68.2026.04.08.00.09.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 00:09:21 -0700 (PDT) From: Hangbin Liu Date: Wed, 08 Apr 2026 15:08:53 +0800 Subject: [PATCH net-next v2 5/5] ethtool: strset: check nla_len overflow Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-b4-ynl_ethtool-v2-5-7623a5e8f70b@gmail.com> References: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> In-Reply-To: <20260408-b4-ynl_ethtool-v2-0-7623a5e8f70b@gmail.com> To: Donald Hunter , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Simon Horman , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hangbin Liu X-Mailer: b4 0.14.3 The netlink attribute length field nla_len is a __u16, which can only represent values up to 65535 bytes. NICs with a large number of statistics strings (e.g. mlx5_core with thousands of ETH_SS_STATS entries) can produce a ETHTOOL_A_STRINGSET_STRINGS nest that exceeds this limit. When nla_nest_end() writes the actual nest size back to nla_len, the value is silently truncated. This results in a corrupted netlink message being sent to userspace: the parser reads a wrong (truncated) attribute length and misaligns all subsequent attribute boundaries, causing decode errors. Fix this by using the new helper nla_nest_end_safe and error out if the size exceeds U16_MAX. Signed-off-by: Hangbin Liu --- net/ethtool/strset.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/ethtool/strset.c b/net/ethtool/strset.c index 9271aba8255e..bb1e829ba099 100644 --- a/net/ethtool/strset.c +++ b/net/ethtool/strset.c @@ -443,7 +443,8 @@ static int strset_fill_set(struct sk_buff *skb, if (strset_fill_string(skb, set_info, i) < 0) goto nla_put_failure; } - nla_nest_end(skb, strings_attr); + if (nla_nest_end_safe(skb, strings_attr) < 0) + goto nla_put_failure; } =20 nla_nest_end(skb, stringset_attr); --=20 Git-155)