From patchwork Thu Feb 27 13:55:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994548 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1700231CB0; Thu, 27 Feb 2025 13:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664604; cv=none; b=ousyISuwf3l40y5DeEttldkvwc3kdDAYF0peO7hmnKW3A4U6JZoMkNLT0+QczlHo/2NSNa+zx46M280yaZEIVCniTCttQlyUESTo4RnyevPS2YzZfvkrQ6tGbrVq2UqqO1wjiGcfSSKJPH47uDR8AbJ9Pqrzhb0QvtgoTxWNCSM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664604; c=relaxed/simple; bh=JBwsIE0G5PpZHp9Ig3VCLqseKURIwGxoVhHIk/enk0U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HHcOZ3QcHlO73jiPWMCE7xEyNsFacHxYCTdfJNv+apTRuG6aRZdWMOFrg/jiopENhwkO7w5OU5l/zdc5q42w8P/E9saW1+vQQeRYO5nU//1B4YPudxfhQalDZWRCrqli9Dmdz0k4SOQVJXNkkqpwKDIvdjpsrjQFMl+eszrzXp0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=PXmbGoJ4; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="PXmbGoJ4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664574; x=1741269374; i=ps.report@gmx.net; bh=JBwsIE0G5PpZHp9Ig3VCLqseKURIwGxoVhHIk/enk0U=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=PXmbGoJ4xvP3FYTYMD+6fnqwEwZlRSdv/eB6h20nUhsenbbAp7HVAgYizrpnUwnD eBB2kv9ltFNBOb/EVSCc+d1ULgXnCuG+8DdMWf3d1IFWzL34B6u0hcjmgS5JPsS4n +9+VpUWO6k6K9MMutfu+HV17mYMH1dHdJQk1Jc7FleH45iX0rpEgnYCMkvj6xThBI methOKQAeeTGbXvXaujkDpNYMpSJxWUUQVZI54GWu+Ybi41omdwMEjqCM7kp5qqSw NSuPvJKJ5owj8y97bGK+QkpusBXFA1IyxLaPnT3UcbZlVJ8trSwO7fMoQZBawdvIx CGnuuHrcTCmtJLkHBQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MK3Vu-1tZoiB3KbW-00Yuhz; Thu, 27 Feb 2025 14:56:13 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 1/8] net: pktgen: fix mix of int/long Date: Thu, 27 Feb 2025 14:55:57 +0100 Message-ID: <20250227135604.40024-2-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:5YJH+RtdYpCMVRma0vwrNGDmn4wLX5z9OCQI32l2SiRnkV2muB4 uWg6/ab9eQ1PfVIkApLShYyhvQvMmPaNNackEW+hlSR7Y0AlwWJkyJHVH+E9UwoimtzdDkx 2zdYaAYuLwQYSICKhYrI+qWhp4giV8yJBKdQUUgjFjBoeJ1kPzm1LgI+5OUIsL1CeiL8fYs h4taQFhSSwDGTg0XFj8Hg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:zJSqOY/K9Go=;YtZ3qdVMbsdIxYaQWyG+y2M72mY U2PtJQ/ltsCXuXQPkT3/5p5jBoo3EuKls+LN7kCrsxwznCfUPGv56FWeFjoNZyPmb1B4N9tFO VTggIBPQ30iEBHdOpwgD499AmFiZtPtPhPTqryxQz/6BbbWvT/SP4V3hDCjcQs3pIZCv+pmi2 b+vtGiUrcUZu2ebDzyGZhlr78s7qLg1z67+0GOuzybsg0NU2jF1ObzPIH6i9/s6TttAN1S1yb DAVUxILL1t2yrszepU64V75Jbp9iPyOi+vKXFNYuI8vnnjal2SBNPGjO29Z42bFuljKqENf/5 1ef5VE8SrCCIZ+n1UovAYr3O0Zhg/oEi/bI4YzKFNBR/fEPMBXhY9z+BI4FTcBDroTPNCjI/t MZx5JTcQDi/d4b5PUJjtIomvFQwGXRpl6o57sdgWeY5Ie2zqTS8P0pyfQGcLkwMKxBS8hrZRJ WRJ9EmNSn1G5eC6U5f5BpVohgEc61vZYQVMmziKVW+pHdoxP3dlv5/VrmlqfalxKtNa2G9g8b mD0qpB/5WWn+80Lqg/5/S+hOB78220A0vVl+Apn6+kzoldDItluwdtB1F4jhnk2eVrnIN4mrK fZ+RcKgQm0E+yxsJ/SubycKcGA5YAWgeX+Z69MQfTaBDgytGuLPwCQipPXt9ShuEop7GRO5rn PGhNbNSKi4tLoT1tfD5De+QH+mRTsXP4BYpZKAKlgEseUsN4fYQUR6tyhsUzugWZcOAviO+8S dfm5QCuIhiNrAlg6adYl7siCsgg8RSbaCLsBCLSbCiw6HUPzo8iRoxm1eLsFkENgVRaNDkUZH j6teZPE0lSQNUnzXcb591qvQTa1DDWCvGWg6xdwtBPPLkQ/SUEG71H51CJLMBdldz2ewmumxC FIQq6Dx0QktR7QpUv3jpUAZX/V5qHR0vKVFeOGhuJ+VmwOsSrRq1Q/c7iTDHN2qZ8PD9SqGwM rPpqgCLBDAiv6KehI3yI91g84yxnIwjfV9bEePXk1vIQQmR+I9kdN+dY5H+MyYpmBPLcBufze 9SeoVQC8pJ1CIB7mEMQzo8FFvrmwmfptTPEPqfWsprPWPX8/90dq97qU0aLtA5t2VzsUCEuA+ FTtdXR2/kH4TmVag+GgpL1ISrw5nlgmLcvcCGt2Ie5d8tf9GpSi4DNd1yoVZcI28igdwJojmC M28oirguyvNqVQ8Uq1I1Sea+DSK3AkCff35GeFVU42I6/p6Cx2p7/BFXKQ69mXMmWQgwfVbhy ugxHKPKx4EpFKWVbF8TKoPauRCulmr/l0BKGr0Pzb2T+xi1AMYFbpyn3Desx9Gtur/1qtJdxA 8GekFMwYca6eYfk2AGFSnGRh/v6pYFSJr4sH77KJ452ySjZgqIQRzxHpOxEufhD5jVGRzc/lE G+9Zhktd1JTyemPq9nEFgjFTD+HnK8bN9B7BTTYnfFSRLSlbbSyaa9G/jP8LZ+iPWTtVuV/qs kPF981w== Fix mix of int/long (and multiple conversion from/to) by using consequently size_t for i and max and ssize_t for len and adjust function signatures of hex32_arg(), count_trail_chars(), num_arg() and strn_len() accordingly. Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - add rev-by Simon Horman (this time for real) Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - adjust to dropped patch 'net: pktgen: use defines for the various dec/hex number parsing digits lengths' - add rev-by Simon Horman - fix line break (suggested by Simon Horman) Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - instead of align to most common pattern (int) adjust all usages to size_t for i and max and ssize_t for len and adjust function signatures of hex32_arg(), count_trail_chars(), num_arg() and strn_len() accordingly - respect reverse xmas tree order for local variable declarations (where possible without too much code churn) - update subject line and patch description - fix checkpatch warning '"foo * bar" should be "foo *bar"' for count_trail_chars() and strn_len() Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 402e01a2ce19..4775cdd2ae1c 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -744,10 +744,11 @@ static int pktgen_if_show(struct seq_file *seq, void *v) } -static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, - __u32 *num) +static ssize_t hex32_arg(const char __user *user_buffer, size_t maxlen, + __u32 *num) { - int i = 0; + size_t i = 0; + *num = 0; for (; i < maxlen; i++) { @@ -766,10 +767,9 @@ static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, return i; } -static int count_trail_chars(const char __user * user_buffer, - unsigned int maxlen) +static ssize_t count_trail_chars(const char __user *user_buffer, size_t maxlen) { - int i; + size_t i; for (i = 0; i < maxlen; i++) { char c; @@ -791,10 +791,10 @@ static int count_trail_chars(const char __user * user_buffer, return i; } -static long num_arg(const char __user *user_buffer, unsigned long maxlen, - unsigned long *num) +static ssize_t num_arg(const char __user *user_buffer, size_t maxlen, + unsigned long *num) { - int i; + size_t i; *num = 0; for (i = 0; i < maxlen; i++) { @@ -810,9 +810,9 @@ static long num_arg(const char __user *user_buffer, unsigned long maxlen, return i; } -static int strn_len(const char __user * user_buffer, unsigned int maxlen) +static ssize_t strn_len(const char __user *user_buffer, size_t maxlen) { - int i; + size_t i; for (i = 0; i < maxlen; i++) { char c; @@ -842,9 +842,9 @@ static int strn_len(const char __user * user_buffer, unsigned int maxlen) static ssize_t get_imix_entries(const char __user *buffer, struct pktgen_dev *pkt_dev) { - const int max_digits = 10; - int i = 0; - long len; + const size_t max_digits = 10; + size_t i = 0; + ssize_t len; char c; pkt_dev->n_imix_entries = 0; @@ -893,9 +893,9 @@ static ssize_t get_imix_entries(const char __user *buffer, static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) { unsigned int n = 0; + size_t i = 0; + ssize_t len; char c; - ssize_t i = 0; - int len; pkt_dev->nr_labels = 0; do { @@ -954,7 +954,8 @@ static ssize_t pktgen_if_write(struct file *file, { struct seq_file *seq = file->private_data; struct pktgen_dev *pkt_dev = seq->private; - int i, max, len; + size_t i, max; + ssize_t len; char name[16], valstr[32]; unsigned long value = 0; char *pg_result = NULL; @@ -1881,7 +1882,8 @@ static ssize_t pktgen_thread_write(struct file *file, { struct seq_file *seq = file->private_data; struct pktgen_thread *t = seq->private; - int i, max, len, ret; + size_t i, max; + ssize_t len, ret; char name[40]; char *pg_result; From patchwork Thu Feb 27 13:55:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994543 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39F03231A2D; Thu, 27 Feb 2025 13:56:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664586; cv=none; b=gjugJrddMT4of6CkhX+71H1SRcemexo0mq60Olp7D7OODhMRkqR2YOSia5kvebQKF4t3Vwb8o85uPOui5vYHAb2w+aRU8bMHy5plwU5bWui4UXM9AuFB9PodnAchgeOmnX2kamxP4Cj49RCE1mZtalj3Ua1DMbqHAIVpkveT09Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664586; c=relaxed/simple; bh=JgGQVVAhjrzOOCs+tFIJPn5/RIQ8L4OMx++skv9az9E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hhLFuS/MIdIsJ8eOQz8pHCOvxkwcaqnGC8I+4QrX+lQI7VsC1qMV4B8Ikml82vXY2uhxtpEqL0bF+Yyj4Jl6q63BmJpQPqm6FAO3PRM8FpPdem3Ff3Go/g8LQRxHKKsFLqT5d3CfuTx9Be/76cnGkzLPzg+4dCyHxQbtuS7MQqg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=GhtadAWS; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="GhtadAWS" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664574; x=1741269374; i=ps.report@gmx.net; bh=JgGQVVAhjrzOOCs+tFIJPn5/RIQ8L4OMx++skv9az9E=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=GhtadAWSYXO9ggz/SCi8mD8APvIGdJhbi2m7MJQJl/m2VLwEFdbW85c0VmoZhAcO pAr6JB6j4PdBG44xscw7y91jz6rbzz2m7+dZPBt8gzPdGAxgt8/iInzE+a82TOFAh kFriNiUQnbaqyUDYqvGbmTVzPkl75nfMZFDaQs0pOrPZN+PCXKfHsBZ8QKP2gizRB LxGAGt0uJXTdS7UPtVcHEVDe5D/My/1d47vv+uhCIuuG2wG9lTWGSiZFa0e9eITK2 7Oxl2jMF3eqThwpsZl73815O3p2wzbYxg9yZvNrL3e6JgcU/H8yk3mTxTfoIvYvBw GUg/dEEHC485rZB/Ag== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M72oB-1twB4z0zXj-00D6Yw; Thu, 27 Feb 2025 14:56:14 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 2/8] net: pktgen: remove extra tmp variable (re-use len instead) Date: Thu, 27 Feb 2025 14:55:58 +0100 Message-ID: <20250227135604.40024-3-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:X36GMHKlFQYWbPGzh0isIFHJJaFo6jhBUDudzhYm3OOXtpqURVk svPTMi+Z2UB6WZ4LkITVRp+P8PtJSxMknZXurPvcHD6FJCEiNBH2v/Z1v+bT+L0S3js+F82 CHTOyi/ZuRA97fIF9MXRUeLnb3MUau+msB8x3vOBT+iQW0xpt2zlGqTfZ5avqx3Pu9qRGWT 33b2PG2eBSACgX9erVOJg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:QB+H4xaP0Kc=;orwU92IZ52FMWIGSfgV2i8UK5aQ ScyhfYVlPsBc52p7OUeNvlPLJkJiFpOCnnLDm8wlWSnzKyFoCbgjfpq9xXCA3LRigvXZMNGzD POrOL8jKNTiuJnvtamvZs5Hsqqlt/kmnnRyof9hYQK1wR/1qn07QbYwDkWZcRWjZd434jhQQU JcQqQC7irNxHNCq+teM3SKkxjv63YmpFHXj7TaKaOyXECFYxhhR4ILovtGRuSYKpupiBOCtN1 3/zyQ3J0JzniH7Lh/+fs9JeJMjV6VLTUyCX+CgxcovMXEuukN02k8Do7xHETbIV3Ghuc+T/E9 cBnWcuVElKp9L6AqYRIEO+uc52OOmLExQjqPfBgNq6VVvs6QtUMAl+2qW/I1yQ8V601sF0mRI +ImtbEffwkgJ9sTxvAMbUpXVNplQdXnLOempOkIHw0/haRTEIwObn0rK5PHXJX9gXSbfB8Uz2 r9g78myxn7dmZbHTDae57GTZbmLVN4jxSFxcJYpEn9sSTLcHQcDZyhChmbeNMMlJebRzswR89 U5ES67Z3G7bcWegtzrBtZw/RtF/AgCZOXv8LA/UYy2cFxnCEcLQkuFVPXcWTSzPXehGuUTFMq 6aK1V399KrxzwGgpRaMpuMk1YVAfZ6+b4tHZcLSeL4U6HdBJ0PVdyfel66lVDk9V6DO54a4wl WHJDfbGwnioGGxEJnt9TX2D/LkZe/gwTJ2gdEs6V6GSd4SZB/+qcQCLyU9twcPYn3VcgtD+pQ BgRVQsvaQUH6M16OqqkYN/z3VBUQxfKDjtYZeesFMSCSJs/oyueMkRE693uG2UziKATUfg7fT m3rOZSSgUN5MUw6HG7D5AKH+jWlUiOLsUiK/WLDSb48PYfwHfIo8d/cK9ksn7Dwgs4+pS+CwP pXClMTHA/+hxXaG+bdZplrjJnDORVsDAhFMDx0MnFVykEkM3NbgcpzHhZGihfsPg3ETvU0HwO pRm58TiiDiqQFLJT0PT97LRn+JaumAYUAEWjN5nv+G+5b7V0qJ/QNrbn0UFi6E27021D7sHwW WpYQW0gTOUgpQIyq1qHRGc8POTKo5RjBWt9Nui5hTXjYVg/eZ2tFWJDHGyCEHKvFbi1f5EkhH OcJLVztzIoSN/gCW+GfmRcTVqsZ/sIgrxLgwEM25VyRrfPNFkC0nN1kYMafy/ODA3fbpbn2NH YwgiDvA+Sy9CYqVNsGC/y3jSSag9e7c7iR+uhaSG2EmWNccgWHeXpTk8Tmgkuk4ziTVA1sqEw zUTzPwFyta3Lt1clTwJQOZ/kLc3a2kqbEzWsj1v7LzUvrXBHxe1so3EU+GnS+1Xz1yknxh358 VsJjkoPxe/4PeikkTeJd+NoaQ9IZJgRNZYL/DGHlh2t1eBsO4kGJCwbzk4a7YJhhI9sKKeEts zZ05x5me4hj+1MZcEwP2K+jpvxf2h3m5guED8c99PT4dpUZBWFT+qTB6UYE4We2bj9ExQ467m doq8cog== Remove extra tmp variable in pktgen_if_write (re-use len instead). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - no changes Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - no changes Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - add rev-by Simon Horman Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 4775cdd2ae1c..9a5fc1298bd3 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -959,7 +959,6 @@ static ssize_t pktgen_if_write(struct file *file, char name[16], valstr[32]; unsigned long value = 0; char *pg_result = NULL; - int tmp = 0; char buf[128]; pg_result = &(pkt_dev->result[0]); @@ -970,12 +969,12 @@ static ssize_t pktgen_if_write(struct file *file, } max = count; - tmp = count_trail_chars(user_buffer, max); - if (tmp < 0) { + len = count_trail_chars(user_buffer, max); + if (len < 0) { pr_warn("illegal format\n"); - return tmp; + return len; } - i = tmp; + i = len; /* Read variable name */ From patchwork Thu Feb 27 13:55:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994541 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C15C342C0B; Thu, 27 Feb 2025 13:56:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664580; cv=none; b=l+XRr9zDeqDfLE1im4ZBWTj3Prm+D+zuOxvleheiPODFXlbCJTW7EY+anJjb/UgxqQnoASBonoN+gX9Rbi8Iwuz4gUzCY2YJ/GB0BF1uOZJsmyfLEzENgvm9Skp0vHh8+/CR86OvEHEZyjbc3avo9B4oIOGaqNrTI/5WjXv+/eg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664580; c=relaxed/simple; bh=6YhuMD+fZp15NlYpzOupLk0ws9PYq1Voacu06J0Qh2E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZJ7XB+kbbUJgS/1hKR3nT31ppXc9gJe72U40Obio5zGWusCLbqU58c0CW+u8V1yoZm7prb1cYhPZ/gKpVQB3FBFbq//UxgqH5U1ya2o6MV3UKqM7RygCAUI9qUrQK7Kpf+e8l0Lg8O1s1CokX53Rzy7GuEKix1+06WdaKdxFZso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=lvjC/kcM; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="lvjC/kcM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664574; x=1741269374; i=ps.report@gmx.net; bh=6YhuMD+fZp15NlYpzOupLk0ws9PYq1Voacu06J0Qh2E=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=lvjC/kcMwpbAjEwFKs6zxoDbniNDyzxr2fMTAjgACe4M2sLwLpeIZqz+Vh1i0Kd3 QZDkSN2v02WgKemDU+fzjokJsAq/gqaNk1TN9fVJ1gwuost+JH1miiLvdLyj0bzJg 4+FGYYHGWvl8Loxhj5zOkNHIEdHus3F2oxsPFvQHJJlKBcxdIfqzyx24rYeSdR31H i1O6VRBjr4T0yEmkaPrT4CO1RcuCy3X06kMqVzoEyGE94405DzhscKOiACiDf5g0V P+VA5YXdg45852VJH2R8iEl6ff8ftj316uYQmycqTpbMuby47KqNh6VQmNM8O9iGW hv11P2bqUEMMRZ2kuQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M4b1y-1tpIGO2kkw-00F2NT; Thu, 27 Feb 2025 14:56:14 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 3/8] net: pktgen: remove some superfluous variable initializing Date: Thu, 27 Feb 2025 14:55:59 +0100 Message-ID: <20250227135604.40024-4-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:EUIXcxlKZnX2/p/4jMa01w1aUMFkC6XFDOrlNn91juwz9cofZ1D gdl+8BnZhZSL7RY7CLN+Nd0YMid9W2/nCUqQVplpJLb5OrGd+8dtXL5epnohYroihgkaKg1 t3rTbfGAsFQ9lhcpoXdAg0kEmTN2UuF6jzigv8r4XElyHQPDVuUnB0a0cafoQ8WuY3c6uAA LrZG087Ui2F3evhbo51cg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:BkUoI9KaCRo=;zxEJzEjODqPk70w6cvO33JrWQcy +uwZeqZcivYV+bv/UsbgHHAA8uoiQ591PDaNJDMoNCwgTJcKaHsBPfte+5qjeosZVtmLVOqiG B1nc53mQiT+K3nOOnbhrv0pBpHBVnadmshZCUdzI/xVafImlc2KnqmDqHSGN6OvcZiO8Fsnvd 5RnQRxJh8Nnx2KV1rKymbd53tzxvmjvZCiDGHf9FLtAeL1tf3GeG2OlJJy4bZQjL69jqPe6KX cvhxdm52OJvmVRStSLVaZ1rcXQvVfmtaXoOD3O2ETLw2pqFgF+tf21mwmcMOW9z0HJUqogY29 Uw0Oi8cC7IpybW5c727OgeJOnqH/Euh7RZnr9Mqyefyj2QGJl8oisfohUpHm7A9n/ctmHT8D8 DkV19xvdFP/BSASFBm9Ai9P551C7F3uZH/PLS1P2APjLNB5O11ITAOrRoJcGM8WwHD064rCeh F64l9PuNa/ZlrETMtoN6qhn3aDKokefL3PI1VbcCHtWBQ1X3S4YQmSmGxHYv9YOj3hFeERv4+ 5cbEaPi5VSF/CqOXZWT4/k6MxDNbssr7kTW/YiLq+g2Zlb5kFBj0h4m8ZM4lC2/Y94PC+cMiG dLC9YcsylsGj8yhtjsfOQQ26jsxV4qGBXyYqU9z/PBlkZRxh3tOrBUyB4+f3Epxq3FnHIbCAx YmtGIs4BlHKncKmf8OsQARFC0oyvQH9y6gmhM49jGbExWq9TGlvaRvVkACi6XqHqIFg8w260r MOEsGoA0dIBkKt7zYDdrWcETP6BdkkIUrtoivvlegBkku0/JVGIE7aR/Hs2D3oPIA60FBj2hV broGDqpORyIq5WI9LKQyxD3qxuhVma77nKEMm8bLo+LIGCKdtCat7r6JGwNRVlI/Dzh89Fc9o 6/aWvBfmbP2M5YjxEkaFVZtHIUK9STMNHySjwDKSpS4BnpY88SkcHUFOIcLMVEmfbmgAeVUKC q3Iq8DGMmlMSI3sAaT0HrqL9jo2RIQ4Hnk28AWgg0RqvX6+Ypr6QPw+rL1prw7owqLFfW01kR zoPs+oJJm7SeQPeBdMbSlwrZ5MFAh/lCcJg2cbpaIC4NeXFx0im6wS8ySd8agZPLzlorNyC6Y pk6xsZ6yVhBBOrVamQYz64c8NqOukajFYUhpulbulpq1TTeSXDiA9J9BIJSk6QRor5Wc2eymA sGVuZJ5WqbS+2j/ys5u2ViKTcfbESrnHf7KT8i051UjsJEdBXSN8s8U3i61ocBTaUvJibjRjs R23p/UAmjdGtWVdsrzNkVHJNNVBxchgLS21Mg5/KLchdf8RCFOlw0zVFYyiz5SpvcTMIjs6A/ Ikkkn0yfjhDUbaRVV5nV3faMwzx7fXFiR7jFWUPe2TShJFxRmoFUHMsdT5Ch8L83NR6dsvObg JhDP7Xc015Ag5F7OIRohnwtf4dYMXw/aVBDStBNkzNi3jjDdGFkj090ChZ Remove some superfluous variable initializing before hex32_arg call (as the same init is done here already). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - no changes Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - adjust to dropped patch 'net: pktgen: use defines for the various dec/hex number parsing digits lengths' Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - add rev-by Simon Horman Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 9a5fc1298bd3..b678b28dedae 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1785,7 +1785,7 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "tos")) { - __u32 tmp_value = 0; + __u32 tmp_value; len = hex32_arg(&user_buffer[i], 2, &tmp_value); if (len < 0) return len; @@ -1801,7 +1801,7 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "traffic_class")) { - __u32 tmp_value = 0; + __u32 tmp_value; len = hex32_arg(&user_buffer[i], 2, &tmp_value); if (len < 0) return len; From patchwork Thu Feb 27 13:56:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994546 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9201230242; Thu, 27 Feb 2025 13:56:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664590; cv=none; b=iKgF0T014pvsnEIPUwY4HLxh+hR3ZEQ5IE9x7lAOen8Tm0JC7Odahfltzn161LJrQc4DCTw5eAtR4z1fbQp41D9gZXoMHA75ttYTB8Hjpmkh2nEn5aAJqS8sL4Mk/STK9ECs28oAvcjQJNFQRNUTE2ju147QhzPU7jZ/A6X1EL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664590; c=relaxed/simple; bh=o+P2i21j+9UsvnQZ+LIn9djpyNgEp8G7gQneFzg00Q4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k+Fsbc4oDzbOFeuSlcLb/RXidVtOHt3+tifFAK+pjP2d+EPLB9zb5vvy5qwKrUlIlFOxhPUGshn/ia3btpW3ofnMSN2lL0pM0/uR+QX6aoKaRI+20PwEhCOrhxDYv9byht/wBh8NxS6DObOFWfcZoPZVK82nx/M+/6RyVKmZLJs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=qQpXi5D0; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="qQpXi5D0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664575; x=1741269375; i=ps.report@gmx.net; bh=o+P2i21j+9UsvnQZ+LIn9djpyNgEp8G7gQneFzg00Q4=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=qQpXi5D0NqpjNjOe+WIhApKFhvYSzRuppjSgY5pOIXm7HBUNjvUNAhyG0Qi80bxP wRWNcOdQL4tfVodGJJkB8p5d0RYi/QAOi8iZDIPnkSRwjH/Oz61rebMobf8p6oobl lJBHnzNePKB9NIb18YkV5v6PkXzoZEu2Zgofvj3uz2YevQFYgKU+GwTm4ccODfxJx CHimGBhsI4uD/YqZcaKJZJ4T+ZNEfOdu5v+NYzI2BeWvS0WIYuIRQ0yRaBf8hhNdc Nde6zALzLTBNC98mRv932n5OpoN6FV4RCRJBXEQ/xHMVEbrd2MaOutdE/qJ4gwdYo Stfn8zSgxgrxBjhBcQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MBDnC-1u0FXt0QeM-008Pax; Thu, 27 Feb 2025 14:56:15 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 4/8] net: pktgen: fix mpls maximum labels list parsing Date: Thu, 27 Feb 2025 14:56:00 +0100 Message-ID: <20250227135604.40024-5-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:hYU2LsKYU0iuOpOYvNQ6ecLiC2rPxBLxL7LFnrlSTqSYENmKnwT SuiHqPMq/oa8YAZoykYMWEWSOyZFexhh+b7B8cgysuaXrz+Q4DcfHKblutYmxBLQywEcb7m 9KZHobsyEf+1JMJEAXnp3GmR8qixyHp+AwvtgCSRFCrqQzdPsXYNaM1EG4b82Uv1pTuIXT3 AcmtGekFG3XPa99vIc7Uw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:h2YcoC9du70=;W6pA1Cl6bw2nK57S1x4lm/iBV+U K4Fi2qomBG0ml6di8OvPdjxREreVhQZlfzxPNzvCYtOMmPdnIxd77JRzeGPj1A2Ab6bpqrU9O 5/JhMMBDGZMACchm8Uh10upcBCsLRqB71h8vj/d7rPZ56Gb3WoPeua6E8h/OHyOykmogb5zro y4ewFoPyLXh9dDxBy902p9HGqKeGXlS7UobeFHKMMi2zOdxgiocRFTg/mVTotefPWx1lkmaSO fFj0EP5HwHR3Hu5dGqqImNq+g+NdQZZwhVGPzkuZ/+2M+hW2/WDzwOG1bQtIEc5mYcRYcXnTj JiVl+7qaLM6IiB5fAzFCwYrZMM4eWHGuYkUbZQQJkAJr0dQM3xx7ZoObk+RJnP0zgDP2sM+rN TWf/SuTP6bPmXedaLgQg/q+TkHuf2lE6GogTAnDEwrW3Ge0w606lWv77QRouN0JuTeoHJD9Vd YNRPHFeYy/QMCV/UHJ+GW3JvnO8PRLW/iwXb2lTNDwq33TiGCeEC9YHuemaTdOux4KpfnySF7 EGjEj/DWdUm3DibQc+OT+eqSFp1WdyQGOB9+tMyGRrjTyNqnws/QeOxAzKhYtsRHsHCs4a2B2 g002eNKfkcfv/mdE5CiaflTBAp4I+LJwSU4uiJ11NI5nqFzCPBUk5Kzuvx75jz4jiHe46fog1 KhX4zGC8qvOW52eXPTfg1EBJ/rLb9yLGmDPCQZlFxqTnPeIk/Pi2xJPjQZn1+7pEt1cnwdFvh yIIwTaaNtcHATmuHtEhuL7p+EHpb4oYn+/LXGSUCjHhtXoiZiv2jc3oybp4VtPHHYAwnIzNcU aOuwxZLR2BQFVgS1wjHSmT6k3kuS2vJe388d9Gs0C+KLiCuKMzP4x4I82c8NsM9KO++10NCZw yNEIv5IXhG6DCuh8A7csJxXBfyN1FwmsnfXJdJgeRgUye3FwTuPFb8Hxdo0Pwrev/chZK7GLh ZxX/LkuvAdBrX8KgmfZsYci3pdQelgY9NS/fjl81PfE22JMyghjdimzDukyZVKH0TK7skoOco v+0+6APVWldWLLCTAbQ+hnGXGqdRAY02aFQTsGo1njuc9npIxhMbjpgFBFQ+NZGWL8i8gr34f BAViwfEwligY4WxwKg+cwKebV7rPUqz/uRjHSFj2Nrtxd0u8RMXyr3eGPtMXrTN/5AxCVoBbt secMjLiLC4415JP775ad5zj8gZF4p/Q31NQqae0c/xHrDRjL73AH40BB3qht2JOcHniaA9rpT +TIzojMTP0ugrclR0Fv+PzEqPQBgB5OkrMQPCblfLvSI2vKJg3PGyLGRtUhO8n8WiMDJEyKZF tWw1wisOJFuiTXl1d1fdhRNlmVyM6lsvV7uo+jlawjVGFTPPzZBSaGWNl4bB6+cgefAjVhWQ6 KuksWwNUPYyv+R/+Q9qnM+cGJenvNzK7IWjvVxAidadn3X1cjapV/GkM5b Fix mpls maximum labels list parsing up to MAX_MPLS_LABELS entries (instead of up to MAX_MPLS_LABELS - 1). Addresses the following: $ echo "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f" > /proc/net/pktgen/lo\@0 -bash: echo: write error: Argument list too long Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - slightly rephrase commit message, omit '/16' (suggested by Paolo Abeni) Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - adjust to dropped patch 'net: pktgen: use defines for the various dec/hex number parsing digits lengths' - add rev-by Simon Horman Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - change patch description ('Fixes:' -> 'Addresses the following:', suggested by Simon Horman) Changes v3 -> v4 - new patch (factored out of patch 'net: pktgen: fix access outside of user given buffer in pktgen_if_write()') --- net/core/pktgen.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index b678b28dedae..def35a734d9d 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -900,6 +900,10 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) pkt_dev->nr_labels = 0; do { __u32 tmp; + + if (n >= MAX_MPLS_LABELS) + return -E2BIG; + len = hex32_arg(&buffer[i], 8, &tmp); if (len <= 0) return len; @@ -911,8 +915,6 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) return -EFAULT; i++; n++; - if (n >= MAX_MPLS_LABELS) - return -E2BIG; } while (c == ','); pkt_dev->nr_labels = n; From patchwork Thu Feb 27 13:56:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994544 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3E69232395; Thu, 27 Feb 2025 13:56:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664587; cv=none; b=uiGKToyjDfZLo5gGtNlHusYYuJJgSbhxpXSYtZO/FtGMwheN1lEedjnybOLnDpRKF/BOPqfnxPeP/ooZgvbSgidceUZWwgRk1OOg0by6/MgibXeAAEw2tDThP9koi8lbqgKR/yKkOBwTABR5hD1ota0xlgB+QJY5u3v+H/aEojI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664587; c=relaxed/simple; bh=VDnMvmdOQ95w3+tnjTnFV9ow8+wYbXM+TrEdSKragGA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kCUmjkOT1vtBkOc7baM32djv6IfupT02EecODiJ3TKF6+rdmyuURC5K8KF5gt2FdtsK8+cxwVhSnXtsm/RnCQRwzQZVdogTJ97IcP3gYhY81duA6aYCYEvioWvxnCyzqJSnmnRzkLysTk8tbo624KM5mcScA7Urhc7RpafsJDXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=cisEkVs2; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="cisEkVs2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664575; x=1741269375; i=ps.report@gmx.net; bh=VDnMvmdOQ95w3+tnjTnFV9ow8+wYbXM+TrEdSKragGA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=cisEkVs2kE1QuQtGDwxguTy/UQDYjPjnI/iFVUPUtcS5yUGtGT9G4TyTkFGkbPHM cThIYNED3qRK9JM7zsQYCUqW5DPoc5wD/VNBHCon8jvHLc4ASC7hJxSuEwoK9KbC5 MmvPFLzMvufvLDgOfbTIbGgmjIUkSwi5s9IR/zW6e84zdpWPRiV0dY5eQ00shBLEt Mari995NnkSJ4OKyL+vNAtPfhxuDuxCI7fgiI39tAWxm2soUcdDsYIf6VqzKfF5wN pSh0f6i2NA0PVs3b0odLCM5ZYQy+ELh3KBfYeoefZYAW4zwN/PTgR4WTqEhhwhMNJ kQRNG/EAKNiTQn1KPQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MLiCu-1tVyxj2Nf6-00V3tJ; Thu, 27 Feb 2025 14:56:15 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 5/8] net: pktgen: fix access outside of user given buffer in pktgen_if_write() Date: Thu, 27 Feb 2025 14:56:01 +0100 Message-ID: <20250227135604.40024-6-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:MGk+XeS0dhd5pMlTpiIvrhVPFQWMpSWe0K5NmGPLlP5A0xdMt7q HZvqX+JrwgzyRN7a8+a21xu+mDzPH/IwW+0a9o48aAw/9TWIfqwShxJ0CBsH07pX4zg0CrQ YOgorY9UKHoZmvgIH0ufgMRoBo1Q7o6umHev3NNYiyLz3cEn1F2DkrvgMhBsEPV44kS5D9E /qx7wwne2JXWJ7ajQjlGg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:NmMbAFvyKEs=;HFCXJwANRQwxJawncLUH+QB2RDO +SEXq9+FIlgXOzlpShd7dc3PLo1pJp7N1gCOi0zwvM3AkipMYM8ZLiFjxOmPDB2XwtErOIDB6 W6eSP3MxbUBvp8HT8rw6Ffs/+Cvv2wQ6tKmuqh4wU19VmUlJY7io5IeTUtnP/Oc+Ytz1iLs2I KOl5LJDii48e43gOD0jPxJRWx1LGYeDlUdKXpFmiouK+qx5cVIkGofkCUQZcIrf4SD0eURUpo n4Ie1HlLLLKUFyLY8A+Jw3uR5L6y2W62vCSRGiOEtVxWLxGjZ3eiX2JvAvb9Nsxq6VzNd90JV fixMrq8wCqhV81mWaYblduGkjxNBhDJKHNv3dLMOiruQGJOpRMY/wh85NkepnPq+HxYfWBSQa cKwlUniqsDFDFRRFBvA/tGRrBY3OqLfr4D4oNvxSDYQCRtuAcVdxfmYLtWIVVG4hlXUgsgDd/ Ijucz6Ysx9KfhllfXooIa8l9b3BaiNmJWEkTFn+5WFPO9v0AkHwPE85qlDn+zHU4F8ZdkzuuR IzqaHarYFUHzDNSK8FA37nelgXXZIWUBzsf53wXiVA+5IN1qvGbtWII9HhamG8w7wJtU+N4e/ P16mEQdr3YdYez9A67XP0BQxc+S6ETXUUrVSxVI90T6iDkf+Jpre1jMrV+Xyc5OxZd38VBqiG IsowJwUVDZowO2En9YqZToC+uQSrC0wE2rycazi+alr568pUrRXSnth1id5p2gBTIpdbDCWCd /sZ1KjrcAOnWwtF4LXGRSKamE04NV0LRfg+wNqU1P7UCqGznrFBHu5edToRQYAI24/yUKrerR HbbpnrBPf/PT+E8fI96tSpgn26nJv2rwNcjI81QHwdccdFLzZ/8dyTWS7AIE3XCNDzpWUmyRP /+qpit//wV2W75UvIyDd9GFESG5fbuyD5RbWtEc4Mmh6Kz/x1huajUDULdcTDTzbtz759GZQk Fqrj2snnxWv37quzXX+wmaSjN4jnsiwQTgaNeI9ae8/sl9Mte+DcGIAjHLDMGcI64SETjCpu1 urxXuPz7QMy8l/HRWCUC8IYxb75ej6mZQ8W3I0YvqFh7jNGgg9buD/oOq7wpamWlBv/Zqe1JJ rfPWEzME0Gg4p6qUkDe57ihbOikU9sdytcId3FK7wC7KsbeR/YICmql5LjyJqDAwHwXDaQZGN 1q1vQTNMwntoIN9c/0uwvGf9woP7aSOWMtjqZiSkrmVipzBr2wNPEySVLeOXbJzqhYbtKNK// pGsYnhY/HFQfP7QOZOugdT+UXlov59RxEOEiB/REe3A2Mn+77Clu2fdSVuCwOPH5G8nKlJg7J 9Qacur7nvQRCRCwiOl8RsFgYJRAixXAJmCoa7aWwA1MEXKVkiCK+Wox4y55zE7nFgoeNIfeg6 hOt4eC1wTErQs7+mA2rCFsGaG6jYuVHjcgvq5gPHvNqITwh8ThWPY7tMgR Honour the user given buffer size for the hex32_arg(), num_arg(), strn_len(), get_imix_entries() and get_labels() calls (otherwise they will access memory outside of the user given buffer). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - no changes Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - adjust to dropped patch 'net: pktgen: use defines for the various dec/hex number parsing digits lengths' Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - add rev-by Simon Horman Changes v3 -> v4: - replace C99 comment (suggested by Paolo Abeni) - drop available characters check in strn_len() (suggested by Paolo Abeni) - factored out patch 'net: pktgen: align some variable declarations to the most common pattern' (suggested by Paolo Abeni) - factored out patch 'net: pktgen: remove extra tmp variable (re-use len instead)' (suggested by Paolo Abeni) - factored out patch 'net: pktgen: remove some superfluous variable initializing' (suggested by Paolo Abeni) - factored out patch 'net: pktgen: fix mpls maximum labels list parsing' (suggested by Paolo Abeni) - factored out 'net: pktgen: hex32_arg/num_arg error out in case no characters are available' (suggested by Paolo Abeni) - factored out 'net: pktgen: num_arg error out in case no valid character is parsed' (suggested by Paolo Abeni) Changes v2 -> v3: - no changes Changes v1 -> v2: - additional fix get_imix_entries() and get_labels() --- net/core/pktgen.c | 178 ++++++++++++++++++++++++++++++---------------- 1 file changed, 118 insertions(+), 60 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index def35a734d9d..f4f9c9d83694 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -840,10 +840,10 @@ static ssize_t strn_len(const char __user *user_buffer, size_t maxlen) * "size1,weight_1 size2,weight_2 ... size_n,weight_n" for example. */ static ssize_t get_imix_entries(const char __user *buffer, + size_t maxlen, struct pktgen_dev *pkt_dev) { - const size_t max_digits = 10; - size_t i = 0; + size_t i = 0, max; ssize_t len; char c; @@ -856,10 +856,13 @@ static ssize_t get_imix_entries(const char __user *buffer, if (pkt_dev->n_imix_entries >= MAX_IMIX_ENTRIES) return -E2BIG; - len = num_arg(&buffer[i], max_digits, &size); + max = min(10, maxlen - i); + len = num_arg(&buffer[i], max, &size); if (len < 0) return len; i += len; + if (i >= maxlen) + return -EINVAL; if (get_user(c, &buffer[i])) return -EFAULT; /* Check for comma between size_i and weight_i */ @@ -870,7 +873,8 @@ static ssize_t get_imix_entries(const char __user *buffer, if (size < 14 + 20 + 8) size = 14 + 20 + 8; - len = num_arg(&buffer[i], max_digits, &weight); + max = min(10, maxlen - i); + len = num_arg(&buffer[i], max, &weight); if (len < 0) return len; if (weight <= 0) @@ -880,20 +884,23 @@ static ssize_t get_imix_entries(const char __user *buffer, pkt_dev->imix_entries[pkt_dev->n_imix_entries].weight = weight; i += len; + pkt_dev->n_imix_entries++; + + if (i >= maxlen) + break; if (get_user(c, &buffer[i])) return -EFAULT; - i++; - pkt_dev->n_imix_entries++; } while (c == ' '); return i; } -static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) +static ssize_t get_labels(const char __user *buffer, + size_t maxlen, struct pktgen_dev *pkt_dev) { unsigned int n = 0; - size_t i = 0; + size_t i = 0, max; ssize_t len; char c; @@ -904,17 +911,20 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) if (n >= MAX_MPLS_LABELS) return -E2BIG; - len = hex32_arg(&buffer[i], 8, &tmp); + max = min(8, maxlen - i); + len = hex32_arg(&buffer[i], max, &tmp); if (len <= 0) return len; pkt_dev->labels[n] = htonl(tmp); if (pkt_dev->labels[n] & MPLS_STACK_BOTTOM) pkt_dev->flags |= F_MPLS_RND; i += len; + n++; + if (i >= maxlen) + break; if (get_user(c, &buffer[i])) return -EFAULT; i++; - n++; } while (c == ','); pkt_dev->nr_labels = n; @@ -979,8 +989,8 @@ static ssize_t pktgen_if_write(struct file *file, i = len; /* Read variable name */ - - len = strn_len(&user_buffer[i], sizeof(name) - 1); + max = min(sizeof(name) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1008,7 +1018,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "min_pkt_size")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1025,7 +1036,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "max_pkt_size")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1044,7 +1056,8 @@ static ssize_t pktgen_if_write(struct file *file, /* Shortcut for min = max */ if (!strcmp(name, "pkt_size")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1064,7 +1077,8 @@ static ssize_t pktgen_if_write(struct file *file, if (pkt_dev->clone_skb > 0) return -EINVAL; - len = get_imix_entries(&user_buffer[i], pkt_dev); + max = count - i; + len = get_imix_entries(&user_buffer[i], max, pkt_dev); if (len < 0) return len; @@ -1075,7 +1089,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "debug")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1086,7 +1101,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "frags")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1096,7 +1112,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "delay")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1111,7 +1128,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "rate")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1126,7 +1144,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "ratep")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1141,7 +1160,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_src_min")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1154,7 +1174,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_dst_min")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1167,7 +1188,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_src_max")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1180,7 +1202,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_dst_max")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1193,7 +1216,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "clone_skb")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; /* clone_skb is not supported for netif_receive xmit_mode and @@ -1214,7 +1238,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "count")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1225,7 +1250,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "src_mac_count")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1239,7 +1265,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst_mac_count")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1253,7 +1280,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "burst")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1272,7 +1300,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "node")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1293,11 +1322,12 @@ static ssize_t pktgen_if_write(struct file *file, if (!strcmp(name, "xmit_mode")) { char f[32]; - memset(f, 0, 32); - len = strn_len(&user_buffer[i], sizeof(f) - 1); + max = min(sizeof(f) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; + memset(f, 0, sizeof(f)); if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; i += len; @@ -1333,11 +1363,12 @@ static ssize_t pktgen_if_write(struct file *file, char f[32]; char *end; - memset(f, 0, 32); - len = strn_len(&user_buffer[i], sizeof(f) - 1); + max = min(sizeof(f) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; + memset(f, 0, 32); if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; i += len; @@ -1382,7 +1413,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst_min") || !strcmp(name, "dst")) { - len = strn_len(&user_buffer[i], sizeof(pkt_dev->dst_min) - 1); + max = min(sizeof(pkt_dev->dst_min) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1402,7 +1434,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst_max")) { - len = strn_len(&user_buffer[i], sizeof(pkt_dev->dst_max) - 1); + max = min(sizeof(pkt_dev->dst_max) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1422,7 +1455,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst6")) { - len = strn_len(&user_buffer[i], sizeof(buf) - 1); + max = min(sizeof(buf) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1445,7 +1479,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst6_min")) { - len = strn_len(&user_buffer[i], sizeof(buf) - 1); + max = min(sizeof(buf) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1467,7 +1502,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst6_max")) { - len = strn_len(&user_buffer[i], sizeof(buf) - 1); + max = min(sizeof(buf) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1488,7 +1524,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "src6")) { - len = strn_len(&user_buffer[i], sizeof(buf) - 1); + max = min(sizeof(buf) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1511,7 +1548,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "src_min")) { - len = strn_len(&user_buffer[i], sizeof(pkt_dev->src_min) - 1); + max = min(sizeof(pkt_dev->src_min) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1531,7 +1569,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "src_max")) { - len = strn_len(&user_buffer[i], sizeof(pkt_dev->src_max) - 1); + max = min(sizeof(pkt_dev->src_max) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1551,7 +1590,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst_mac")) { - len = strn_len(&user_buffer[i], sizeof(valstr) - 1); + max = min(sizeof(valstr) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1568,7 +1608,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "src_mac")) { - len = strn_len(&user_buffer[i], sizeof(valstr) - 1); + max = min(sizeof(valstr) - 1, count - i); + len = strn_len(&user_buffer[i], max); if (len < 0) return len; @@ -1592,7 +1633,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "flows")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1606,7 +1648,8 @@ static ssize_t pktgen_if_write(struct file *file, } #ifdef CONFIG_XFRM if (!strcmp(name, "spi")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1617,7 +1660,8 @@ static ssize_t pktgen_if_write(struct file *file, } #endif if (!strcmp(name, "flowlen")) { - len = num_arg(&user_buffer[i], 10, &value); + max = min(10, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1628,7 +1672,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "queue_map_min")) { - len = num_arg(&user_buffer[i], 5, &value); + max = min(5, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1639,7 +1684,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "queue_map_max")) { - len = num_arg(&user_buffer[i], 5, &value); + max = min(5, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1652,7 +1698,8 @@ static ssize_t pktgen_if_write(struct file *file, if (!strcmp(name, "mpls")) { unsigned int n, cnt; - len = get_labels(&user_buffer[i], pkt_dev); + max = count - i; + len = get_labels(&user_buffer[i], max, pkt_dev); if (len < 0) return len; i += len; @@ -1673,7 +1720,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "vlan_id")) { - len = num_arg(&user_buffer[i], 4, &value); + max = min(4, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1700,7 +1748,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "vlan_p")) { - len = num_arg(&user_buffer[i], 1, &value); + max = min(1, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1715,7 +1764,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "vlan_cfi")) { - len = num_arg(&user_buffer[i], 1, &value); + max = min(1, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1730,7 +1780,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "svlan_id")) { - len = num_arg(&user_buffer[i], 4, &value); + max = min(4, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1757,7 +1808,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "svlan_p")) { - len = num_arg(&user_buffer[i], 1, &value); + max = min(1, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1772,7 +1824,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "svlan_cfi")) { - len = num_arg(&user_buffer[i], 1, &value); + max = min(1, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1788,7 +1841,9 @@ static ssize_t pktgen_if_write(struct file *file, if (!strcmp(name, "tos")) { __u32 tmp_value; - len = hex32_arg(&user_buffer[i], 2, &tmp_value); + + max = min(2, count - i); + len = hex32_arg(&user_buffer[i], max, &tmp_value); if (len < 0) return len; @@ -1804,7 +1859,9 @@ static ssize_t pktgen_if_write(struct file *file, if (!strcmp(name, "traffic_class")) { __u32 tmp_value; - len = hex32_arg(&user_buffer[i], 2, &tmp_value); + + max = min(2, count - i); + len = hex32_arg(&user_buffer[i], max, &tmp_value); if (len < 0) return len; @@ -1819,7 +1876,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "skb_priority")) { - len = num_arg(&user_buffer[i], 9, &value); + max = min(9, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; From patchwork Thu Feb 27 13:56:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994549 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 789B8232364; Thu, 27 Feb 2025 13:56:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664606; cv=none; b=CWewBK9/1gOdMbkUHuHblxBoqsyMqGUmfubvGE+ztovb4fu934K4mtBB4cb+VdG1rW+a9N8qEvTxov5QarMLkBflqqM8TUZixSBBmg+YvPBvvvmwpms8dPOgNPt7JQ84WVBImCAEud8tVpi/ktBHIQ1FaFMxD+9bwHRQ0KrcmZs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664606; c=relaxed/simple; bh=U55Wfaml+iLmuDzRSmhF6XHXxgqauTNIupr+1KWPRZk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cJtqATs50LjAn9XGY7YBr9EzI1Sa208yI2FryKB6laFqXit5yq2wYJFVD7EoGZJesuuzkcpJ/NSjtyfgwBDfJBinoCINSNZiOZG3bCPaataL47BGwFx5Ypa29gQLfv2tcO2vxMBoU0vD4YsYW5tJre/rpCXdVksO0ANPyAfe6vk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=sbP/y1Hc; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="sbP/y1Hc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664576; x=1741269376; i=ps.report@gmx.net; bh=U55Wfaml+iLmuDzRSmhF6XHXxgqauTNIupr+1KWPRZk=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=sbP/y1HctdaY8Nyn4Uj1Kx3Hpt1Ful3MvpliXfrPzCnncEqeMmBGchyUtAhfRsnb I2z0VnLKXfPzPM2YX5f71UTMm/EHMlsozLped3ZSRRNBJiozSy6r88s5yxsfTrEoH 2trK96horOzs4+B5AQfxmGS091MrxysLIlq26zAjb0MzcVFileL+brqIK5H+w9OE1 XnDyJX5kR1Fwlt+jaJbNA6MABwn21EQneQmMGg7WMTodHrFaOiVB2oc3j0ZoVvfRN C24gwFlzSzm89ZDZ5oJkIHKauMn/PyvLYP/EbyqVd8+bbbLmZYrCzpzPpLeVYuoSa wOMX1sO9jWpiLgYkwA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MOiDX-1teVfc47Dz-00UlyI; Thu, 27 Feb 2025 14:56:16 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 6/8] net: pktgen: fix mpls reset parsing Date: Thu, 27 Feb 2025 14:56:02 +0100 Message-ID: <20250227135604.40024-7-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:qXH4O+ui+hIs/MVWTwQuygtjseriezg+brhpV1ZDBDiz3fuL7Wl wYa5VCSKSkYbDBCwgBCjz6XYP8ui5EnBFVXhQVcB8jNdAuqroAP6BwSwmIfFF7zZiDSlFG6 Yp75Vp7EoLYljsBAeWbj/ZBtVyT8HBqQx/WuIDWfI6OD0fLIC0m5HmIYxuwrl2l+AVq1APn M6xYHprMtAoH8MRbUr/HQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:ONC9ffTbhzc=;KaLBZ5Z2xVz2txuGiXrKGFlbIZK SIl7YKx4TqQ//onW/OXIJlvA8SvDInNHsBK/fAniAJHFt2RePoLNvAHt9J9jiCmSxv7w4Enu2 XwDXj0a19gBsw0ECL+Ay1rXgY+SSEmZ7O+EsoUekm4Kz7ZhlN9u/geuylwKLKymg2s4c2Tq+8 njAyd0fwyXPkk3EM/jSYdD9vlLr8Fr0JP8FB/VCaattrYSFTt/DQQYb5bHUnglh4quQtNF6WU mVHR4lq1Bd/UuvO/FRUleFvcrfEkGaGfIUyammSTR1JWfAnnVtuzvMcr/Kz7WAoV51dDiqFsD xzgjfArV7Y5Dgk4GF//JyLh/y9mFllBXxDF1NjBOaDJQWGI+fKjMkuBU2q8a4Cl87mXJg7qtB bVCFZcpnCDHHWVyOJIaji2m78tujD6mxX/+jx4L01X07b0g+QLB9rRwUaZJfoYDDdeJ55jD/V 6x1+iahhWjlCya0zSDx3aX9GFiYXgBLxZ3bt/Bv1pgu3blNIquLLAxgWjxDcJfL8GinNg/F4j cB5UkgtDWibQL6f09xD+AHhywJi4eugNgMni9DF78cpz3LPCTTntn1bxBXu1WhRtgm6UteHiY v7Kv7VDucDpZlxE3bvF99HqCb9uD47I0tGdf0dgL9bJct86CIqHmWIG0jmV2v2rpgkUP5XWt6 my1o8Obxm8qfTIP78ikVUAOKtHI7zNnuqG8iUilioXOe5vnFMQhR48QJduQezDqaKh6NhgjPW uXBCpBNmTtkggrtx6lTI7QTJ7QddywGt8Tdz+d0JNV4hyDoPooEMe0zK7zvbMPBGIZBw10Gbj HqAJEBf9VyDZHhtCCMC0CHzQjuS1NuR9nkZHtLxHuK7jht2V00pSjX+yc8q/5KYrjJTHyH+X3 xfT31ElIRHBdZ1HHOWzYvG762aLv2YtOQaneh7UczKTcEYeGyNtsCDVJxi+k39W9b8mCq2vm0 mH2CXrEK/jWc70SvnwsBMoTKNU0ovBI0iqFh+opGPtdQMa7/AdCZsslYvDYiMvPz/LYO7PNkG QYUJePss2rL6yATr0we8gzgj8rJcivGshVC1HMIxvPu1yvCBt+8hnCuoBJffsSsBf/+gtMJGM 5GWoOkXLaMOyrxZI1FcgD+fQvukKo+81LyYDP2gLEJUrO5i6mW/mVo8YAZoKdwvT66VyvjQyI drEuOFNlO1zLQn3Ge5mIwzWipSI/fCm4gyhXNofZP0BVdkZEvNezGv1vZ3qKiuAeiT1f9iYCN Bhh1Qor0qssSGKd+0MNklhLkNnV0C5VLjIoPDbKvvjlYya5pOWCZPExA4e0mFCyn6A0nYwj3w W0JAGQsaedXaFFKwIqRvTXwtT4sWjDobIboss57qNSCgt0/HlU2iSbHnQT+QPubvhr8yexTg6 3FRZtt7VWNu+1PbYBO4i0XDSPNIYNr6NS/QFc06CHi9kyt5BxE0Z+jeMn2 Fix mpls list reset parsing to work as describe in Documentation/networking/pktgen.rst: pgset "mpls 0" turn off mpls (or any invalid argument works too!) - before the patch $ echo "mpls 00000001,00000002" > /proc/net/pktgen/lo\@0 $ grep mpls /proc/net/pktgen/lo\@0 mpls: 00000001, 00000002 Result: OK: mpls=00000001,00000002 $ echo "mpls 00000001,00000002" > /proc/net/pktgen/lo\@0 $ echo "mpls 0" > /proc/net/pktgen/lo\@0 $ grep mpls /proc/net/pktgen/lo\@0 mpls: 00000000 Result: OK: mpls=00000000 $ echo "mpls 00000001,00000002" > /proc/net/pktgen/lo\@0 $ echo "mpls invalid" > /proc/net/pktgen/lo\@0 $ grep mpls /proc/net/pktgen/lo\@0 Result: OK: mpls= - after the patch $ echo "mpls 00000001,00000002" > /proc/net/pktgen/lo\@0 $ grep mpls /proc/net/pktgen/lo\@0 mpls: 00000001, 00000002 Result: OK: mpls=00000001,00000002 $ echo "mpls 00000001,00000002" > /proc/net/pktgen/lo\@0 $ echo "mpls 0" > /proc/net/pktgen/lo\@0 $ grep mpls /proc/net/pktgen/lo\@0 Result: OK: mpls= $ echo "mpls 00000001,00000002" > /proc/net/pktgen/lo\@0 $ echo "mpls invalid" > /proc/net/pktgen/lo\@0 $ grep mpls /proc/net/pktgen/lo\@0 Result: OK: mpls= Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - fix c99 comment (suggested by Paolo Abeni) Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - no changes Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) Changes v3 -> v4 - add rev-by Simon Horman Changes v2 -> v3: - new patch --- net/core/pktgen.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index f4f9c9d83694..c604a68f2840 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -913,8 +913,13 @@ static ssize_t get_labels(const char __user *buffer, max = min(8, maxlen - i); len = hex32_arg(&buffer[i], max, &tmp); - if (len <= 0) + if (len < 0) return len; + + /* return empty list in case of invalid input or zero value */ + if (len == 0 || tmp == 0) + return maxlen; + pkt_dev->labels[n] = htonl(tmp); if (pkt_dev->labels[n] & MPLS_STACK_BOTTOM) pkt_dev->flags |= F_MPLS_RND; From patchwork Thu Feb 27 13:56:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994542 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75B45225408; Thu, 27 Feb 2025 13:56:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664582; cv=none; b=YAZUqLxKzmwcL4IxQO15tXfwHivL+YbpuEARy2mC51XE/lveC2EXD5QqaVyiWK1nc32deaMs3FPJ5EG5e3WTOBmTabpBevllANfohrwhnojdiNNNnW41OwHEWtNk41Nqt+VRUk7QAT5AzDlx9qmSPwwiPXoPkFWbPnzcGXQ1JGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664582; c=relaxed/simple; bh=VTUIYxvOejiRil1eARRLJZNl0TdkdlSsBXRkQL05spc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W+TJRYxwRy3EViW8KlNhRMRoC+MtEvPd7iOjwHz3yPYCyaVgV1eC/epXc5+hisQJURyUoUjwaWEaLJ4X49DBjq7cHzCWP6x7RWIOMf8F8SrbP3Z0Th83tJq0Am5jspD1Wts9g0SDR9hfQvKlyy+9GKK/mtzK2KuKhCFf2dd+Oe8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=BOLAOwdr; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="BOLAOwdr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664576; x=1741269376; i=ps.report@gmx.net; bh=VTUIYxvOejiRil1eARRLJZNl0TdkdlSsBXRkQL05spc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=BOLAOwdrqAzXuJuzmGkpYpvYVpk72Y01cME4NV7o2gwpfU2daEC4/vkf+k6qHCZU Er6SK43UDGgYv8nzjMNAoGs36uPig9QtJklqMo6Rl3x4pGInKLOz2xBFXosHsS8RS 3sUsJRh5e2ne6+/CZfGErS4F0YiXzosPPM483iR0Q3EE6d1Kne7znWqXBP2yUWfSe jltf4b4CreXMwv/oKh6VlB4xLLiJ/SPeaIDPTQKFr1e0QOyIprjB8QbqKuMtb5TBQ ydC2dv3rMvQITEfGnFqd7EyQjty4qx7kXyXjDzE1julZ2vLGtcLuGUI0/htC19hBY lIirboq7JeWZCEWAww== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N3bSt-1t6VgR1pCt-00w72I; Thu, 27 Feb 2025 14:56:16 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 7/8] net: pktgen: remove all superfluous index assignements Date: Thu, 27 Feb 2025 14:56:03 +0100 Message-ID: <20250227135604.40024-8-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:EarVIzoh0M0cjRE43xaTG/5ghkYbotQuaKH+EqBwRekpC5rDG4T SwNcRKssz11WRm+9KYoIya9uwWGwVv4xtKgznv72pUGIqOsMprRjYNIX0lekXQABiCGDMQh 2SK6eUUL1HkAWyQus7Da5ShNR/Q+m1XfewgkDRX0tx7A8RGTnJ9fKaNsVYcD0FunCOitTCE kXW7557QZwLYQECIFTxtQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:yK63mgyz0f8=;PvyG8qiTlng+NUd4ZliJBrwCURh IF8XMEIaoX5xVdvaK+xODVQW1CUyFXMTch4Lo+aTC0Vj3rUHOWOQRTcmeHKFTStwtEwN1KRGW 0vx4G83wZEtYHmM2elXw7TPonjC8FTaDntGfLJkBMnrSqNAzSENV8EpZpFJesOKtt/zpqly82 sw/p1BIclK8iYNiA9t+EQskgF7gx6B8qHhg11gZCDcK4+eEZ90L6uYs0xJmyidga+B52YvdP8 LO7QxArPffBICCPTR4WFOB7jkKFsD4HOikm50s9hCUMfDBHIPHCql/99/tOOv/+4qsYmgSCbg eCDKc6ltcQOP6PyYLYzqJhlh1O+PzAEcgaFVbTd8O2hGa+W218PTKASK3bH4vbZlHhWHFkiKz n8B1fOiNHmOiIFcGMY4eFuf2k2jLu421KBQMVg87YUOzgAFmA6pB94MIUP3+9WTOlSugBciM9 3GoRsWkQuIY9Q7dCx/kr32CE3lXU5skzD2C+gC/mVwuP2CUP6OkpHvyxgFxrTvzTdfUuUaNM1 kXsl9FwF7VobdObzGwJuW0ZSZmZHR1qe74u9NsUeWLpvA92RA0DfWsYCEfIhRW0NoR5q6vXZq mpTc/AzvgMMJQgz16SMFKbgvU8ED0vS9A30dEOlZR6Ge577WqwRktYRv8J7jjFkYW8t2SQJ2Q XsG7ukqgUq6mjfwIWjFqlwPBw51AaQKocayVmzaLEsfX7Dkc20cwYjYB7MT1MCAqr3HlRYP9r hS8xPr2NntfX+tszHOLbMA5TbDcL2xenoJvhw5CbCGJarYprd5BsrvZBM9nVR0OOGZ2JbZCJi u2shbRWBAWI0Yb4neXGAlHB0uq1hN7Ya7DLRfC3nIsYCM+P1Ytn5qVDYWxFzOoXrdTibzkadC PdQfXPUqAEGQrQcqpgFBtchLeGAXqLZ1x5poB2dQPmBUnjc9sSnVRRoWCnkV+LrOAsR8ToRW7 0ve9ij144Lob8IJqdZD/KibOpNzbdfj9OqsNM5llrNPSy8JLNyGDJElwAdAduEYgBVuYfxEKS yvyU4SYirMrQAwTLxVrY5FjMuy/2kkKnWJom5WCDZ2lOHY13avfEeN4K37ha7F39WVxlZahpv SOeZmBtS9qasjOwJc38+WAFQwP1PdBXrpScCJ6xu+fDcRNA9+B9TbGP7P4sK+kVIPNGWumVSA zYM7YQm8deh1TXyEz9cN0haHG6Mz+21ELlF8UMMbtdMswhvyFqw6d1wmeB5hKtl0tEKzMZ/k1 0GXK5sboQaGpVumzEEOdcXD+In/t3k64Gdp9Ut0MsBMmTxx/RuDiv1pbiEzd700+f5/Fj+Nis QPj6Y/dOvZWCuMaLvvhvVyfuHzPS4I+hjR9ykeh78Z/2XxPJZ8maxZ58tusKiiTR/LIZqQu8+ QZCjyBiBBuE1T4NmiM1MGM5vFu7+cs+Ejd3LUDm/L7Gb2A6WnwWejIl3+xaHzYTW/x/zn1DZb esdF+tQ== Remove all superfluous index ('i += len') assignements (value not used afterwards). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - no changes Changes v6 -> v7 - rebased on actual net-next/main - no changes Changes v5 -> v6 - add rev-by Simon Horman Changes v4 -> v5 - new patch (suggested by Simon Horman) --- net/core/pktgen.c | 52 ++++++----------------------------------------- 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index c604a68f2840..e850598db3e7 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1028,7 +1028,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value < 14 + 20 + 8) value = 14 + 20 + 8; if (value != pkt_dev->min_pkt_size) { @@ -1046,7 +1045,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value < 14 + 20 + 8) value = 14 + 20 + 8; if (value != pkt_dev->max_pkt_size) { @@ -1066,7 +1064,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value < 14 + 20 + 8) value = 14 + 20 + 8; if (value != pkt_dev->min_pkt_size) { @@ -1089,7 +1086,6 @@ static ssize_t pktgen_if_write(struct file *file, fill_imix_distribution(pkt_dev); - i += len; return count; } @@ -1099,7 +1095,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; debug = value; sprintf(pg_result, "OK: debug=%u", debug); return count; @@ -1111,7 +1106,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->nfrags = value; sprintf(pg_result, "OK: frags=%d", pkt_dev->nfrags); return count; @@ -1122,7 +1116,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value == 0x7FFFFFFF) pkt_dev->delay = ULLONG_MAX; else @@ -1138,7 +1131,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (!value) return -EINVAL; pkt_dev->delay = pkt_dev->min_pkt_size*8*NSEC_PER_USEC/value; @@ -1154,7 +1146,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (!value) return -EINVAL; pkt_dev->delay = NSEC_PER_SEC/value; @@ -1170,7 +1161,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value != pkt_dev->udp_src_min) { pkt_dev->udp_src_min = value; pkt_dev->cur_udp_src = value; @@ -1184,7 +1174,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value != pkt_dev->udp_dst_min) { pkt_dev->udp_dst_min = value; pkt_dev->cur_udp_dst = value; @@ -1198,7 +1187,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value != pkt_dev->udp_src_max) { pkt_dev->udp_src_max = value; pkt_dev->cur_udp_src = value; @@ -1212,7 +1200,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value != pkt_dev->udp_dst_max) { pkt_dev->udp_dst_max = value; pkt_dev->cur_udp_dst = value; @@ -1236,7 +1223,6 @@ static ssize_t pktgen_if_write(struct file *file, !(pkt_dev->flags & F_SHARED))) return -EINVAL; - i += len; pkt_dev->clone_skb = value; sprintf(pg_result, "OK: clone_skb=%d", pkt_dev->clone_skb); @@ -1248,7 +1234,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->count = value; sprintf(pg_result, "OK: count=%llu", (unsigned long long)pkt_dev->count); @@ -1260,7 +1245,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (pkt_dev->src_mac_count != value) { pkt_dev->src_mac_count = value; pkt_dev->cur_src_mac_offset = 0; @@ -1275,7 +1259,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (pkt_dev->dst_mac_count != value) { pkt_dev->dst_mac_count = value; pkt_dev->cur_dst_mac_offset = 0; @@ -1290,7 +1273,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if ((value > 1) && ((pkt_dev->xmit_mode == M_QUEUE_XMIT) || ((pkt_dev->xmit_mode == M_START_XMIT) && @@ -1310,8 +1292,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; - if (node_possible(value)) { pkt_dev->node = value; sprintf(pg_result, "OK: node=%d", pkt_dev->node); @@ -1335,7 +1315,6 @@ static ssize_t pktgen_if_write(struct file *file, memset(f, 0, sizeof(f)); if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; - i += len; if (strcmp(f, "start_xmit") == 0) { pkt_dev->xmit_mode = M_START_XMIT; @@ -1376,7 +1355,6 @@ static ssize_t pktgen_if_write(struct file *file, memset(f, 0, 32); if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; - i += len; flag = pktgen_read_flag(f, &disable); if (flag) { @@ -1434,7 +1412,7 @@ static ssize_t pktgen_if_write(struct file *file, } if (debug) pr_debug("dst_min set to: %s\n", pkt_dev->dst_min); - i += len; + sprintf(pg_result, "OK: dst_min=%s", pkt_dev->dst_min); return count; } @@ -1455,7 +1433,7 @@ static ssize_t pktgen_if_write(struct file *file, } if (debug) pr_debug("dst_max set to: %s\n", pkt_dev->dst_max); - i += len; + sprintf(pg_result, "OK: dst_max=%s", pkt_dev->dst_max); return count; } @@ -1479,7 +1457,6 @@ static ssize_t pktgen_if_write(struct file *file, if (debug) pr_debug("dst6 set to: %s\n", buf); - i += len; sprintf(pg_result, "OK: dst6=%s", buf); return count; } @@ -1502,7 +1479,6 @@ static ssize_t pktgen_if_write(struct file *file, if (debug) pr_debug("dst6_min set to: %s\n", buf); - i += len; sprintf(pg_result, "OK: dst6_min=%s", buf); return count; } @@ -1524,7 +1500,6 @@ static ssize_t pktgen_if_write(struct file *file, if (debug) pr_debug("dst6_max set to: %s\n", buf); - i += len; sprintf(pg_result, "OK: dst6_max=%s", buf); return count; } @@ -1548,7 +1523,6 @@ static ssize_t pktgen_if_write(struct file *file, if (debug) pr_debug("src6 set to: %s\n", buf); - i += len; sprintf(pg_result, "OK: src6=%s", buf); return count; } @@ -1569,7 +1543,7 @@ static ssize_t pktgen_if_write(struct file *file, } if (debug) pr_debug("src_min set to: %s\n", pkt_dev->src_min); - i += len; + sprintf(pg_result, "OK: src_min=%s", pkt_dev->src_min); return count; } @@ -1590,7 +1564,7 @@ static ssize_t pktgen_if_write(struct file *file, } if (debug) pr_debug("src_max set to: %s\n", pkt_dev->src_max); - i += len; + sprintf(pg_result, "OK: src_max=%s", pkt_dev->src_max); return count; } @@ -1643,7 +1617,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value > MAX_CFLOWS) value = MAX_CFLOWS; @@ -1658,7 +1631,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->spi = value; sprintf(pg_result, "OK: spi=%u", pkt_dev->spi); return count; @@ -1670,7 +1642,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->lflow = value; sprintf(pg_result, "OK: flowlen=%u", pkt_dev->lflow); return count; @@ -1682,7 +1653,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->queue_map_min = value; sprintf(pg_result, "OK: queue_map_min=%u", pkt_dev->queue_map_min); return count; @@ -1694,7 +1664,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->queue_map_max = value; sprintf(pg_result, "OK: queue_map_max=%u", pkt_dev->queue_map_max); return count; @@ -1707,7 +1676,7 @@ static ssize_t pktgen_if_write(struct file *file, len = get_labels(&user_buffer[i], max, pkt_dev); if (len < 0) return len; - i += len; + cnt = sprintf(pg_result, "OK: mpls="); for (n = 0; n < pkt_dev->nr_labels; n++) cnt += sprintf(pg_result + cnt, @@ -1730,7 +1699,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value <= 4095) { pkt_dev->vlan_id = value; /* turn on VLAN */ @@ -1758,7 +1726,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if ((value <= 7) && (pkt_dev->vlan_id != 0xffff)) { pkt_dev->vlan_p = value; sprintf(pg_result, "OK: vlan_p=%u", pkt_dev->vlan_p); @@ -1774,7 +1741,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if ((value <= 1) && (pkt_dev->vlan_id != 0xffff)) { pkt_dev->vlan_cfi = value; sprintf(pg_result, "OK: vlan_cfi=%u", pkt_dev->vlan_cfi); @@ -1790,7 +1756,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if ((value <= 4095) && ((pkt_dev->vlan_id != 0xffff))) { pkt_dev->svlan_id = value; /* turn on SVLAN */ @@ -1818,7 +1783,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if ((value <= 7) && (pkt_dev->svlan_id != 0xffff)) { pkt_dev->svlan_p = value; sprintf(pg_result, "OK: svlan_p=%u", pkt_dev->svlan_p); @@ -1834,7 +1798,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if ((value <= 1) && (pkt_dev->svlan_id != 0xffff)) { pkt_dev->svlan_cfi = value; sprintf(pg_result, "OK: svlan_cfi=%u", pkt_dev->svlan_cfi); @@ -1852,7 +1815,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (len == 2) { pkt_dev->tos = tmp_value; sprintf(pg_result, "OK: tos=0x%02x", pkt_dev->tos); @@ -1870,7 +1832,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (len == 2) { pkt_dev->traffic_class = tmp_value; sprintf(pg_result, "OK: traffic_class=0x%02x", pkt_dev->traffic_class); @@ -1886,7 +1847,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; pkt_dev->skb_priority = value; sprintf(pg_result, "OK: skb_priority=%i", pkt_dev->skb_priority); @@ -2003,7 +1963,7 @@ static ssize_t pktgen_thread_write(struct file *file, } if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; - i += len; + mutex_lock(&pktgen_thread_lock); ret = pktgen_add_device(t, f); mutex_unlock(&pktgen_thread_lock); From patchwork Thu Feb 27 13:56:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13994547 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48A86234989; Thu, 27 Feb 2025 13:56:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664594; cv=none; b=GaaS/7hdwyLu4bWiolsvhHXH+JW8lOpsC2+YdKODg0vxqO68fAT+qDCVarxywRCgjpzDUGlAZz2lWOJbZe59cS86miEfzuQdBHLcdf2cWiZrUen3077H46tQykyIPmsOgP4ppxvdhRUqre2lJIN+/cSDU8QQ2w3qwp0TXQoGSs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740664594; c=relaxed/simple; bh=R66KWURTQxfxE9QPO8h9nl2i3JtDs8+Tof5JV0SnMWc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g+yWr3OGsrx3qqfvTkFYPAZDVQR6PBtAy9GnzOF+VzjwUbwnU18+Jk3JDMQH5X4+nycrvDMuSV4YGExUqDvPzFqaDtFViD7GUr41DdfanZKjTR1ujsexZlLk6OIXApQ9IVlnsIBkfNss8uMCGJxSJmZs77ZfX80VAV12fqGC39I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net; spf=pass smtp.mailfrom=gmx.net; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b=GaoM3fmm; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.net header.i=ps.report@gmx.net header.b="GaoM3fmm" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740664577; x=1741269377; i=ps.report@gmx.net; bh=R66KWURTQxfxE9QPO8h9nl2i3JtDs8+Tof5JV0SnMWc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=GaoM3fmmeSS3M/wtc/vvu8NbGNCH15ESJUsGu0r9/24PkKTxiCYYCT02f1to6owA t5NTGNp4eyehQ2ho00WnI6kkM/mQ9+aULEcrnU6kys7cJzqNetwJ2gGNT4WOQOVfH 8H3a6+P7R813bnGNDf/8fBvACoR4DaNfrI96+H1pSK7bxqqESftT1VyQr7S+MAz6d LUZyyQrXNtS3G/VMSmdNFH3v3OuknOSxhkSgb3B8mnsMAyvJzEWrnD0if+7ymwm02 sl+ZAIDRqmcBm2r850s9QTos5XiK9JbAwOkNAIbSn7BRMpKdYtoTpyuP6cfsIVcEG M2QSc9zuqKLOQRLWSA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.151]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N8ofO-1tBkU23YV4-00sVzz; Thu, 27 Feb 2025 14:56:16 +0100 From: Peter Seiderer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Peter Seiderer , Fedor Pchelkin , Arnd Bergmann , Nam Cao Subject: [PATCH net-next v8 8/8] selftest: net: add proc_net_pktgen Date: Thu, 27 Feb 2025 14:56:04 +0100 Message-ID: <20250227135604.40024-9-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250227135604.40024-1-ps.report@gmx.net> References: <20250227135604.40024-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:JRkG2y119lj6hU47pPDGwn2J9NwBBplikiaogmzgs6NE9ZSnQH4 p705kCBD6CAtb2GF4LcbqPoHmmCx7YmrF3lYca7NLsIrSoJ+gsH8PAJ0qSWoGqQG+DDW/0V cU904CT1BxjkItPNlFKWkLDGDYir6eUnELzfE+Y7Jci8J/LF+XSg+aiQNa90c/es8qiNagL DY469+/etqC+GZ+3j8ONg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:hAGCCLaPtu4=;B2Ev2orQzpPqnHiQHux/xQz2RkI KcfcXdoAVtuNOrbn9wAKJaqJ09ftayFSgA7VPl4T1TdLTVl+YAajBXMZvjkcn38TvnhKQ1H7L s2mQndz4MAkrT5By26UnYhtvW0612ucnZJiw64QQF9gQOItogz9B2+kWIbYIzETEXtXRzhfuO 0BAz38Wu4fV87O2TxgqhaN/bj7mMou2aOQDjMp8P3vqMdB1y0c8KIz4N1J57y4omSkhNwvRhQ H7wkv1776efZsUmrqPWMcBrOHWmkwvg4vey5GcZur0mNOQLT/VSFp72wGTrv2gBVxT6mQfSKt axkI65E2ROgcDTi2QqMhQtlHWeQGhRmGGGyQVWCPe1Tmzijop/AV1kunpiRJT+GA8Oc0ZJhvs g+oHHh4L31Son+G09UYsqbU2nGmjLmmIgaw174pO9QLo7/6sJZgo2quThPCcqXzlePF83rf8W f4x1NywiMX76n3e37AIpr1E8XyepfcFJMFjLVJZj9QKrvGk1CzMYJuFaxzIHbLqlqA3Cm8ART xJkHz7dfbKxhAcSdmvVk6IfyJLexovVZVC79JelUDqEhARrUGdv16KwVDar+fvM9yZTlzLnJ2 vbHuQegWHY95TKUbkUgLr2auLhDRRCvZmmtvJSsDubLhrLN7YRkY6qOq1bqq0DFUQ34zHRuGB KC+UvkhfGNrfcf2o3jhCJFTSs2uAj3QFz+nu8Nc6Ve7eR2bZEQ8fFbEDOyC34BCV27XUmTTw1 73mz+Q/d5uiygSFJuz496Dmta//wrtTbGa+jE/u5tz1j7+t8C35XcliKNubOUBvAt0JMCkuyO P3mV0oq9l+X3H+U7LxzZfyTKMm0TrdC1NyafJiMgaN8NTP6Dt8INCTg2W5mIOaB3RytQWjgfP y8/tMhDNJzOMXyJLy/byPJy0MZD7s/JVle60bxBONw+44za/mOpzag/gTpoBJdI4+hAzSSZBI i3yfoQaN8XQCIy+S8HpUZt3oHohQftiE1f33ZCNARa+LMgNoj4qFP24ctiC8/Kq3+soU6kAuk zgBxVxbSHr4IjtbI2R6eMhYy3gjBbzCnLHwiF9XbixnOXtN51X3fmnzJz8+um5fvfAXbaRwdt 5Mfv+raxVFwfejGJBBiZPPA7vdftytcfk0Sf33U+mBYQ/boE3Gw7THnlCTjxvvni21jXVJEAP Yb87UIkVikFAJ8OKe60/Dpdlhcn7h8F5qODJhwGYiFVJzBgegmmj08q145Pf9Ial5CHoKeDRX XTDXeWB1xByYN46ljSR1f05juXdK0rtRQU+YEpbCUS7wuM9cEsFRFzHJsFFGRW0PRZXrhFIj9 f/MTHO1qWedd3SoUjm1caNhYtrv4CQKVIVyztA/+h4d6/36ZtMEDfvn7ykgrgmA6hcaSr5do1 QDDb7zFumIiLZROdwW+rhIGTfhSzHuDQSogRyOL4dJZB55cD9FHQQ6creT Add some test for /proc/net/pktgen/... interface. - enable 'CONFIG_NET_PKTGEN=m' in tools/testing/selftests/net/config Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes v7 -> v8 - rebased on actual net-next/main - fix c99 comments (suggested by Paolo Abeni) - add rev-by Simon Horman (given to v6 version) Changes v6 -> v7 - rebased on actual net-next/main - fixed conflict in tools/testing/selftests/net/config Changes v5 -> v6 - no changes Changes v4 -> v5 - split up patchset into part i/ii (suggested by Simon Horman) - addapt to dropped patch 'net: pktgen: hex32_arg/num_arg error out in case no characters are available', empty hex/num arg is now implicit assumed as zero value (instead of failure) Changes v3 -> v4: - no changes Changes v2 -> v3: - fix typo in change description ('v1 -> v1' and tyop) - rename some vars to better match usage add_loopback_0 -> thr_cmd_add_loopback_0 rm_loopback_0 -> thr_cmd_rm_loopback_0 wrong_ctrl_cmd -> wrong_thr_cmd legacy_ctrl_cmd -> legacy_thr_cmd ctrl_fd -> thr_fd - add ctrl interface tests Changes v1 -> v2: - fix tyop not vs. nod (suggested by Jakub Kicinski) - fix misaligned line (suggested by Jakub Kicinski) - enable fomerly commented out CONFIG_XFRM dependent test (command spi), as CONFIG_XFRM is enabled via tools/testing/selftests/net/config CONFIG_XFRM_INTERFACE/CONFIG_XFRM_USER (suggestex by Jakub Kicinski) - add CONFIG_NET_PKTGEN=m to tools/testing/selftests/net/config (suggested by Jakub Kicinski) - add modprobe pktgen to FIXTURE_SETUP() (suggested by Jakub Kicinski) - fix some checkpatch warnings (Missing a blank line after declarations) - shrink line length by re-naming some variables (command -> cmd, device -> dev) - add 'rate 0' testcase - add 'ratep 0' testcase --- tools/testing/selftests/net/Makefile | 1 + tools/testing/selftests/net/config | 1 + tools/testing/selftests/net/proc_net_pktgen.c | 646 ++++++++++++++++++ 3 files changed, 648 insertions(+) create mode 100644 tools/testing/selftests/net/proc_net_pktgen.c diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index 2e16ce6d28e4..d5aa16185f42 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -104,6 +104,7 @@ TEST_PROGS += vlan_bridge_binding.sh TEST_PROGS += bpf_offload.py TEST_PROGS += ipv6_route_update_soft_lockup.sh TEST_PROGS += busy_poll_test.sh +TEST_GEN_PROGS += proc_net_pktgen # YNL files, must be before "include ..lib.mk" YNL_GEN_FILES := busy_poller netlink-dumps diff --git a/tools/testing/selftests/net/config b/tools/testing/selftests/net/config index ab55270669ec..a86f3e752ce2 100644 --- a/tools/testing/selftests/net/config +++ b/tools/testing/selftests/net/config @@ -112,3 +112,4 @@ CONFIG_CAN=m CONFIG_CAN_DEV=m CONFIG_CAN_VXCAN=m CONFIG_NETKIT=y +CONFIG_NET_PKTGEN=m diff --git a/tools/testing/selftests/net/proc_net_pktgen.c b/tools/testing/selftests/net/proc_net_pktgen.c new file mode 100644 index 000000000000..462805ac1614 --- /dev/null +++ b/tools/testing/selftests/net/proc_net_pktgen.c @@ -0,0 +1,646 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * proc_net_pktgen: kselftest for /proc/net/pktgen interface + * + * Copyright (c) 2025 Peter Seiderer + * + */ +#include +#include +#include +#include + +#include "../kselftest_harness.h" + +static const char ctrl_cmd_stop[] = "stop"; +static const char ctrl_cmd_start[] = "start"; +static const char ctrl_cmd_reset[] = "reset"; + +static const char wrong_ctrl_cmd[] = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; + +static const char thr_cmd_add_loopback_0[] = "add_device lo@0"; +static const char thr_cmd_rm_loopback_0[] = "rem_device_all"; + +static const char wrong_thr_cmd[] = "forsureawrongcommand"; +static const char legacy_thr_cmd[] = "max_before_softirq"; + +static const char wrong_dev_cmd[] = "forsurewrongcommand"; +static const char dev_cmd_min_pkt_size_0[] = "min_pkt_size"; +static const char dev_cmd_min_pkt_size_1[] = "min_pkt_size "; +static const char dev_cmd_min_pkt_size_2[] = "min_pkt_size 0"; +static const char dev_cmd_min_pkt_size_3[] = "min_pkt_size 1"; +static const char dev_cmd_min_pkt_size_4[] = "min_pkt_size 100"; +static const char dev_cmd_min_pkt_size_5[] = "min_pkt_size=1001"; +static const char dev_cmd_min_pkt_size_6[] = "min_pkt_size =2002"; +static const char dev_cmd_min_pkt_size_7[] = "min_pkt_size= 3003"; +static const char dev_cmd_min_pkt_size_8[] = "min_pkt_size = 4004"; +static const char dev_cmd_max_pkt_size_0[] = "max_pkt_size 200"; +static const char dev_cmd_pkt_size_0[] = "pkt_size 300"; +static const char dev_cmd_imix_weights_0[] = "imix_weights 0,7 576,4 1500,1"; +static const char dev_cmd_imix_weights_1[] = "imix_weights 101,1 102,2 103,3 104,4 105,5 106,6 107,7 108,8 109,9 110,10 111,11 112,12 113,13 114,14 115,15 116,16 117,17 118,18 119,19 120,20"; +static const char dev_cmd_imix_weights_2[] = "imix_weights 100,1 102,2 103,3 104,4 105,5 106,6 107,7 108,8 109,9 110,10 111,11 112,12 113,13 114,14 115,15 116,16 117,17 118,18 119,19 120,20 121,21"; +static const char dev_cmd_debug_0[] = "debug 1"; +static const char dev_cmd_debug_1[] = "debug 0"; +static const char dev_cmd_frags_0[] = "frags 100"; +static const char dev_cmd_delay_0[] = "delay 100"; +static const char dev_cmd_delay_1[] = "delay 2147483647"; +static const char dev_cmd_rate_0[] = "rate 0"; +static const char dev_cmd_rate_1[] = "rate 100"; +static const char dev_cmd_ratep_0[] = "ratep 0"; +static const char dev_cmd_ratep_1[] = "ratep 200"; +static const char dev_cmd_udp_src_min_0[] = "udp_src_min 1"; +static const char dev_cmd_udp_dst_min_0[] = "udp_dst_min 2"; +static const char dev_cmd_udp_src_max_0[] = "udp_src_max 3"; +static const char dev_cmd_udp_dst_max_0[] = "udp_dst_max 4"; +static const char dev_cmd_clone_skb_0[] = "clone_skb 1"; +static const char dev_cmd_clone_skb_1[] = "clone_skb 0"; +static const char dev_cmd_count_0[] = "count 100"; +static const char dev_cmd_src_mac_count_0[] = "src_mac_count 100"; +static const char dev_cmd_dst_mac_count_0[] = "dst_mac_count 100"; +static const char dev_cmd_burst_0[] = "burst 0"; +static const char dev_cmd_node_0[] = "node 100"; +static const char dev_cmd_xmit_mode_0[] = "xmit_mode start_xmit"; +static const char dev_cmd_xmit_mode_1[] = "xmit_mode netif_receive"; +static const char dev_cmd_xmit_mode_2[] = "xmit_mode queue_xmit"; +static const char dev_cmd_xmit_mode_3[] = "xmit_mode nonsense"; +static const char dev_cmd_flag_0[] = "flag UDPCSUM"; +static const char dev_cmd_flag_1[] = "flag !UDPCSUM"; +static const char dev_cmd_flag_2[] = "flag nonsense"; +static const char dev_cmd_dst_min_0[] = "dst_min 101.102.103.104"; +static const char dev_cmd_dst_0[] = "dst 101.102.103.104"; +static const char dev_cmd_dst_max_0[] = "dst_max 201.202.203.204"; +static const char dev_cmd_dst6_0[] = "dst6 2001:db38:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_dst6_min_0[] = "dst6_min 2001:db8:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_dst6_max_0[] = "dst6_max 2001:db8:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_src6_0[] = "src6 2001:db38:1234:0000:0000:0000:0000:0000"; +static const char dev_cmd_src_min_0[] = "src_min 101.102.103.104"; +static const char dev_cmd_src_max_0[] = "src_max 201.202.203.204"; +static const char dev_cmd_dst_mac_0[] = "dst_mac 01:02:03:04:05:06"; +static const char dev_cmd_src_mac_0[] = "src_mac 11:12:13:14:15:16"; +static const char dev_cmd_clear_counters_0[] = "clear_counters"; +static const char dev_cmd_flows_0[] = "flows 100"; +static const char dev_cmd_spi_0[] = "spi 100"; +static const char dev_cmd_flowlen_0[] = "flowlen 100"; +static const char dev_cmd_queue_map_min_0[] = "queue_map_min 1"; +static const char dev_cmd_queue_map_max_0[] = "queue_map_max 2"; +static const char dev_cmd_mpls_0[] = "mpls 00000001"; +static const char dev_cmd_mpls_1[] = "mpls 00000001,000000f2"; +static const char dev_cmd_mpls_2[] = "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f"; +static const char dev_cmd_mpls_3[] = "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f,00000f10"; +static const char dev_cmd_vlan_id_0[] = "vlan_id 1"; +static const char dev_cmd_vlan_p_0[] = "vlan_p 1"; +static const char dev_cmd_vlan_cfi_0[] = "vlan_cfi 1"; +static const char dev_cmd_vlan_id_1[] = "vlan_id 4096"; +static const char dev_cmd_svlan_id_0[] = "svlan_id 1"; +static const char dev_cmd_svlan_p_0[] = "svlan_p 1"; +static const char dev_cmd_svlan_cfi_0[] = "svlan_cfi 1"; +static const char dev_cmd_svlan_id_1[] = "svlan_id 4096"; +static const char dev_cmd_tos_0[] = "tos 0"; +static const char dev_cmd_tos_1[] = "tos 0f"; +static const char dev_cmd_tos_2[] = "tos 0ff"; +static const char dev_cmd_traffic_class_0[] = "traffic_class f0"; +static const char dev_cmd_skb_priority_0[] = "skb_priority 999"; + +FIXTURE(proc_net_pktgen) { + int ctrl_fd; + int thr_fd; + int dev_fd; +}; + +FIXTURE_SETUP(proc_net_pktgen) { + int r; + ssize_t len; + + r = system("modprobe pktgen"); + ASSERT_EQ(r, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); + + self->ctrl_fd = open("/proc/net/pktgen/pgctrl", O_RDWR); + ASSERT_GE(self->ctrl_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); + + self->thr_fd = open("/proc/net/pktgen/kpktgend_0", O_RDWR); + ASSERT_GE(self->thr_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); + + len = write(self->thr_fd, thr_cmd_add_loopback_0, sizeof(thr_cmd_add_loopback_0)); + ASSERT_EQ(len, sizeof(thr_cmd_add_loopback_0)) TH_LOG("device lo@0 already registered?"); + + self->dev_fd = open("/proc/net/pktgen/lo@0", O_RDWR); + ASSERT_GE(self->dev_fd, 0) TH_LOG("device entry for lo@0 missing?"); +} + +FIXTURE_TEARDOWN(proc_net_pktgen) { + int ret; + ssize_t len; + + ret = close(self->dev_fd); + EXPECT_EQ(ret, 0); + + len = write(self->thr_fd, thr_cmd_rm_loopback_0, sizeof(thr_cmd_rm_loopback_0)); + EXPECT_EQ(len, sizeof(thr_cmd_rm_loopback_0)); + + ret = close(self->thr_fd); + EXPECT_EQ(ret, 0); + + ret = close(self->ctrl_fd); + EXPECT_EQ(ret, 0); +} + +TEST_F(proc_net_pktgen, wrong_ctrl_cmd) { + for (int i = 0; i <= sizeof(wrong_ctrl_cmd); i++) { + ssize_t len; + + len = write(self->ctrl_fd, wrong_ctrl_cmd, i); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } +} + +TEST_F(proc_net_pktgen, ctrl_cmd) { + ssize_t len; + + len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop)); + EXPECT_EQ(len, sizeof(ctrl_cmd_stop)); + + len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop) - 1); + EXPECT_EQ(len, sizeof(ctrl_cmd_stop) - 1); + + len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start)); + EXPECT_EQ(len, sizeof(ctrl_cmd_start)); + + len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start) - 1); + EXPECT_EQ(len, sizeof(ctrl_cmd_start) - 1); + + len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset)); + EXPECT_EQ(len, sizeof(ctrl_cmd_reset)); + + len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset) - 1); + EXPECT_EQ(len, sizeof(ctrl_cmd_reset) - 1); +} + +TEST_F(proc_net_pktgen, wrong_thr_cmd) { + for (int i = 0; i <= sizeof(wrong_thr_cmd); i++) { + ssize_t len; + + len = write(self->thr_fd, wrong_thr_cmd, i); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } +} + +TEST_F(proc_net_pktgen, legacy_thr_cmd) { + for (int i = 0; i <= sizeof(legacy_thr_cmd); i++) { + ssize_t len; + + len = write(self->thr_fd, legacy_thr_cmd, i); + if (i < (sizeof(legacy_thr_cmd) - 1)) { + /* incomplete command string */ + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } else { + /* complete command string without/with trailing '\0' */ + EXPECT_EQ(len, i); + } + } +} + +TEST_F(proc_net_pktgen, wrong_dev_cmd) { + for (int i = 0; i <= sizeof(wrong_dev_cmd); i++) { + ssize_t len; + + len = write(self->dev_fd, wrong_dev_cmd, i); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + } +} + +TEST_F(proc_net_pktgen, dev_cmd_min_pkt_size) { + ssize_t len; + + /* with trailing '\0' */ + len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0)); + + /* without trailing '\0' */ + len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0) - 1); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0) - 1); + + /* with trailing '\0' */ + len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1)); + + /* without trailing '\0' */ + len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1) - 1); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1) - 1); + + /* with trailing '\0' */ + len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2)); + + /* without trailing '\0' */ + len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2) - 1); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2) - 1); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_3, sizeof(dev_cmd_min_pkt_size_3)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_3)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_4, sizeof(dev_cmd_min_pkt_size_4)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_4)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_5, sizeof(dev_cmd_min_pkt_size_5)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_5)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_6, sizeof(dev_cmd_min_pkt_size_6)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_6)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_7, sizeof(dev_cmd_min_pkt_size_7)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_7)); + + len = write(self->dev_fd, dev_cmd_min_pkt_size_8, sizeof(dev_cmd_min_pkt_size_8)); + EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_8)); +} + +TEST_F(proc_net_pktgen, dev_cmd_max_pkt_size) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_max_pkt_size_0, sizeof(dev_cmd_max_pkt_size_0)); + EXPECT_EQ(len, sizeof(dev_cmd_max_pkt_size_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_pkt_size) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_pkt_size_0, sizeof(dev_cmd_pkt_size_0)); + EXPECT_EQ(len, sizeof(dev_cmd_pkt_size_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_imix_weights) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_imix_weights_0, sizeof(dev_cmd_imix_weights_0)); + EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_0)); + + len = write(self->dev_fd, dev_cmd_imix_weights_1, sizeof(dev_cmd_imix_weights_1)); + EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_1)); + + len = write(self->dev_fd, dev_cmd_imix_weights_2, sizeof(dev_cmd_imix_weights_2)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, E2BIG); +} + +TEST_F(proc_net_pktgen, dev_cmd_debug) { + ssize_t len; + + /* debug on */ + len = write(self->dev_fd, dev_cmd_debug_0, sizeof(dev_cmd_debug_0)); + EXPECT_EQ(len, sizeof(dev_cmd_debug_0)); + + /* debug off */ + len = write(self->dev_fd, dev_cmd_debug_1, sizeof(dev_cmd_debug_1)); + EXPECT_EQ(len, sizeof(dev_cmd_debug_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_frags) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_frags_0, sizeof(dev_cmd_frags_0)); + EXPECT_EQ(len, sizeof(dev_cmd_frags_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_delay) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_delay_0, sizeof(dev_cmd_delay_0)); + EXPECT_EQ(len, sizeof(dev_cmd_delay_0)); + + len = write(self->dev_fd, dev_cmd_delay_1, sizeof(dev_cmd_delay_1)); + EXPECT_EQ(len, sizeof(dev_cmd_delay_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_rate) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_rate_0, sizeof(dev_cmd_rate_0)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + + len = write(self->dev_fd, dev_cmd_rate_1, sizeof(dev_cmd_rate_1)); + EXPECT_EQ(len, sizeof(dev_cmd_rate_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_ratep) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_ratep_0, sizeof(dev_cmd_ratep_0)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EINVAL); + + len = write(self->dev_fd, dev_cmd_ratep_1, sizeof(dev_cmd_ratep_1)); + EXPECT_EQ(len, sizeof(dev_cmd_ratep_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_src_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_src_min_0, sizeof(dev_cmd_udp_src_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_src_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_dst_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_dst_min_0, sizeof(dev_cmd_udp_dst_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_src_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_src_max_0, sizeof(dev_cmd_udp_src_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_src_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_udp_dst_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_udp_dst_max_0, sizeof(dev_cmd_udp_dst_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_clone_skb) { + ssize_t len; + + /* clone_skb on (gives EOPNOTSUPP on lo device) */ + len = write(self->dev_fd, dev_cmd_clone_skb_0, sizeof(dev_cmd_clone_skb_0)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, EOPNOTSUPP); + + /* clone_skb off */ + len = write(self->dev_fd, dev_cmd_clone_skb_1, sizeof(dev_cmd_clone_skb_1)); + EXPECT_EQ(len, sizeof(dev_cmd_clone_skb_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_count) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_count_0, sizeof(dev_cmd_count_0)); + EXPECT_EQ(len, sizeof(dev_cmd_count_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_mac_count) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_mac_count_0, sizeof(dev_cmd_src_mac_count_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_mac_count_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_mac_count) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_mac_count_0, sizeof(dev_cmd_dst_mac_count_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_count_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_burst) { + ssize_t len; + + /* burst off */ + len = write(self->dev_fd, dev_cmd_burst_0, sizeof(dev_cmd_burst_0)); + EXPECT_EQ(len, sizeof(dev_cmd_burst_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_node) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_node_0, sizeof(dev_cmd_node_0)); + EXPECT_EQ(len, sizeof(dev_cmd_node_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_xmit_mode) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_xmit_mode_0, sizeof(dev_cmd_xmit_mode_0)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_0)); + + len = write(self->dev_fd, dev_cmd_xmit_mode_1, sizeof(dev_cmd_xmit_mode_1)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_1)); + + len = write(self->dev_fd, dev_cmd_xmit_mode_2, sizeof(dev_cmd_xmit_mode_2)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_2)); + + len = write(self->dev_fd, dev_cmd_xmit_mode_3, sizeof(dev_cmd_xmit_mode_3)); + EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_3)); +} + +TEST_F(proc_net_pktgen, dev_cmd_flag) { + ssize_t len; + + /* flag UDPCSUM on */ + len = write(self->dev_fd, dev_cmd_flag_0, sizeof(dev_cmd_flag_0)); + EXPECT_EQ(len, sizeof(dev_cmd_flag_0)); + + /* flag UDPCSUM off */ + len = write(self->dev_fd, dev_cmd_flag_1, sizeof(dev_cmd_flag_1)); + EXPECT_EQ(len, sizeof(dev_cmd_flag_1)); + + /* flag invalid */ + len = write(self->dev_fd, dev_cmd_flag_2, sizeof(dev_cmd_flag_2)); + EXPECT_EQ(len, sizeof(dev_cmd_flag_2)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_min_0, sizeof(dev_cmd_dst_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_0, sizeof(dev_cmd_dst_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_max_0, sizeof(dev_cmd_dst_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst6) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst6_0, sizeof(dev_cmd_dst6_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst6_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst6_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst6_min_0, sizeof(dev_cmd_dst6_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst6_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst6_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst6_max_0, sizeof(dev_cmd_dst6_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst6_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src6) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src6_0, sizeof(dev_cmd_src6_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src6_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_min_0, sizeof(dev_cmd_src_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_max_0, sizeof(dev_cmd_src_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_dst_mac) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_dst_mac_0, sizeof(dev_cmd_dst_mac_0)); + EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_src_mac) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_src_mac_0, sizeof(dev_cmd_src_mac_0)); + EXPECT_EQ(len, sizeof(dev_cmd_src_mac_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_clear_counters) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_clear_counters_0, sizeof(dev_cmd_clear_counters_0)); + EXPECT_EQ(len, sizeof(dev_cmd_clear_counters_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_flows) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_flows_0, sizeof(dev_cmd_flows_0)); + EXPECT_EQ(len, sizeof(dev_cmd_flows_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_spi) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_spi_0, sizeof(dev_cmd_spi_0)); + EXPECT_EQ(len, sizeof(dev_cmd_spi_0)) TH_LOG("CONFIG_XFRM not enabled?"); +} + +TEST_F(proc_net_pktgen, dev_cmd_flowlen) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_flowlen_0, sizeof(dev_cmd_flowlen_0)); + EXPECT_EQ(len, sizeof(dev_cmd_flowlen_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_queue_map_min) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_queue_map_min_0, sizeof(dev_cmd_queue_map_min_0)); + EXPECT_EQ(len, sizeof(dev_cmd_queue_map_min_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_queue_map_max) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_queue_map_max_0, sizeof(dev_cmd_queue_map_max_0)); + EXPECT_EQ(len, sizeof(dev_cmd_queue_map_max_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_mpls) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_mpls_0, sizeof(dev_cmd_mpls_0)); + EXPECT_EQ(len, sizeof(dev_cmd_mpls_0)); + + len = write(self->dev_fd, dev_cmd_mpls_1, sizeof(dev_cmd_mpls_1)); + EXPECT_EQ(len, sizeof(dev_cmd_mpls_1)); + + len = write(self->dev_fd, dev_cmd_mpls_2, sizeof(dev_cmd_mpls_2)); + EXPECT_EQ(len, sizeof(dev_cmd_mpls_2)); + + len = write(self->dev_fd, dev_cmd_mpls_3, sizeof(dev_cmd_mpls_3)); + EXPECT_EQ(len, -1); + EXPECT_EQ(errno, E2BIG); +} + +TEST_F(proc_net_pktgen, dev_cmd_vlan_id) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_vlan_id_0, sizeof(dev_cmd_vlan_id_0)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_0)); + + len = write(self->dev_fd, dev_cmd_vlan_p_0, sizeof(dev_cmd_vlan_p_0)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_p_0)); + + len = write(self->dev_fd, dev_cmd_vlan_cfi_0, sizeof(dev_cmd_vlan_cfi_0)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_cfi_0)); + + len = write(self->dev_fd, dev_cmd_vlan_id_1, sizeof(dev_cmd_vlan_id_1)); + EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_1)); +} + +TEST_F(proc_net_pktgen, dev_cmd_svlan_id) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_svlan_id_0, sizeof(dev_cmd_svlan_id_0)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_0)); + + len = write(self->dev_fd, dev_cmd_svlan_p_0, sizeof(dev_cmd_svlan_p_0)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_p_0)); + + len = write(self->dev_fd, dev_cmd_svlan_cfi_0, sizeof(dev_cmd_svlan_cfi_0)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_cfi_0)); + + len = write(self->dev_fd, dev_cmd_svlan_id_1, sizeof(dev_cmd_svlan_id_1)); + EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_1)); +} + + +TEST_F(proc_net_pktgen, dev_cmd_tos) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_tos_0, sizeof(dev_cmd_tos_0)); + EXPECT_EQ(len, sizeof(dev_cmd_tos_0)); + + len = write(self->dev_fd, dev_cmd_tos_1, sizeof(dev_cmd_tos_1)); + EXPECT_EQ(len, sizeof(dev_cmd_tos_1)); + + len = write(self->dev_fd, dev_cmd_tos_2, sizeof(dev_cmd_tos_2)); + EXPECT_EQ(len, sizeof(dev_cmd_tos_2)); +} + + +TEST_F(proc_net_pktgen, dev_cmd_traffic_class) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_traffic_class_0, sizeof(dev_cmd_traffic_class_0)); + EXPECT_EQ(len, sizeof(dev_cmd_traffic_class_0)); +} + +TEST_F(proc_net_pktgen, dev_cmd_skb_priority) { + ssize_t len; + + len = write(self->dev_fd, dev_cmd_skb_priority_0, sizeof(dev_cmd_skb_priority_0)); + EXPECT_EQ(len, sizeof(dev_cmd_skb_priority_0)); +} + +TEST_HARNESS_MAIN