From patchwork Mon Feb 24 09:22:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987669 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (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 982FD2512F1; Mon, 24 Feb 2025 09:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388992; cv=none; b=FVQr7lKlv6dQJf8H1IbW+5wqMA4wSuFaucJszvXFKm0PgR/LejZ5B/83+zmQqzgjJ/WoRHLcsI27OybAPR9WaYqqJNXNf1zCJb68ahnxmxIVeJAZVFsYWckg4WRN+WJJaWzSj7HwCv1jbsX+qfWwu5eY2De8+cHz/GPZhEp5mXQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388992; c=relaxed/simple; bh=ksZkkfZczqWkUOUwhDqkbBYxs3OevWU1psBwOZOSoMM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kbvYa4Q1VJenUczI+u8dHvIkeXscGiKdYPJKUrlXjKQNKQKFWZgMJHd4+YvhnTiCgasJ+aar/0tZ9+6T+nCzIjtIpxhe26oGkqpsqswV63o93JukRqjWuqBSu7GlIYKFdoOHmTgdcCGFpETAM8o77PVamyNuIOBcQhaDKfCh6Xc= 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=IQu1amM5; arc=none smtp.client-ip=212.227.15.19 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="IQu1amM5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388971; x=1740993771; i=ps.report@gmx.net; bh=ksZkkfZczqWkUOUwhDqkbBYxs3OevWU1psBwOZOSoMM=; 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=IQu1amM5PUbGo5MWFQ7sCW6W2KKK5AdnEsH+awwECBKkkJgMRLfHRs7BGLeNhCDz nlmgTJBrZsFTgY3WaNgRLgJ1bT9Bh1DqIEDMzpOg1Poh2vpKMqGcollJDM7hCZVzQ LVGTBgfQDl2AxCe2wDMyTUaY8V3MwqIkunnST84MHqdwd6ABd4uIM+22uJtvmV2TG r18IlQKVjl3Biq/BUW4CFK9RQzBn3+3iwhvancAvubkOn7BWtfLPhoXHQ4NPI5hhj RYnt/PKcHiCbkIPi5FJbs3cWYOCJ41HSHetSGGWSE4A0lUJD4eLO0HkBYlaRG3YMa c8bPfjbtjTuYPLJZig== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MLQxN-1u4z840Evz-00OYxV; Mon, 24 Feb 2025 10:22:51 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 1/8] net: pktgen: fix mix of int/long Date: Mon, 24 Feb 2025 10:22:35 +0100 Message-ID: <20250224092242.13192-2-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:D1wnGvw6mJOEWaHzPgQtc/gKeC5y7C7JXhV/gNtXkegV/cOCHXw wFC6Q8YJa4bElNUV5w/8qJzGqpZ3IojhvbDUanKlr3M7VECY7A+4sjKxlYUQBEvj3tnoWl9 gFiSdnIO0bbcYxQI2SORcO3X5NO7HahJDgaYnmG9XVxx3w6eJkkrA8rTZHLujotwLOotTGF t0ZjSwqpSjTGY4LatY4fA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:UUXUDuHYv1Y=;YPhuVndzRcl1L4pKOmjFT+eOUxE Z7wDUnQqFRj4wXtV1XT5AStFmdLzKjW7a7MnT8pI1iINjlScupfxVEzux1CJOYI7x+ZlIZvjs uvqElT+xKKml6ixUUL1jEuAON0vSMOCxSu/G0mzk63LoTg5UAVD9QrimUg5DmVu+BW80vtkZO ZgazrnqwcQN6YjnYDBF4ZeHMv9XlgLjckKPg7de0hp5keDHH/UVxJOSrxEO11YbMa0hYNodLm N3I1T8VVjL3UKfbMJO96+WiKT6WC5ZVl1ez90s2UcoCNWubTBEwzQQkFZbYyjaj69ih18hD3Y wIokAKJ2ORC7l4pcyaHDpE8fbTB5qCHzT1A3+8x8Z1cn3Lin/2VWvPHLz6jh3f5SssqN2+aOS miAQptJP6RztH8mRDQcbzvTlkykiv97nuYzaxJLLhIXAtM10lfRn0PomjkEmr6S87c1nJ0Sco KGOt1TbL10SFDByO1udJJOz59ktUzI9IOmmG22yY2uWFen5ZilVV95pFxYf5TYl9Rg/wzi8W8 SzMXQNJV0nnL4uixfXgurPhcFGw5cxvtonKH5ZoKFo2ffwa7iev7aVjtbKBi0cpFhlG29903M EGIBqLh891eCLABHfe9zDO2EYX9sbSleMSPmFfyu4+i0s0KtGNKfndzqk6wrBx1zgPCZJ3P4/ oJo81h9hXcalpeswFLVQsCodWb3boaLZ7ZNfT+znwZtBGiM4WWEgEEU0UJokeOlP6bxNBcZmr UiuYg8xBk9VmTc/Xs7nOLgakMPmRAmF+11xP4Zr7GimzX6KCvq1JNYhxK45vuCvHThsffnJQw PRn5o7IfBeiVk0IWklNuZZAfj1OPCt77vBAUMu/8SnvksmNjOcEdw8gAXdE+z/7zhTZJHmFXj D2GQHsOnjYVUlAbCdPbPxK47v71yyIYCDHbX9iFaNG4R6oB/dkItKqmjLOD3R4cHbbBznGGwn Zavi3881jM9divsJyMY86HdNRUPc/TWjeHReQ/ng8aA869PHZ4IhvRjMD1s2avwhZSmH5F9If 6uTYXMWar2dPLZ6Fl1QF5iyyUdtfXMMaTsqjcVuB5SEC24Wu8XRDO0J0Kr7gnp0tpzahMr3qx LvyXqA9TKljP/xnRN11batKtRIREgUnfF3RnxLvRf+fsV1/J1QO0Fiya5brer4j7uEzH2c16F 0H9g+3q3kSdUkOxwgqKXO2bX34cMrJxXbk6innJSxkZMIL2uAW8KCNyE2LsZpxcsatt2/s2i0 MyddMhE7xMHn0hKI6NICaNUpXZCWKMrenFuDnm/QLZ+IUC6DUlIPnJDlhg+XNXIymmjt1JOFk 6ET45z2gXGHqN1iKc1HZjk+Q2KZcvYLCNkVoH7CnOFBhn9RmETBaIkbhiYSi+RmLQ3ivGtvhB 2o+MZd6+AuCO4j/D61OhA0PXaEuo7JwZ1uRmlyhHkyblgo0kTh9jt4Qici X-Patchwork-Delegate: kuba@kernel.org 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 --- 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 55064713223e..cd6b6c0dc0dc 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -746,10 +746,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++) { @@ -768,10 +769,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; @@ -793,10 +793,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++) { @@ -812,9 +812,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; @@ -844,9 +844,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; @@ -895,9 +895,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 { @@ -956,7 +956,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; @@ -1883,7 +1884,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 Mon Feb 24 09:22:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987671 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (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 6E77324E4CA; Mon, 24 Feb 2025 09:23:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388994; cv=none; b=F7VmAOyP4Yu1Hws2pKjAyWDE5IC4PrCEPjqvTbVKoWZ1D5F5SNdoUyxGyv9JM057JVWUY6ochW6Iv5dNpDKymgX3AuGjlRsW+xZj4otazetUFIeIkKMG/X9Oe849u1j2E6kmUWGuIEdSLK6sK2lamQAgDoVT7jC6q+7+tRUTLhE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388994; c=relaxed/simple; bh=iHD6DYWLmYP4hxJV2dJ//Ylt03ABBIjqXDOxt7sZSkE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YMQObyij/zZ35ARB0BSkPkA6pFIPVYgD1tntJxkm3SIA0a+a34bQNeNRsQdyC1ABfYchYyvfiO5KJwvRj1BtJibifId2BdkTBCpnkh0ywneb4Ek4TDVw3QbfDpDMPYki9VjoydhAFYVHAhs6VSm0fTZmNBRP4EP+1Y0POdvre1I= 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=GgwBqJgB; arc=none smtp.client-ip=212.227.15.15 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="GgwBqJgB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388971; x=1740993771; i=ps.report@gmx.net; bh=iHD6DYWLmYP4hxJV2dJ//Ylt03ABBIjqXDOxt7sZSkE=; 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=GgwBqJgBN/DCF2fQEFTpQOF6+IhnpAV9m0j2Aa6gHMfBjQUSzmhSKvhblDLnwdyy k8n8mkbWG0YlrJRHUWZ0xxZEGbOa4O9cot+0wH5orXbuSWMA92SOw+9gpMZhVAhFT yPAU5RpdHhP6X/u7ZcpQVZKMh+yQT61yL5OX2BvOCwnoqkXjuLKhF4UUV2ftPeDgA g0QuwBdREjBAmUtZGxlQqxvsb+IVSthZcRwMCykwU77Qax/m3k0nv5L0MgtpbbAjS L37tiKIqLtBBHMu0B1FQGt9pi73MH8tbhgbBYaCsnxqc+/cC00T37vhqRozSrTmPp MqXrPcR0P0tmENHe4Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MRmjw-1ttfNp1mmI-00Uvo8; Mon, 24 Feb 2025 10:22:51 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 2/8] net: pktgen: remove extra tmp variable (re-use len instead) Date: Mon, 24 Feb 2025 10:22:36 +0100 Message-ID: <20250224092242.13192-3-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:0QDRXZQcxdd/AzJ6iFfiRuvOiEEDyW7PFH2B3WpfOxr52BT4UV8 D8RokG70oPUXyfCYtgcoS+k3jzEHffXOsEaGgAwDU1cRaSUGGe/OaSx5ebecfPXBEJ42FUn GoYbc4nNj5UnmPW396YNiurkXWJKachiKu5wPq6k0MP+begcIt1D/LRd4fZuQpcartwpa8N dVhd+t6Tfn/IPBLqq3/7A== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:xkwWlap+HWw=;a0/VykgvS3jHtXif2P1BEjYDvMC Xk14ZIX1CfaW8DDmVGsh5pChOWMO21hpxKY+ZeN8CZ4xMEnfQ2YBuOLJoB2qN8C6SuydB4zbE a6n8uKIlXN9ojbduABjya4vbacHcLjPdFSOcE4D1X+VbqgID7NO0ud6Kqx2P7EuQnyReOy/gR C9xOgBkXaRonGqEsXMK+JZvTKLkM5dRzNhQGO0ng1HSZ0bNaL0qZI5HECU6cWwLB40Fe72gHa EksM9Aa+DItjBqTR5wuGSD+NBw0Q5H+SGpDWs5rLrPD3B9zfVoVZuPsckCY/2OBg9oJ0q25r/ AgFegJs/MTQm1KAMrCdJu5jiLZHb8Mv8A5i4ECmA+CLJzdYRNu6OaexFBWczJpxC3k3mPtMoN qFJWocvRr+9pK/bUlB6QjicxU3YC9OsKTBjpT/Ioz6S7sfMPHMtMuHj+xMxTBYmGWdLHmlS2x WLd3E3QWjLiIim8Ov8JS2JV+JvJYdFzRA0dpaN9YsZwVV16njw6cV+52eSSj0qs7XKfBJikaa 1vt67gZphSNCYM97Ysmsuc89sHdPWtiVms61siJlQce/ec9ZIlVONT2Hmhr90tLVYrq18cYtC mkbEbL/UNxU4wtMrG1a9Twawf0E72vEdkNv7I3nYiyyKysxhAYKLnjwcL2awstBYeQSaL+xha xsYLrIFElJtAKWVBeLYueCkII6o8RWUP7GWWkr8LB9YOH6pRF6k5AYfvzMsOPHsOlYNSEQ4uu ps6dHeuNUs0QHTfQuWyDP+77w+z+o6VTYaQKIun1GHUBoF1HN8lF//vorINdMmsEDXS0v57U+ MfsV6Fw5oA2EA3saBARKjMozyugWHS7Glpy/pPcsfF5dDSnkaGkjKoH9Fo57fxYm7Oh3CsdYQ z1C0XooQidfhtF6XQ7dXz5YuihT15EfPiPZXfVZjc5ClPglj/KWxrPNReIumIEz4oWft2t9gw jbbf9MSxZjwcPLRaYCWaiKvk76ttPx5mA4iqtaV/4pSZbgGSXV1R8oZrZ+vFXr93oUc2hbcEc Qcs/outhJueZ7U53+KNIkc30pnRubX55y5JvhhJgnPmFmvJQOz6pP1U9SHj8CvWB454KfNzRx jwDZLu0LLQxO/zFPVmMO9dl1mQC44PP93yW2FHyE9k/9S5PDPSLqQmU+Ssn5QNbvs+QOGbA4L Gh9rIBU8gbhfvPrTcGCFxkZohJ60EV+zdpxww7s7E2lljX0mc/qekUXAVGjK2Z+kEKawcBmBc ulLAYZp0QdEqJso34t+dNWngn2he3cXr/U8SngQsVLVpYgmC2K3WotsR/2KcK6D/scxlayys1 TEQhq8etVaLw5QyjTP9tgTmc2u1rKvNIBquB0meNL2vLEqujSX+TkGkaRrmRmArnyZHGVtULJ y6Z6+PKYBFqcGHn6S2Yq+q+uhBsXfhTCj1a6L6wJiHlVGrZnJfRRG0JU2x X-Patchwork-Delegate: kuba@kernel.org Remove extra tmp variable in pktgen_if_write (re-use len instead). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- 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 cd6b6c0dc0dc..b97a94cb85ac 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -961,7 +961,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]); @@ -972,12 +971,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 Mon Feb 24 09:22:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987666 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (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 778EE24BC08; Mon, 24 Feb 2025 09:22:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388980; cv=none; b=OEGr4HOHIJmZ9lvoYtwEHHi0dfBRocqX4pouPhyuQtmC0iUlN+LfYLSwSf0YNKIaAIHnwVTGMkMy39pPGdeyJOeR2qxQtHnP+D3A96m3J/JZBl3Y61iSNAGIT/4E6y1q6ogXKHXcqhywePKuq4gYZZBwkdOeDg3n6+YrGH9jmJU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388980; c=relaxed/simple; bh=j+ZMvUdvZ7CSrVjG/S0MjvEWJ5CEcbjC4jhnBGbsaxs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kJBXe3AEEpgVCru9JTvk8pytsOxH7AvIC//94gAn9ZYvy3sg7FQoiaNSVxohBUF+satxInTy9IfnxrCVx9PXCEfCLwjhbp2o4KOT4pWM8LR52eRWpcrxV4VbwnalPYZHazOz6ChWHGHe6EyuRfEBXToOJN1MiEHoM9cnjKqGLew= 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=Mibq8nS0; arc=none smtp.client-ip=212.227.15.19 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="Mibq8nS0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388972; x=1740993772; i=ps.report@gmx.net; bh=j+ZMvUdvZ7CSrVjG/S0MjvEWJ5CEcbjC4jhnBGbsaxs=; 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=Mibq8nS0dkfxO5upgth1mXJBmiBkquiDvxJezOPmKv7Ao2H9nT6RnylAxFHCP5Dk CEvSw6IEswfq0mUthaPk8K8WKG/U5YWLjz/w7dev36MU16z5JU3I35121h4ua717I nquH1/5mOVTejeGTtJSDzD/w6frYf5UjPe2RzdRii8WBPbST4fCtKW++zZ1Bi1X7/ /uO9NolkzViIHiZUQFSr1su3NeB25MoBayUx2lFHx/JV5ubGhRohnF7O+UDwNU4pK oc3RDlSOdRaPDj5c/RF1m7yakpFlhCXiWShdWjWBS03QSf5zHZPTDEPNFvrb4ccfD F0heFun1WJzslfKOng== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mk0Ne-1t2OLD3Dy4-00n9Tu; Mon, 24 Feb 2025 10:22:51 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 3/8] net: pktgen: remove some superfluous variable initializing Date: Mon, 24 Feb 2025 10:22:37 +0100 Message-ID: <20250224092242.13192-4-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:3o6Ia6EmkO6p/MdUU5yA8mxbjTpHv0TYmStRBQccVuD/XjaM6d5 wB8/gsQVENCs8xCe1CBmBtgPLw6694rXG61Js4sJ43tOA5TAdG7OyQ9hKlJbmNHr3q5ZGIi KOe1zWJxeGEWK036/KE7RhMOf2PA4AVTUSmKy0g/Hp2AZesYuZQXF/D/NXOk4Wz4+h1JXx4 1npj2GQGMd7LiNhnfVNog== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:IU7UvSRrSqw=;uLmh5DULuauslwE8XtK8gCzjuLr segtQwEVYNF5u/G2n83iNBOAQLsiRNHGFKyD8i8hOTXG9KlGUVuaMeMeftiIQcBI4KKIOX05C 6TqvRSXDVhSfKOymZs9r8SRiFFSznmoiygTFm+/G92B91gzv8BOikwHFLqhhyNdLmeg6WsaO7 iyMb5xXfoEJf1Wt2pgKmvjsoz9nFoGHltUrP4ccmNyu11bJOyQdcxz/IXIH96PS1mS3K7A2dG w8beBp6LVrE+Kvu4Gv54rcbUAixlI31KK2hcSdAGGg+gNZ13k0wa5WjmOK58DY7LyGT4ymu0s oAsGaBGemHw9u0BWC6pfqNXWlDiwvR5Na96lRUC3jGjwML6TlT8xXVU/pKgKN8Zr9nwqbk0ob R4CSS91MtBEkpKI/289ifvxEJjUTC3sHNHln+iyt1vEnSE/TtP0nhkrq4OxxK934x0LHy+T6T S9eG58YVSpK7AaWssvTjdQaTVmtrCbeAYYivOTCs8AuVn/LMov34jWrRJKTVAJA3P6O2A9kxn kQNJFbm96Rfa444Px7RFBNkfgkHQFGQwafKKEKlFD+AWXgs7sZ56zVaYFFXFKijElJkDZi2Q+ ie9aaZu57ZOPJAAD3jnNTUrp9E4jQMPm/CgrgCiu5soJiGReX+JNPQHcczTkqWbudfVWuWWR7 9R9v3UFXffjqiXvlEF2kNVYLnA/Pi11VK8Wdy+98HbRO6RKgIVBs1n/qNCMVMoJakcKRruumk i6lHMUKteAEnxgrSGbw8uMGaFQrc0lJNSRkcAb1GQG2ImsAaPUObZ6LwQyJy0eWJpMNtuqTIv BDVzHTekEjYtjqPbRJv7aDa+V2vKwPfayJRct6B+RIIDrr5K2KMHS1M9ZhwGDXUZnOdtZI/XD NnQihkAJGpk4SbOzGtVsvAmqWmzE1zYyLxip7f9j3dMXnyu3Bkst6RNmogB0ARyRhqd50dXlO NmVPn3WOBkJYMfqM9cMR85rXfzF+GY1DtfQyDzKrDq3uKP7pqHM7/U60mVy9gpHO3HGMLdiHV rc5GcWihuc5JkX5t3MYvdcR9Wu5/3R23IS90RJFK1xK3kD/LGm+QgcLOVDllsPxGMlthzGY5C SUZ+8LLNrS/MaV/dSIGVdbdC81kWFcHU5u5UxxTY68s50LoaM9hU9/bNEaDJcv4XXuI+JjtGB MQSfE5GMcbwzcsAGvYio+Mn9+CFAtyUSpq67k/EpgbAJG/XoB0s+jVGmkVr1bamYQzrr1uimZ kvtbjgN9apyxXKOlgYn2byH6QyOO98w2VLBpDKkircis/B5Z5YanRt72nG+HNb4ICUMIIRwaU I+Sfm21868REHnBf45VwziPbY0CIUbD0IhcPPBL0KN4If0lpqkikFjP1RNv0fxiF0gO27MuXR PIvaf6ybs+9rEfk9Ogm168ou/JDOFJtjtwE39VkWeJRdiTt5gv5MnYHCnV X-Patchwork-Delegate: kuba@kernel.org 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 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 b97a94cb85ac..204f93de03aa 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1787,7 +1787,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; @@ -1803,7 +1803,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 Mon Feb 24 09:22:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987668 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (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 976E224E4CA; Mon, 24 Feb 2025 09:23:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388986; cv=none; b=uOX99yZ+XDsK0IeOxmcK+n7xfouwBQQbJb/1UE3d7ka/Tl25cxY837s0Q37PNo1h5xTW77EA3PogN8/QtzW3sgmxQB3bIuiLrRpAOWZee+gcLU3l+Ijxtmc4JVTrFwdkLx1X1BbkLk1C5thlXPlENzBIoUd5CN6d4flHye+1B80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388986; c=relaxed/simple; bh=nFpR1GNOqJgIdZaAhB+vgdglHLY0zBSfUjt2gQkoN94=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M51l1zd3cGUPFEQFmrXwc7g+mfpxZfRMFHb00KHT/eEM2tJ6Czbe/lWgGRWafTyCcII8C8lz1BxsJCM2QfAN9HzLt5bxaTdmu9Tm50OQFBsUr9uZGiM1D6qBKkuJOLhWq7kU+I+uejgGUBEHFinfPC0yLpbeaXlVrsnw70lFN4M= 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=OSjKnjRw; arc=none smtp.client-ip=212.227.15.15 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="OSjKnjRw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388972; x=1740993772; i=ps.report@gmx.net; bh=nFpR1GNOqJgIdZaAhB+vgdglHLY0zBSfUjt2gQkoN94=; 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=OSjKnjRwZNdnb5Yb4n492YiOGFHGyzyjuMgOA15t7CcJwJAlLxOzI+f5QNehSQ/0 RgJxlQWvZdXNhKWpm5zDn6XlcigtTF3a0yR/89PfGAFXM7qxKr34zrOaYGUe+SsUi 86dO1AtPlt6cowmyqb510D58XvqZZ84Gg5FHpc9r9zGiNhUe65V07ZboMhnIrmq1g nkNekONxanrzVcpj/FV5BAbwZ76clhLQy+mhp9wnQjx7fHhgoRYx6CY/rohZA0reu E+WgUku5erWH6GMtsvYrZNMTLFeyMcMqqCrhKs9dkDp+udjBz1jSUVtKsa4U4dJJo 5PtIUyPOLh8/AFxBHg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MPXhA-1u0IAg0W3O-00Js7k; Mon, 24 Feb 2025 10:22:52 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 4/8] net: pktgen: fix mpls maximum labels list parsing Date: Mon, 24 Feb 2025 10:22:38 +0100 Message-ID: <20250224092242.13192-5-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:D04AgCst6nQRznuby5CymvqTa4+iPaxfoklv9B8lQevROeVX++a GX8CyvhnddmjXKUhWiI10xXgF8mr9lNz7U98LNiDmv7Zt1UayX0Jzkqe3TPpOWUvusiTPWU SZ2CD5aV5kmaA6x86Os8ZcSo9EKDt2yJOAdg3Bjx5Wr6QutwvvtywxYgT3rQMHF6tOSmWZG 69ZzoRfsQ6IVhq6Is53TQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:SluIFem2MTI=;+U8lB0/YuePV04yr/mC6G6SKBPr ikMIwtte9XQHSiyStT/VZjHBFFrrr7VFLFY6k2X8UPzjsDH98kopb8bndCN4UKQ9kQJjvOzYY Mz1ghFHWIDh9fhhP12w2XsjNHG8bb2MVMghksswDyTZAdX6J6y4GqzBWrWNZTxPtcojnmJI+L tB5329nqO30yDG3UQ+DD+88E1/Sndcr0BbojFZQfcgcf9/d+yrxl9dOIwW5IFoXsjxS9nFQ62 gSsJnHS0BxO9a9O64nJe2RhaHGM1LM3TlDWxSA2EewWcG4Cism2NXsK94fwykz3EUiC+4AZlu H3Yw/4ZB+EETdbT6WXSj/JT/QpB+gwPTZ249+8UERsAciGm12pZTmWtDBgunVXqgunrzktXBX RCFmMRDMohBwou4/jMV/KgQuYooVBVjeinDVIoAtP9FW4Aooqk2GAfpWajsc9RO+2xoOm7+3Z UbIMcMEeL2vUnShlU/um3hUjo2CwsSAYVNV4Pm7YzmUGk0UZlo+Av+tYJcaFZXRzpyvlh1ZYK IAVev3Dk4+QjXbbgpjleeEN/v28/RIQ1SYEd8oLXs/hisDZNB7QuGbF2VgeXUQSrx0vOCyd7X rlx8UCpnWLOxgQMt9X8dusA/PPQTFEM1x71AlMWpj8ZONlQvNU3X4Nfmr3L4tmnIESZLTD9rR NKCE7W89ZIiXVK2n7KT3uhJeVpsJkhnLX6KmGkmlCMHZUs30/botmrUMIh/xYPhCyXh2ayIL2 7VO9dsT6LSqn9RcgRL/0eq8VJRiCpoNbePehyr5/r5ohvw+y46DWhgD5uFQ0LJZmLit06Ww5J W8Dpsw8HaYA8rGpYGw79NmOHDMwn8500/vaiFmGQ6ewv2KQA5LMZeh9lhgetX6jzoWvtMg0Qd o/GT6W9A2iWY/4mtamDbPH4gQKgE+WB3+8IsPl3OlwRXFE8Ng7wQTzf6PVvrkPBhErxpgOcvM V7/vOvSjOILljyyq1PI0/uiHtyzeQVEs8jtG3mv0b5HIZI20J8foeHJBsnGxyPqy7lduNqkQO TN2Y9eyCNCo6R2+am8x8x/hMy2nPvAmqtij4q/U/NwMhWlYfgfChXUiYESFFGhKaYgtdTAQhG 7/vuJ2TULBjfZU2elCokFLaMW9jsFINIjLNiFC7s4aUL04xy8fqd+KFQ2XiyY7JSEAf1iS+4W aVqL/3dG1/4f1sHoSIi53f69BNqDIiS/L0QfdyJwURiRryMgLyzSrHHXrMy0haThCM9Z9wdEI 7VMgwOsle8H4bFWKcvlu6UOJAvlJXb+TIiBvCPowc1sYm2Yvq/Ghc0p2TLC4uImJVXPVdXXXJ VgDolpW/DkUob7gkyF8+EgbOZT8YLa7R+8O2Mc156l81G3OwTCVhg3cyyWRJ0baVOOCrj8o/C XM838jdBTw2WcBjWCzTJubmTsDa2GWHzuneT5XSBZKIAFGwFjWhcV6Gmcn X-Patchwork-Delegate: kuba@kernel.org Fix mpls maximum labels list parsing up to MAX_MPLS_LABELS/16 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 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 204f93de03aa..03ea6b5db156 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -902,6 +902,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; @@ -913,8 +917,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 Mon Feb 24 09:22:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987673 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (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 9BAC22505B1; Mon, 24 Feb 2025 09:23:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388998; cv=none; b=bsReEer37YuSMJ4r+n2/u/RPTECtC8KTINTodotniyBS5vh1zFcXhvY+CYthuTfoY0TVyuJYvOx67Vv1UUwHI60qAzbGs/bCUwCO8Fbglpjj5dlok1W5YrfVXwxWkGuFO68BAllip65jho/k1uVG8CegSTBI16FzdrHDhgVEF2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388998; c=relaxed/simple; bh=vQQ6w6eDr0MYCIHGo8ZnUH/xTkijbLRuGfMaYlsF+og=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C28poB/OusWgzSPveY8tDFkZSq4C0hG+aVsGMj/0/9TLDtj5r/NE+XzdLeF/7nqE6L4Nolya9N7jFQZd7X/RBK/a22KG1eVQOXRfLh3CYoFDUyhs8a+VFrf80vU083ooK7MTWEPG/s6ny++bHCpdv4qDZeUclMegvK3cC7EZ6wg= 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=OpPWzmJh; arc=none smtp.client-ip=212.227.15.19 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="OpPWzmJh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388972; x=1740993772; i=ps.report@gmx.net; bh=vQQ6w6eDr0MYCIHGo8ZnUH/xTkijbLRuGfMaYlsF+og=; 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=OpPWzmJhGDZSqB3JwQKnlAgG7ceyhfT9e0egD6X9Qiwo9jFJaX3in79DR/w4WWbN M6jjVPeqFfJdv7y1MSW5CiDd3EviyiLT71cg7/oL5mdRtqXVl0CFJCiUcH3SGJoSf vMtP15HWRYOvVYKD4gItc1rG/x3uZ5JxgK+eIGm5DxPofq3rPye1L6OD+OMYD4rA2 gN+/q6mAF+cIyRHsldkUfAHqBL+GWzhKdZlKqhMQDRDPu2rER5B6q/yKMhSCd03Li AjsvZlz9/bD9kOExQaVs2aWww1sh7WJLD0BCUrfzibDdIXCpPgr+rJUDR7gCpCMS2 zEa3PeR/P0aSr3J81A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MnJlW-1t3VKy252a-00qRGg; Mon, 24 Feb 2025 10:22:52 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 5/8] net: pktgen: fix access outside of user given buffer in pktgen_if_write() Date: Mon, 24 Feb 2025 10:22:39 +0100 Message-ID: <20250224092242.13192-6-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:WGGooYX8yzKl3JsirN/BGOAplE045kT3+osNDt7hKTQObDnHpcg 3KkUj3Xe5/UI/arUE+L6SktixutDIqKyD/FjAcIhv7xd33DE6L0boW9AjZOgVUPGtQtOfI4 fJWH1CJhKF8Gha1Nv5x2oPJwzYzeyl5ZCIOFX8FYPX+70WOmVtGzSJ2Ei0Cj+k0bDKCR37u QHudHs6PNNN1S33v+f3tA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:/aazA57AwPE=;jQQeMiVC3W+vMhr1mNs3GrlDowF CQx3gyJXYt0yX8qrj/iuKcXyYKkU/WQRU9Sv2VgFpnMNEy1zzbjqC1pzUkCLRlI4OcaJd8nNf jfIzDD2sCuhgFXqb0UL8u4QTZ1UTf5wzjsrrgM9n+0QOcllz1/dNiPtPa694KhQaHyuNL+IK/ 6O9TvFwhn++/WK/1dEMoMkxmGOTRGEjNdyXh4iIr5dtLu4e13b0rk1KYOASGGjcteUeg63gpx EM+cMf90qKJMH6d6WHrRKx7fCKzgNsmJ63rGBzBHltw9bTuNM6DxG2qeBFlks5jrsiqn+WpqS +oOh4AyNXps2tNeqbFHpoHVh0JDcEcy/qFKvpavdg/rk5rbn6IPwBONWQ47TdsoMizx6gLq6o eGUyJ2+HA75rlwLR32MlCO0PjG4ZIy5hCbcfdI7Iu6iWMUTQuf3H3q3sZRDu9EEpId9GYnkoi pTE3d2Ogwkj9/lksfmzK8hldx96VJPmyvgWz+K3FHCLD+Ktve523vBSekhlWSzf6PNzt9UBUI t0jzNF0hMClgOAMOT3fCELTiQpFRPZXMw6nQj2LVbKCGprPwpVyqAHoO7gGB6vapKQ7o04U01 HTD9cUx3TaOWdLAZRQhX5QPxDJhBtH0yRb9T5B4ZJnvgyCRJgU/ktdaOOsIz0z9pgeqBBz+Q2 iigRTyzKLnTr0eipNKKdMDFICoteXLYbkNWoIa6yvgsMEtiIGi1s8NLAGgYhxG1GPY0BmRbPk 1rxMv1WcapqHp/Nf+Qwdh3ISpPxq/yIh1cCbRz3l3pxL99QeUpvWfPPTXAT9fXPudJSbov6ei C6/7hIxvwtirnPurdPrgfAPEmrbrVtdcpVZZhKBBoNiIHIv2H+DIurZmGKobW6kOvdXoDo7vY 32hEn0VqrI2P3ZSrvoWvXKlT56ML3uXn4OKLfs/DT1ZCMjM+uxHfNFE3RZmzCkukabE5NVobm 6njgOc1i9XR3pgVeWBbHPpjSxWgM8rW1nxCvBvebMae1tyew5yI3pkQvGoHY5RvtO/JQWlHMb dy/U7IEFYxrEjE+k+oNZLCfI3m6qifxb6jLxnlaOCq0OffeoJDCMmvpPRXf0beRMrz/WqKrTl 2ANu/GolUiPQ/VSWl/ZH8FcQdKUF3LgrwMIJLjGNeURmM4QKOMtoKWvO0pHiRZE4rSpebvqeE m2A8ZBkizviS29o/xVOqcgwxRzOiUsCeapRLAO+y9QsMxOoSWEOWw9Timrt5vZJWGPGFaej8b H9V/MDVig4ztQOpQC1tJ/OtEmAP86zEAuEUnOSQcO4iyZk6R1UCn9BkVF2XFNRJYCF1VCi9XX 3lGPtGQlRXpJhIjjifGl7V+j9QCK+Of4QBFOwB4Xy5lcXGSNmHBT0HRYAdLOTJ87OTJI9tyVh u2wywL52UoHmRRvFtFBCCqCiKtYwj+qeg95ROxA2bOJeyhe4UCvq7yBVa9 X-Patchwork-Delegate: kuba@kernel.org 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 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 03ea6b5db156..ae5e81e62733 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -842,10 +842,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; @@ -858,10 +858,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 */ @@ -872,7 +875,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) @@ -882,20 +886,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; @@ -906,17 +913,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; @@ -981,8 +991,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; @@ -1010,7 +1020,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; @@ -1027,7 +1038,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; @@ -1046,7 +1058,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; @@ -1066,7 +1079,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; @@ -1077,7 +1091,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; @@ -1088,7 +1103,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; @@ -1098,7 +1114,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; @@ -1113,7 +1130,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; @@ -1128,7 +1146,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; @@ -1143,7 +1162,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; @@ -1156,7 +1176,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; @@ -1169,7 +1190,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; @@ -1182,7 +1204,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; @@ -1195,7 +1218,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 @@ -1216,7 +1240,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; @@ -1227,7 +1252,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; @@ -1241,7 +1267,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; @@ -1255,7 +1282,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; @@ -1274,7 +1302,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; @@ -1295,11 +1324,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; @@ -1335,11 +1365,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; @@ -1384,7 +1415,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; @@ -1404,7 +1436,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; @@ -1424,7 +1457,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; @@ -1447,7 +1481,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; @@ -1469,7 +1504,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; @@ -1490,7 +1526,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; @@ -1513,7 +1550,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; @@ -1533,7 +1571,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; @@ -1553,7 +1592,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; @@ -1570,7 +1610,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; @@ -1594,7 +1635,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; @@ -1608,7 +1650,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; @@ -1619,7 +1662,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; @@ -1630,7 +1674,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; @@ -1641,7 +1686,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; @@ -1654,7 +1700,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; @@ -1675,7 +1722,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; @@ -1702,7 +1750,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; @@ -1717,7 +1766,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; @@ -1732,7 +1782,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; @@ -1759,7 +1810,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; @@ -1774,7 +1826,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; @@ -1790,7 +1843,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; @@ -1806,7 +1861,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; @@ -1821,7 +1878,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 Mon Feb 24 09:22:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987667 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (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 84A6224E4DA; Mon, 24 Feb 2025 09:23:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388984; cv=none; b=Wo4ryEyvl1eKa7lIfq5DC82Hoq1Y1WivGfj0bRdpMYbWKPGE7gpOsbF+jcKCivJ7p8q13oPCqwmT8E4UdXkzAHSCg7sYyfwVWuge4VKNlhSQhslBSqfLbNtsZEAoQ6nkCctgx7GiedVjWD8Vw5MNVTs4OAO2S0dLCZXv28DbheY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388984; c=relaxed/simple; bh=kRFGlPJgnIW7IkE6wIvC7DL94aODzN6M4qobmhxPsWI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gHCpu7iJhQRZjzrYmKpxdRzXtiZh4tXY/bYllSF+KUDC7D1daq7Nn9pa26/eI/yQATb2zq1v74CEye7GEtyOQEjtp/US/juskfsph5pE4K2v2S8296BuB7dEn7Ls1urbV5vzblNQVKsj9U3wNRBtABFTDyBNlemE3XWDOsw+OJY= 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=G+zSAxgy; arc=none smtp.client-ip=212.227.15.15 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="G+zSAxgy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388972; x=1740993772; i=ps.report@gmx.net; bh=kRFGlPJgnIW7IkE6wIvC7DL94aODzN6M4qobmhxPsWI=; 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=G+zSAxgyfm/kxcEcfjDI/yHowo87U4Z12CJU5CtK09Qt218Lggq2ddHrm0IxqeCk UFACoV599Qvpm45qgHjohd7u59Ib+vrQ2jCISRqAsOxAAUkQtSAQ0paollNsZc7Nz O00QYspIZdy7FpsPqad/jQsJC73XSh6CgZR72reW/o/aiilUHB5YpOouFIoULI98+ 4OWuN+fXOTHrdHm/6L05VjodXtOLu+Wk6cJ3S3ZYpcQzorxUuWwEfcEj8uvQO+9XX Plub2QSlGrFpYbqSonFPCGUTi4EDOX4Y+PlwiDUhhUKhp9JgPlbUH0O8mR8yo72Fq m3I+NRsgXoLDCfGlig== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MA7Ka-1tc00c3V3C-00DGQq; Mon, 24 Feb 2025 10:22:52 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 6/8] net: pktgen: fix mpls reset parsing Date: Mon, 24 Feb 2025 10:22:40 +0100 Message-ID: <20250224092242.13192-7-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:8CmP8IrLCVeESkIphKVCLcRoepPcXiSiAUMVWzns9yYJozc8YJY Al0aGb2R+pSzHzfFxSj4f9Z4mYLJ9V/Biwd2pwxiBVKdX6GrUUpoa+e/DHA3b4+pjfxfWHj S2rcf1HPAD4ur2bChXTCoDgDHlCquBf4bt7D5OeIHmUHBelbEyuf82mk17NUUuHUBBxunH2 Vkwjn75Zl2Hfev33oJb0w== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Nt7r+GWd794=;FHASirbO5CZC5j13Ue17qfo5Y0q M+FXwUcg6q3EweCHI2GDDVShWPGsBSwh676Mqi5CU6uQvEjQVYlhNNQoiPCwvw/xBzZ431fGB cXD2aRby5aMcJy+ZlSVZfvh7xMr5h8W93v5KpLrFbNEx3kYoAp9FozzNoz3auBjWRDavUdi75 piF2tkHtd4HpPFAKQtN84LeM1+QGjpa9RbwMSzeqEzr4mCppUEmROb8kflBrtg6fdpjlatiWL MTaK/x7kvjdyFH7KfbEapYfLwYmF4EYpaTVX9RDLFNbyDg4H7lkIzFr5ZUADL244TFIYlOqxC hQC1srqJEGRZIWI83+HwuAiABxkoFh/FDjBsr2wa6IKPxrNl8UPqQxdRDJUOBSmZYxGHhZ0Gt BWGJXHqQ19eQkmynxbpEo7Ml8stQaGsPTgsj78i/aLkOtrS/BGOCs+lSI5OMOVHQF5I9SShyo od1m1nawj2dBD6WEowlmbW42cau/iLeCiZtQn+AxWHWDWtH5k4/KoJb3zQhlfNVusT4f1M8qj Gkx5smRxWfg7HriWIhIcGe2wh5ZTdFhvRprctpjDk9KUHG02jz5wH1dzLBOuSw5M7BkL1Jcgi UaT2fiidqs5jpJ7o0lOQJZm5kbUB3PHVh0clEV746Dyz6o7S83Vn4iqEWCLSOUo9PGLcbl6w+ +m8JshcF0mPRoIUQ9LTPJoBpqg4WuSrpr/zQbogzukxYgEme/8i+Sw5MDBvMM/AjrcFydvm1i GBKYcM5kNRa9ImUnwaqLyxjL2/bY/kWwJzv3ZDWCfIQ3l5+aY5EuO/gKHi9/iM0SMgvStuW6L ZdaizEfblS7hxut96rfdi881CqwPxttKopEtrfWiqXUOlqosO/0aM0yoFVfciSUhlrA4WcDbA TksKh0I7KICKCsOViDMKIVfwjcrxHOgEIG6ASdkk9iPMwU5Y01UHCj3+cuT12SK7l5/SdMoP6 9rrvWAPDupw7PYWIkJRH9PVaooRP16je3N/Hr7edx7mgwOHEOQIbsmmqnbtkum1tNKprmzi7J WlBRc7Fv0yEc9mYfw1g+l0ZqGXClCROOsscVBpK4LnOja15bGR37QYR9Le7a2txLA4Z58JCFB 9ylu0Ms8eKfhGUMCx29ett3Nv0BKwITuo5x38hLjf68c1hHE4rl2NvvOhb77WKwcP581YtfLO yjEzVrZMRfZpp+E1+at3O3ujlAYO4cWau3am4+pHlbxjO42HRMdqqg22qCjcefjryhyaYaw5C XVQFw9zGnQbvq16XCQe0Nn0icd4N8EoB2whX/sYU3h2M5BtTa42ECwwrOTiq8syoH//mNsk/w hkVVGuP4vpVEUI2opw71pKJXf0nEEbfBeREeMAgrmNoAQm11RsItW3XEe3i9giBB/Chn/rGII +IIDlOHcOH7paqOg7/1Se4snQl670T6EQll6pMJy0tZsxXkIVFvKXIqyj/ X-Patchwork-Delegate: kuba@kernel.org 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 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 ae5e81e62733..bb13a4591709 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -915,8 +915,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 and/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 Mon Feb 24 09:22:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987665 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (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 4B1EA245014; Mon, 24 Feb 2025 09:22:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388978; cv=none; b=DhNTuivczuAb3RWhHZkz00TW5FqN3u3LgWG62npwO2oDPWtq4+DPEZUh2viuOm9FQ+KxIzqBF6sYpFGIVm4DRp+KP7Tt/+eabRVBJpVJ8BuT/8pMVTsWpgz5gdtLsJEJTkrpC0fRgbuC94ALsRVcG05tCeQHOC631DrpcVOWrd8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388978; c=relaxed/simple; bh=eRTSV968N+P7c+kQvtvNmTQPC92/oxp7oG9eH3otdh4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=McWpSF9T0+3TWacsytNcd6yBlWRBVFimlCoG+7KOXXE8ohHzfRJlFMhNunN1PLGRAE74uWSVi5e59hjEsx2s+h+oC8Zrqae3SqTvS9MSry1srjgagP3qtTbzXdOOsNr0dAvCt4QzMrR1UprVASfKyvbIxrmJjYoCntNuN5BO4jo= 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=KpjpGev0; arc=none smtp.client-ip=212.227.15.19 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="KpjpGev0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388973; x=1740993773; i=ps.report@gmx.net; bh=eRTSV968N+P7c+kQvtvNmTQPC92/oxp7oG9eH3otdh4=; 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=KpjpGev0Ihd68Sec1Wfde3r2JQheFjP46G8ic4yxY+ysRXUi+5D1EmfyJD9rj00Z wkc/+bw/WWcOoOd9jDczkfOhVyqnjivoAku+PyzTS+AmqJm4H9kMhnwW4BUX6kxR3 DW6Ymf3RPQMuQ3XjsAqtFrpNHcAcOXVI9tOxpfCUI01I+VekI6IO6P80Q8MvEG1IK Tb69WOonTaAkDKCWM5RWCP+WLPrpHT+wRmNJWLxH5iOSA3pzNxSVQ0e9kwLcW1To2 y2sfrtzcgUhknB5GKcpJZeoUMpLTXhhnGPfEsplvnOGbX/qxrIvQAozyQ+HllmqER 7po6VKp7XZp26HL2Bw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MSbxD-1ttOXE0oAr-00Vl1P; Mon, 24 Feb 2025 10:22:53 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 7/8] net: pktgen: remove all superfluous index assignements Date: Mon, 24 Feb 2025 10:22:41 +0100 Message-ID: <20250224092242.13192-8-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:e5rOzsYPgcxsmOxKdaXYqm0/kyFSFCOJDfowy+hmpTS2D4D1Ry7 TA4Und7CnoaYyx7Ue9AV9hBhmhoZp7IyE5cWhK9ngPaGiLcW5Onl6zRAiTMQZSfr+4M6fpH /Vd/coSbLWOii107uvAjSX5yJfmExfJH0CJhAac4ux8HP/1Zy0zz71pkjdwi/GR0dqN2ZPb fA/r5mnaERDnNz2HKuBYw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Y1W0xkWbwpQ=;p75DkJrylodRvdF3ub3CwRIsNMB HgjiA2yVwlcgXoby8cz2oVBJukChSD5m6IaWAKFppB5efHF3x34d7QtzDQhMgdDfY0U4V7KF6 OrHaam0J2yuZ0HRjPPeqr04JUj+SDjtCfq15KYFtX0517n+1aYr0HTibhHx001Il/gVKOvbLa 0Rnj/M5IyePIX/TzM7ePUDvLIxibWH1rBQ2jCK96z2ABRmVzQtlwXAn/Nhw3h863tCfL1/RSl MtTo+zIm4oXQQl0c/awXAaxSX5hmeyFxSSRt6z/OEmvSWI7ZUXaRCSwDVMV+esbVGpQJlQAeO LTsaS14QeAUaePET62vf65Ece0hTy+Emhe3iIijHtrBoLxL8Hp83UwCOXVd6VPyDiy0by8mwR SXBAQwzMMjKdWOvztRSeQVh3OMc/Ty+qQRvEbhCDInN8T07eFpH1uFXk6wj7j7OjcAnoju9ld Fedw9JbvR0gcUECGi6VMDMVdMTiO+ntZ25b2uFDFu25kpddsqHTQfuEVz9aLVGAGXmekcApsO EwWVhMRNLSf5DNE/bMLa5Nm8Ev+bCp0jF2azZ3GSr3k7SM9MWhnk1O79g0PLw3al/mob3RE7v pSfD/7N/C/EC/9sFOs3CN95seVoIMFecvXQe8GCxtSg4ovOf8fFJw68h6uDJ53stn2sRb6flE ebBu8LRepJrSFL6+xZPAR+9hRs4FYBa9WXjC0aTm3vJBHDK8H1GQ80htpEFdTyMB0s81XOGHN wOnm7KL2UhK5XR1Pm/3596hJt5rpVVfmxk2uKCFhNsEac5uxSlfEUb6Jkzr5Mv8S4OxgieM/v xpxgBgVbutT6meV0XeS7XnhdwwGmrURy3QjNdzJqJNszDQZBT5Nk8eUqqXhuwkFEUhmBzuDAJ 1T90rStIwFmEpmtuzzBLrr/OBO1mSgoSngo61wAu9hcqpNC4wj3LZuo9YKuTn2eefpp4bN4t+ oh1Jm4mpbm0WOtrg8cXDdg9Rjq3RwYi25lvUJFbnUBL17L8+7weP1zjRNVoV2SvZQBp1UsD5T j4PHkXslY6giT4y9NYOUOtA9L3dq/Ba5Oku0n4iJVisbtF/GBjJFV2EIE8NGVb3lHTl3ysn4O 16fCkBImPEZF/mpUHfGiKoCeqVc1B248F2phyUkTaKD47RUJieL9UTEWM33u9iduiv3Gnh0Ce 1ilbKjW9odYWUYZx5jqSZ9tGh7QvCvSfm1UsD+KIjCLHn4MjqEmyWGkFJlnFb90PjRVKpwJ9X HQG5gEj9nMBCocos/GM7TQmGBc/XJDYcpC1vOHsWqRN6DGhiTxOr9na7+urANXG5PeajRPe0p oOpxsfhT5NfVk7OcSZq4Ix5E5wwglkd3O/FwV4rB+PgOMZqR0oPtTXqNdLdkw4+TizUpOdveQ kB6PctxL0Xdh3/nkAfZWzYnkjFoVrJDWYI3soxsvncROz7SfldD8XrMLh+ X-Patchwork-Delegate: kuba@kernel.org Remove all superfluous index ('i += len') assignements (value not used afterwards). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- 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 bb13a4591709..96511e57c3fb 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1030,7 +1030,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) { @@ -1048,7 +1047,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) { @@ -1068,7 +1066,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) { @@ -1091,7 +1088,6 @@ static ssize_t pktgen_if_write(struct file *file, fill_imix_distribution(pkt_dev); - i += len; return count; } @@ -1101,7 +1097,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; @@ -1113,7 +1108,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; @@ -1124,7 +1118,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 @@ -1140,7 +1133,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; @@ -1156,7 +1148,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; @@ -1172,7 +1163,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; @@ -1186,7 +1176,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; @@ -1200,7 +1189,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; @@ -1214,7 +1202,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; @@ -1238,7 +1225,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); @@ -1250,7 +1236,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); @@ -1262,7 +1247,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; @@ -1277,7 +1261,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; @@ -1292,7 +1275,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) && @@ -1312,8 +1294,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); @@ -1337,7 +1317,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; @@ -1378,7 +1357,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) { @@ -1436,7 +1414,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; } @@ -1457,7 +1435,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; } @@ -1481,7 +1459,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; } @@ -1504,7 +1481,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; } @@ -1526,7 +1502,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; } @@ -1550,7 +1525,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; } @@ -1571,7 +1545,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; } @@ -1592,7 +1566,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; } @@ -1645,7 +1619,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value > MAX_CFLOWS) value = MAX_CFLOWS; @@ -1660,7 +1633,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; @@ -1672,7 +1644,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; @@ -1684,7 +1655,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; @@ -1696,7 +1666,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; @@ -1709,7 +1678,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, @@ -1732,7 +1701,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 */ @@ -1760,7 +1728,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); @@ -1776,7 +1743,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); @@ -1792,7 +1758,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 */ @@ -1820,7 +1785,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); @@ -1836,7 +1800,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); @@ -1854,7 +1817,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); @@ -1872,7 +1834,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); @@ -1888,7 +1849,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); @@ -2005,7 +1965,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 Mon Feb 24 09:22:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13987672 X-Patchwork-Delegate: kuba@kernel.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (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 41797253B4A; Mon, 24 Feb 2025 09:23:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388996; cv=none; b=t0EasYbgjN5hOgeW3Xvigg0XVWTX99ZYAYuRYystuuE75WzYNHOOhkFY+r4FOiYR/8I1qwwbPvF8UjlKn9weNZVf1/0NFQbBU/7x3kk6tOhkSL8DV3uRPvhKhEMjZP/z8q1zML7XQNIeAx4HUZThA94OW2zdg8HA35/19Yu43HA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740388996; c=relaxed/simple; bh=efedYaWJsYPxos1GqpSC4vgLqUGlAJ/A5N0xqLLM1yk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AJCTVGe4UnomhBYimTSIecd4eDmx0sTiOTIg/2roj627PDTiHQ0082/cduFzc4Fx0lo5s6qfNUGiFb61I7RC2dNO8kQ5nBJes3ycmbcnNk3mTbiJ9qyHOpjLGAOCaHmf3ObniUF65zczdoFyN/YwMJzdBRvdBSXSL9JkRg51IOk= 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=DBnoocv+; arc=none smtp.client-ip=212.227.15.19 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="DBnoocv+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1740388973; x=1740993773; i=ps.report@gmx.net; bh=efedYaWJsYPxos1GqpSC4vgLqUGlAJ/A5N0xqLLM1yk=; 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=DBnoocv+Yn4yV7g0gUtZbZ9qEwFLRDZ//y2YHEItu9REBwxBn6/ETDa1cUeKkI6G mC941BGXPoCbAjkvgNOyfHQVFnT678ldb2EKxO+d2O6JCzdzbCRJw/f+R+rlCBreu mVhTnmFST0wj/ILGHQ6GmSY2+vxo1lgoXtxW8WLJY99YihFfq2GDcgkri3UwgQ03W OIZpYi638h/X1R/RnIp/oC8iYAyyLE5kCCeOTglZxFRZw0RXRjKCOAB1Alu1Kn9KZ 5QHslruOx+iH+r3gjwonn91dNVnVOQtYBOucMKpnzLUGIpYtG/FB0krrTxxAqDb28 h0LQYgbmFunJ1jTDiA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.227]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MkHMZ-1t2fSO2FZ3-00nQSp; Mon, 24 Feb 2025 10:22:53 +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 , Thomas Gleixner , Artem Chernyshev , Frederic Weisbecker , Nam Cao Subject: [PATCH net-next v7 8/8] selftest: net: add proc_net_pktgen Date: Mon, 24 Feb 2025 10:22:42 +0100 Message-ID: <20250224092242.13192-9-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224092242.13192-1-ps.report@gmx.net> References: <20250224092242.13192-1-ps.report@gmx.net> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:ZVc3Z5sEx3irGRMPYD+xVDGSVq9+x4gfJwbVwPHyeJZn704oOM7 Dujx71LAusDHYQDWws58bOOP8ej7Q5F9BaZ8pnj2Nk4KhVok7+Oags00fpNlG1de2Znc/ZQ d7PChVq8LThqX5tGogLPUXe3aS1Q5fveER0oRaQuU2CYAAh1FUvnr94dDLMOoFvqLizHPHC /DBQsKmouC3Ev9Ftq0Cng== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:x1AFqjkpkwA=;5v2QUvUUwTIiXHhl6WMNBDyBzml S9xEa5SkM4Rx+7T8MGcQvwsQTQNVNOqv9yeeR7nwr0q9i2A3mP7V9o1mBggGAsUno8n29fp5s inzWnQocLi4hyz4LmV9hM2NgWcTnE2sMJftzUpWV17Q7M+pYJlfCKTuQ8QGjTMTiCVA2nTQed ws7P7N5fG0jxWTwlRzG03touEdjNSkJ2iy6ETgETvJ2y7UZGyLxceo347MSpn3yZIujaAsjPo 61GDYg6Gj097A+PJHZTlloY4/wUI45MyWpNGnFsr91L+oLf1svS9hpaSvAHPdpdPzV5VDnW83 VdmE6kX2f8I/39pavA0UCBSJHGKiD6uOp9+iqIJq5W7dgVmszbQXHiKogezxE014Kx53xVUXy Lre+qSUqL5X/OGNnXhc2DsmyNP2pveSBkgHVWpVJlFpsMJueTzbcL/vAQopgWerOcTdA1u4D9 XC0lCpwMb7lRQ/TmIqU+ATCR83fver4AKEhc2XoLbYqGUPI0lKph0vBw1xCy+B12QUweDnwe0 7EPeO/NkhjojmzowPq5Hs5RNdYZSY61ETRSg1ytGAny9BBqY7btKD5rm4VqQol9CLi3e+GiU1 2yv/96NVTGyX9IprdizobsS4XJa69qXIwa7PaxfRnvu1Bagx51gsbCaf6tsBYzykJNcThaA4A 2bezPCkgKnKS1P0orUyA6+VAY6DHA8lNx0Y2gfqU9g1QPLBEZpo356i0wOyEm+bQz7zxy2fQO S7yhrSfb8O4qru1do+GNtBKojSrkUvRXrFRNFwVZg5VkPElEWUtyyQSko605h9vCPbsFeqDss xnGwL87EngL6wlJlLOHc1dsEHeKZM9zRHrEeKbd5Cbd/WImm3HEjJwjNPPbe+4IV6HJr8Kp6X +yw+D4IjH9aGzRRLy+JnngC3ADwuY5m2vG5ygIqwGTrfMSk4zr3MVPPPJR2VfORYm7z+5+7rC CSI0qt3YzBCsjbX+QI34Zd4oVn9NqdYyvEaqwDSXlGF3gKJFfY/nqnJY7sGOT5SqWdiUQd5n0 xMhga+UH+mgEHWxbmZDwzJfbFPI7quQ+w3wID2eeYEPKWaon/idJvVvU6DMpobWgCIfT05Zmh Gp4YdC/rPkaP5w0euRwZlOG4nqOKpsUEJRFQoLLfR94e2MiMa2QOuip16ewt3BwztyaJraooP PTwH2xUL4G2c4IuXhKJdN0A/kjvpvPiv6/y1cGOiDjXh1k5YPRb5eSAghAxB2HyuZry9FiDkH MTZgOmR6gjgr/wIFe5QmDXOyiubGMBCtzRrt3uW73W/4EeG5ak7Ays+uqopT16SBQFobUCU33 omzn5CWJFExuvAsKbLxMScVXe19+D3Cp+NtETJs/qGGrbdJjnynT2WgAJeTMHe6f+UalthnzP wKMbBmPePpdKk0GNvptxRZ23Y76Ck5i4H2HtLjUvp3ip1zqXWowE/4V5K5 X-Patchwork-Delegate: kuba@kernel.org Add some test for /proc/net/pktgen/... interface. - enable 'CONFIG_NET_PKTGEN=m' in tools/testing/selftests/net/config Signed-off-by: Peter Seiderer --- 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 aeb96c085614..841c4fda2c22 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..917f45be4769 --- /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