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: 868751 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: linux-kselftest@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 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: 868750 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: linux-kselftest@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 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: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: 868749 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: linux-kselftest@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 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: 868752 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: linux-kselftest@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/ 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: 868753 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: linux-kselftest@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+ 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);