From nobody Wed Apr 1 23:46:38 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 481DE277C81 for ; Tue, 31 Mar 2026 03:56:42 +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=1774929403; cv=none; b=YaK4zb5N8in8nD/0wlKMxWQNuAciJIYIbvm25sKOtnKljKj0q03sCPS09Kpb/wqbTQyq8UCxBEUsdOA3h6FAjXMy6EHOJVEiiGjFrT2UEoVlQrAtsy+VoEcMHp9m5pr8C0rWg5jtw5WEYovtyOlsqQZh5XhL+QU2aF+jxeWBycw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774929403; c=relaxed/simple; bh=lO90n7TQ7viTYcHE5z6RbYwdo3N9dITEVnLpSdhoKiI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=E1y7UR53OYpJoC8gLVObBlkWEhxWAhGCuHytc/MO5tHByEi9D4wP8oZzbr2y0RqX5r/TVtCNBrUpk8XGiMRwjkg207+j9Ll+D6NaRGH2BtBLLW6VY/wy2Nbus5uZ6pZMSP14kercQ72lIOT7/FoeoHj1DCwKEnqaXwwTRxMUJDs= 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=A53RacYy; 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="A53RacYy" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2aaf43014d0so34812475ad.2 for ; Mon, 30 Mar 2026 20:56:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774929401; x=1775534201; 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=1XBvzRLrpjXV3/hRXV2JjUvNJhrfkyfV/lSyUFxhz4k=; b=A53RacYyqQMLjwmsXTyje9tNh40CWXf7jKR6mP15ezMKmdE2OOg3X1Ky9gK8YoeUHE pyAQZlQKRstDD81opJlNcheDLO/XBczULvjaG0+bnF+tGXe3+xvc+tgJcMoO5+FG0Elh G3i0rqS7c1T7FaZ1Nm9icRJISVN9UFo5FfTtF34RR41AZ5R/huhO1mKJXi1rbo1TtNUG k43EcEjWGsj7jM/+s6mNWz7WOT5WiRPkQ6j7Wbeu1ZA7+FoUZmYuQBUC7yz3qYlM0dDo aQRhGW2Qz6isA4PIc2r5lBJdsv3skzs4r/CVG3jkmYy83JaObPImGCsFnKZp93+P8P4M vUuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774929401; x=1775534201; 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=1XBvzRLrpjXV3/hRXV2JjUvNJhrfkyfV/lSyUFxhz4k=; b=elC5HU9FAU1pcQKTeYpOrGiPpluPBi/FqNBJKFcpISJnaJdQmjppEJunwwZpMHUKkR 4Bv7lUD+q9Rr9u+wPXorxG+7CorTcqK/4XDUT2h/Q8xOTxlvmiHnqFHVAU5yRcR6ssFl mTy3KXavWO59sLBk/2euhgAMhr/R/7k8V7s2CgQkPkbJstHNVSnx8TtNxHi+1GykKKf2 f/kCcyQCtU0oJCRNAw0e5iV4Q+XkzWUN4LzNLGfXUiwdcn/U5q76P/lj1gkaqy4UAP0m zeAGmXX/JF+YbK8dFcqJqgFrIZSyiWK0s+ojUuPOHJpyQlqaG2+rWBR+oM4DVRJE5ySj 1S2Q== X-Forwarded-Encrypted: i=1; AJvYcCXWzwxFDGpHuJVq90upuHC46EPfx49XEV5zPZ273qm0hdYpuDncZL/KMc06fZi4fpXdBjufmot1q0qFkA4=@vger.kernel.org X-Gm-Message-State: AOJu0YwCMCTdvaPCnVKgDq1+Zp75HEJDCXW3PYqsoz3sw8OHrSuzWUZw m2fkwm+PqES4Xwoa9TQ8tbX60F0O8BoQ/P8otYamxW18Vsq9HRCOKiMzbvFOVkR8I2e73Q== X-Gm-Gg: ATEYQzwtGCrBA1BJNrOluEP1xkgCnv10uPEfI7L0L0uvDgGcXG7go1ofUNI1BrhY1dJ nJhS9/eThUcrTGb3rSwI0dR3tm6sbr6DwmsOWyZitZhm7yvMc6He2gL/GaYc6nsQp6bvIpKlESM mf1yC4hab2xq794kG+//FDYB5NGhRpXqWRIm7Wki/xvpQzSz+3XSR1Q3mdiQYmsT9wnegdLvb+a wct5rWDt6nzSPk2pk1txVT/Xgp6HGDO23rfD45kKEOVeZNzq2iZggUfUD22Y+jQLqUAsHivwTCt tBlCaAckmHVAEwNU89KaDEwI3XI5I+rEQpqZvnjCghGRrVEBNTcP1shESVR/ZUEomScT84Zwx+5 NcuWBA7NSz9NCaPd7N5E6cy7XgqWVgHJfN+q5IvuT5mWuPAcNKkvr9miDpc0/eXJWAIEysbfi6g Um/6yN8KyolRwQRiss8zeof8i9/0KCnRPWQN2oaJrhZrm/JVIisLNikqySXUpkDrZeJ7tH7aZco JSUc+sfTnqC7KLPjIkzaSa0kTps7ePz5dI3Gtyq9oirgAaLmdI= X-Received: by 2002:a17:902:fc4b:b0:2aa:d67b:ef96 with SMTP id d9443c01a7336-2b0cdcaa72dmr158027155ad.31.1774929401348; Mon, 30 Mar 2026 20:56:41 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa ([240e:34c:5765:500:c92f:4f4e:9953:45b7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b24266e487sm94680625ad.24.2026.03.30.20.56.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2026 20:56:40 -0700 (PDT) From: Hangbin Liu Date: Tue, 31 Mar 2026 11:56:11 +0800 Subject: [PATCH net-next 1/4] 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: <20260331-b4-ynl_ethtool-v1-1-dda2a9b55df8@gmail.com> References: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@gmail.com> In-Reply-To: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@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/pyynl/ethtool.py | 68 ++++++++++++++++++++------------------= ---- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/tools/net/ynl/pyynl/ethtool.py b/tools/net/ynl/pyynl/ethtool.py index f1a2a2a89985..8bf234d594b3 100755 --- a/tools/net/ynl/pyynl/ethtool.py +++ b/tools/net/ynl/pyynl/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 Wed Apr 1 23:46:38 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 854A1295DAC for ; Tue, 31 Mar 2026 03:56:50 +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=1774929411; cv=none; b=VFRbhV7QXfBouyx90KgmjtV8UW99dLUTHOAr3E9cWAKnNG+fUeN0jbkw5RWsnNTKTkZvYfzfDgReeupnU/S7ktB5b4hTM+G6shN7O9VWNlG9iltshpo/h4xZNDmx+QAbe0JpDJRrnt4SIlJdae7B+E82J4nR8sNcmFeH/jeVO3k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774929411; c=relaxed/simple; bh=rLmB5xzWmQJE/Rx+ds2UDJgnJEPcYsqGc3Ak9yHZMmE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kyfbddt4wLzVTMmq5DgzJO67i/ypt1Fw6XdKu2KXVXoKiOWxZKc2XswK6lsOYA0uMia6ShPdDQE0Q6/6vmwpPnqlAKyhY/h1898k7Bju5+McQqXKnwPWTJ3vU9vaOmGCX1s/zBl/POviqp1eWDeASJHcjpNtIKnpcz4AuVhyBbs= 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=k0nzmYaG; 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="k0nzmYaG" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-358ed696623so2332464a91.0 for ; Mon, 30 Mar 2026 20:56:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774929410; x=1775534210; 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=01Ybf4qh+itt8ApsU1FLDGmh4NkFdR+YVHkIU4cnXuI=; b=k0nzmYaGXM4j15oDlmyoFsSxRbXURm9IpHyi6Nej6TuoVm+MPunv/sRAW/PJrDoFi7 e5IzXLfeY81R/djK6LY3gF2SNdyjxEn6geklO4MgHR0UHt6WIBi9A/6PIGhB/ijws7aD JHIkL9sVd3ovpg+6MT0UoYo1dpdYvFW0Uxa6YkFsEpbhlBiguWSeu30Z502unJAZv0Pl krSGR9PYPqZ6zpD98wFiAOGvCgWDJmpNuJxgsbYz+OFBbbhJdbbVDHwgX1nusizGS0eH VqzOjURY4GMMsEVUagRSsNbCticp0Wy4bKJ1GiuEnanI06j4eH7QkD9hV35Rqq2mRMXt y+8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774929410; x=1775534210; 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=01Ybf4qh+itt8ApsU1FLDGmh4NkFdR+YVHkIU4cnXuI=; b=ANPPKfV5wdBBTOsjxNBHjzUYd4wNOpyfcgBCQrdAyihorxqJ/fy1jQxQRnMol5Rij6 BQT5drj0UZjciyuA6czZOhY7dV5aJAXJBX8M/UsyTtuD9njIOHxT89Vp3e3WsEhHQOrl zzKHqTQdhCZgsFsJVbEATGBmjAMwlIAlknDFKWThCcQe6wUlnoqQopT2RYFNsLFxrl+u xd3P2dc3Ro1QYstU5jkp7mIxBcwE4gJmnfj7CEwH7gk/4NIvSWlZIwlDZJa5S07icf0E MpWcXe4z+4Ti2GvSwWO21o+nCWRqes7f9ujLuykl806BdGjTWh/TiM75fTJM+FWTy2k1 15Wg== X-Forwarded-Encrypted: i=1; AJvYcCVtE80VQndOHgCgb0ev8jSnR7JcIeyvuErK3lhV/m0jaMPhtFIPrXK21E27TCSAMvrmzLeIpzr1yhdCewA=@vger.kernel.org X-Gm-Message-State: AOJu0YzL3ZFnXnD/MT3JgxUGmiqA6AvGdUFZrYk/McYw3jZN+rHepLpz DBWmdYC/vRIW3eX6SIeXQoLhgbWJsgIh/xhU/kfX0FIeqt3DGs9gyoxIlEH2CsRED8cv1g== X-Gm-Gg: ATEYQzyCn7NfaBaFm4h1tyrUwKeOxR6tqf40qYiESPnJWJej1osbLqF+Im+2/ZPndls N5qWojfGfX7jc4lh3uBkvqml68q6gKsjGfYbmHKdQvXUT6+Uje86Y9H7x2DzJNb1hScbaSAw3LU LtO8nS8jTCQtWMgIWEbBPu/aFmiwPwVq/yhNeWpHGMi08Cock95SKg99VR3ALlHNsywJJTaLcr9 ipclFaX6K+iOX5ykLmQAbymvnOQmweMP/VuYqpELz6jYJM2c2Y844FIxivAgwOWij+9cxEk1spi gcEVdOFXXvFUOFIwARKuaAQdzNPt0tKqv2ZNqeFdkD3i2BjSw2ldJgf4E3rZJ53rAV7sGLxfY9x AjKlnIHnTEMvn+/cJl911BUlyzzMEzQ2tbJGItTauEu76fHkhqGgylcakBRVhCw6vW5ZtKZnVg8 nCWB/PS8TprdeNRcrDh2mP8qF7SyE2Bvbm2JdTd9qTHlarBV9s+etJjwxWHVjmT06WoSiROC1ej CdxQfxa2s33tMN80i0a8Gd7DI6ys2OVVTFMs8R7vusG/yFDFvA= X-Received: by 2002:a17:902:ecd0:b0:2b0:606b:6fd3 with SMTP id d9443c01a7336-2b0cdc1026fmr162439575ad.5.1774929409660; Mon, 30 Mar 2026 20:56:49 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa ([240e:34c:5765:500:c92f:4f4e:9953:45b7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b24266e487sm94680625ad.24.2026.03.30.20.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2026 20:56:49 -0700 (PDT) From: Hangbin Liu Date: Tue, 31 Mar 2026 11:56:12 +0800 Subject: [PATCH net-next 2/4] 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: <20260331-b4-ynl_ethtool-v1-2-dda2a9b55df8@gmail.com> References: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@gmail.com> In-Reply-To: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@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/pyynl/ethtool.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/net/ynl/pyynl/ethtool.py b/tools/net/ynl/pyynl/ethtool.py index 8bf234d594b3..6c50368de967 100755 --- a/tools/net/ynl/pyynl/ethtool.py +++ b/tools/net/ynl/pyynl/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 Wed Apr 1 23:46:38 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 D217C277C81 for ; Tue, 31 Mar 2026 03:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774929419; cv=none; b=MR0UDYc8sK+hxrFMqQyhNvOKW6fR1/xDTQbj1hGa6TKRuwHQvr0q+eMRncAIqR+LQigqeUCHbRNxKtH28ffx8MvC4mxuKRewaD6f90AdzesZIOxvYELvjNzwhoe6ZPvnUI3/pBUH3mjBExnz/n9ir1xkhxA3IZGXxfaDADE+sHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774929419; c=relaxed/simple; bh=sBpTeIDTxFTEcP1EdffM+/HbnMaP4LD5XXijFqb4WO4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IigWw3Yn+Zr1xOJH7F6+DaOHwtArgP3wQDUscyAFnbClL5SDupd2GE9llopAJu0LMYVAyrTdACelzzNkcgWV+6Lm1RDbcehJWbw3y/FvBTj9I2LxBfM7qr6PoPLUjqn5rOpj2w0YCAEN5/rfS5E3GGu+JizKGNHYTXYKY0WEpLQ= 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=GwmN9fp3; arc=none smtp.client-ip=209.85.214.182 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="GwmN9fp3" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2b25cf1b5f0so6038595ad.3 for ; Mon, 30 Mar 2026 20:56:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774929418; x=1775534218; 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=9gJ33OB4rjx34cR+Fv1tlLCTXuTAsGru5JzrTqHdTao=; b=GwmN9fp39wdt/IxLIBbfJcb+sYUVSrctUVc+poyxZ1aLDq8MTNL0Aa1o58JL3vprZW ZW4++IOUw6MSwmJRG3A2EbqN/P+XR9DwZREB168enQ3i8nc5IrCrGUlYyX59KnzZ+JS+ +7XfjOaITTV2FA1F9UIqOZ9zsnI87EVhKUOKNCl6Fmoj47aVEL70wERNWF+2mUHXhd3A XLDw+KVC4ZVWsTkO8YiF3K+qTitGPbxV2QRMif69DVzIAH9DBVPduu303S/5JD+8MPBF WlBap3AUuqKuxO+WDbQDzvuuG6e54m5kQ0Y8XoNidGO3hSPOfu9Vz0qq1fZ+IERIk0zY Bd8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774929418; x=1775534218; 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=9gJ33OB4rjx34cR+Fv1tlLCTXuTAsGru5JzrTqHdTao=; b=tZJvlhekXGKJlZ5zaF7a/IMWFXEKx3TkDrY63DcCmeJ1Xm9jvrEUHjcwofdL/z6ztl viW0dGJOmaYtlxFMtXDoVpvJ7DximGL2n6PY92uqmjxSA+/X92cBGTy34UPWNNx6ZOaA T1YHOwHwFMYcDQoZI/lhYqkA3GEqfe6nc6ZsQAA1cBA9DUZhbWioA58952HtAuqbPJ6W i52tG0ivgjfxoM+k08lxHXlQwiKLC6bnoHpByKXpPMMqmYqdUEuq5lg79Wbz1tC8ehe4 EGV4RbTZg4x1DAz2IjS1qYxlP8o5h9Rjig6aJRivKUkr9dYnOP86hujF1DrfozwMp04/ X7Cg== X-Forwarded-Encrypted: i=1; AJvYcCWY+tOED5lUVYoIOEuooe1Tj9QMYoko2v0FLi7nSvNl61GwGAUKf0tSNeA0rLtnniW0mIGG8xMwGTotXrI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxt+89wns/ueNfwqpxEHEe8KOBe3VsqMWuiEt4QsW4YdtRvYaik xFweuZEpaSOb54U4475MRkIB4UOoY2bXTlbqfy6aV4YhDG4vFH0sQ1+2S2ZAi8IP2H2ajw== X-Gm-Gg: ATEYQzyQlz2nmbSJSIcaC1Ypspvjs3oFTL+oRJufPfAbxTu0rqkLQCMSpDdXxenNZir tmTZ7flIB8z97VUr53VOnaoKQbtWwPt/lFQ+IxfIzjNal+0TFEjA2bROflImJzSjf3qPNJkyjIX 2rl+XJR/uCtGUEGZc7f9W2+m8DXrsYxJ+DUjQrJB3F7AacyPCmN/zJ9z/vEN0OIhammb6E2qnXh TneKceGcCl4IRRXqz9KZW2/cmO2h3QszE7TCorLA1h7Rm+cClP0syqgtADqhBRe+t6pG0NVPhTa cbLsw4nzsHceKtZjCxwsR7xu0oAkKtDBWtT3PUOyfeOgrxlcPR5ly2+uOyFtMSRkZunjQQ+NzYw sYNSi1kesZxqsJLINRyfT14htrU9YJP3PfqNvfAJCUyPKuvVkrNBfjtd7gbRpP74au1Fbkbf268 0HPWe5SSB8tu95rShUISksiKrwhFSayWfrUhrgPjv6nPnw7w5LN2JTfwOujoG1RIpqktKZ3QHBB oXhEg0ghDFsQhmZEPgIhjG9IHzjunYqeB9UB615nJZy6IYL428= X-Received: by 2002:a17:903:1aab:b0:2b2:539b:d29a with SMTP id d9443c01a7336-2b2539bd632mr62814925ad.23.1774929418137; Mon, 30 Mar 2026 20:56:58 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa ([240e:34c:5765:500:c92f:4f4e:9953:45b7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b24266e487sm94680625ad.24.2026.03.30.20.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2026 20:56:57 -0700 (PDT) From: Hangbin Liu Date: Tue, 31 Mar 2026 11:56:13 +0800 Subject: [PATCH net-next 3/4] ethtool: strset: check nla_len overflow before nla_nest_end 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: <20260331-b4-ynl_ethtool-v1-3-dda2a9b55df8@gmail.com> References: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@gmail.com> In-Reply-To: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@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 checking whether the size of strings_attr would exceed U16_MAX after all strings have been written, and give up nla put if so. Signed-off-by: Hangbin Liu --- net/ethtool/strset.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/ethtool/strset.c b/net/ethtool/strset.c index f6a67109beda..9c502b290f5c 100644 --- a/net/ethtool/strset.c +++ b/net/ethtool/strset.c @@ -441,6 +441,10 @@ static int strset_fill_set(struct sk_buff *skb, if (strset_fill_string(skb, set_info, i) < 0) goto nla_put_failure; } + + if (skb_tail_pointer(skb) - (unsigned char *)strings_attr > U16_MAX) + goto nla_put_failure; + nla_nest_end(skb, strings_attr); } =20 --=20 Git-155) From nobody Wed Apr 1 23:46:38 2026 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 AE44928468E for ; Tue, 31 Mar 2026 03:57:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774929428; cv=none; b=RPtThBf6Ld7QVRG1XiVCsItu6ZikvVEKYCfYd3TSLA/NjGOzB24/G5rNJC9s5qF41LOIxqyOFEfkdb6GOSvM8TtjhZ50lw2vR1vh49vsUcjOor1tMJwillX34KIBjyatdOngYCUWmYp/mUhAP4jrMWmWpWQnPbbzNXaiFgXEaBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774929428; c=relaxed/simple; bh=MKlnOkMzX+oq1WW0maV3Su1eTE5/Q6WgY2md3Hs/x2k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Nr1gF4d3hVwN4eYlXqRtVsaK3EyPkSDOUsLTnnpeSHoZEDiNrdZp8MaiYRFaVDCnBis/hZYcpmKrb3CNNhZIy2kQUqH2zXmVINWXnk5O/aSr8sMJN7EQOX9d2SA8Pt8WyLMQVkBULxrV+CzUzwS1oO43mW3FGBldplcH4b0cJk8= 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=Sj20Yv4V; arc=none smtp.client-ip=209.85.214.174 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="Sj20Yv4V" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2b24fede2acso12415715ad.3 for ; Mon, 30 Mar 2026 20:57:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774929427; x=1775534227; 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=XqQrrFc2/Gtic83J7TRLhKhXWW3jOenRMDXaQ79Hua4=; b=Sj20Yv4V/5L3DMaRt3mHC94faIpMJDaXNTRaSMsLxmgUqrh+ifiRwNf6Its2ndvXza NMNv/d4Sv1+QZzCjjd/O1jYmgiNiBKaLyejEzC7BiUAppB+rItiin48cBdNav6YIeD5P zLfwiZKOYC7aBThN3igokIMLq9yq1y7J2tIdpLWLHCbnPFN9BJ1QKIQT5fJhA1Jv73qg mQq6YDyKzE4ME0FvsiHC9e6x1hf+CWnr/j1j12UnoTgs0ATAdT3PvWpDGz1S3u3QdTYJ WKaUOgdyYCVD+gAj1JesFpeIq0VZuXfR2n8BVK/P/ysQwNveE0F0UeoBTJFd2Hfoo93e IrSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774929427; x=1775534227; 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=XqQrrFc2/Gtic83J7TRLhKhXWW3jOenRMDXaQ79Hua4=; b=Gk/Z0bxgK99ofCvam2jcVLiQ5sfNVBPkDMrMKhMukrj/k+FadRDweQjbiHL9ShoLAy O3xi9WEzE0dx7WgLtiz4TseAtshaQ6K9UlLoUgNWCBayAQN38NOTUnwf0hQiP+a6s4N9 nygYwfmRiBac+4bJ+s9YUMdJmy3npiBrGrG0ZXhYM8RFLzOXhJfB5Y2//doieVobnLW/ mAP/U7yIpdN67ifkJDUMLM1Bmx07q+FV1ZrWLT6HAeV9aujVFifsIa1Khp9T71RswPbe ewn4fZiG3NAEAFxxaZE7I7r6LFhmAEnrCtE0xPPD559cGrDGpCseU2Ql91zgNPP9WPtL y7DQ== X-Forwarded-Encrypted: i=1; AJvYcCVWYU4RUdmsEr8Lt5eAwMilCQlA+xGYkH/AJ++Ksbb/sGLT2oPCRpHPM6eJqf9Q81AAKjm7ulZRQRwsgVc=@vger.kernel.org X-Gm-Message-State: AOJu0YwYL5hySSX9i7ELsYIHVGc6N4UYKfSBJJ+MPuzdq4KGbiqOKIbg U6IXuA03Aqdc9Qclj+57L56+V49fXGrjfirBQg8x+xktIIZkBk95AdoQSpq82uTY84wDWw== X-Gm-Gg: ATEYQzwNtL1ta+3NGEkSMxkaHQ3ICrKy9w2QJulZvcr/mfPDDx3nyLedkJNvH6icJZv JJDQsyQN0jkWACO1pAV6yt1hWWUJ/MgtlLnJtvSE3+PBGFV164zDIG3Wwqlvh4LIrjbcSYBtFoi /83WwhH1f3On9o7ZzsPU+m5fldAVg8FB3LdX2bn9S4H5NDlvh8ef9SfVm3Z/T41LEYcHNyJhgaA 1f6MKKcg7+eViydEprrkLBsKnSRqusEnGrZ3088LIbcxDZPU0wegPFj4h3NOTv06KrglCe0L3RE 5fayoNK2OQHIggRU5+41MXDopeQsPiEc61JV2gFC9bQId2cOHcaMrKXLOwGHDVtXXSgUVYNGgPv DlNxYg7y3L+2kbLhaT11AaUXr/ZcOIqGn8j+uL4S/JALWE+fpxkLZzRMpn5Hj/qckYZcsD5etdF uy85ACl9YPr7jfmOXHJUTw+IeO7KSlwOptGVjL+wcsh/sGQdngWCug7Jua+uRxsOWOapuz4NrPP ffNEIoX9/vv7zn5Jxwe1wevGXxxKKDjJoIEuGKrNHWCjDbYG/U= X-Received: by 2002:a17:902:e54f:b0:2b0:65b8:b5b4 with SMTP id d9443c01a7336-2b0cdd830d7mr150042965ad.39.1774929426743; Mon, 30 Mar 2026 20:57:06 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa ([240e:34c:5765:500:c92f:4f4e:9953:45b7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b24266e487sm94680625ad.24.2026.03.30.20.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2026 20:57:06 -0700 (PDT) From: Hangbin Liu Date: Tue, 31 Mar 2026 11:56:14 +0800 Subject: [PATCH net-next 4/4] netlink: warn on nla_len overflow in nla_nest_end() 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: <20260331-b4-ynl_ethtool-v1-4-dda2a9b55df8@gmail.com> References: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@gmail.com> In-Reply-To: <20260331-b4-ynl_ethtool-v1-0-dda2a9b55df8@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 this is unlikely to happen, to avoid unnecessary checking every time on the production system, add a DEBUG_NET_WARN_ON_ONCE() before the assignment to make this overflow visible in the debug kernel log. Signed-off-by: Hangbin Liu --- include/net/netlink.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/net/netlink.h b/include/net/netlink.h index 1a8356ca4b78..00ea52dc08c4 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -2260,6 +2260,7 @@ static inline struct nlattr *nla_nest_start(struct sk= _buff *skb, int attrtype) */ static inline int nla_nest_end(struct sk_buff *skb, struct nlattr *start) { + DEBUG_NET_WARN_ON_ONCE(skb_tail_pointer(skb) - (unsigned char *)start > U= 16_MAX); start->nla_len =3D skb_tail_pointer(skb) - (unsigned char *)start; return skb->len; } --=20 Git-155)