From patchwork Thu Feb 13 11:19:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973127 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 2E6F921D3E8; Thu, 13 Feb 2025 11:19:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445581; cv=none; b=EfW3vj2pLAqx3L5D+G8ewwU25sCVI4NU6nelBkl18KeEArhb6V2B8I1bzZUNOcnw9Kb+PF21cF5QT3A9Cozo4XAY/+YuDYvFMpx3VrjfDsetp2TmVkhUqpTzl1nzDC2tsTmyOc10R/j/UVGw6glPQteotaaBvuFmlCzbUwe3bSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445581; c=relaxed/simple; bh=PPRujci8tehuD+R56FULZVH8pZlNtu9IzdM/CxcRGws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VIMLZ0pjfW753oDOONRHpyo+my+XT5Pxn1wa/lF4jM5ZH1N1YwHH4W9+AoFxotmNhva0y57YlhgNmMuHQt1NrG+JM0zL3mTgN8Th4dt2qsEnC9SD9uhuOLHs5QqBZIMwIAIOH6SC8UGtoGdo7YopMY7owap+BqtiRfwkk7cjU5M= 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=li2AQ3Ln; arc=none smtp.client-ip=212.227.15.18 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="li2AQ3Ln" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445565; x=1740050365; i=ps.report@gmx.net; bh=PPRujci8tehuD+R56FULZVH8pZlNtu9IzdM/CxcRGws=; 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=li2AQ3Lnu2K2BqEupAnNIjYnHIF15uOWvTCWqBHeSCiO8ehQwpq7G2AlQAD4+xy+ kdahvmiN1OOwvcrXu3C5hMX/qOiRJt51ST4tKX4Bc/1JiAVj4q25vn99GfOjP36N3 cQ0Nj8eyJXwI+vjUMaIZMFDGU3uHyARhDP7ikwfWDQKO2rBrScrOM6PtdSwmXc8s5 5/b3KhBYOl5LpREZUpU8XNX15BxEufK9rlPYmoMAO9kQrxrLWi/LIl8/V4KCqCfTg krWtNqxHP8bbohIfSgPwEEsuzRRAiOT//yFiZ+/1gTDL23JTH6vwu2RvQ3Ffz8z5s oApVVMtHgn0dDUu+zw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N2mBa-1tEfcP16aa-016c3T; Thu, 13 Feb 2025 12:19:25 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 1/8] net: pktgen: fix mix of int/long Date: Thu, 13 Feb 2025 12:19:13 +0100 Message-ID: <20250213111920.1439021-2-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:VaU+mn2E25mkSpJg8l+UeQBYipo3hq2Fw+UVGOWrdklO1R8Dett SLHWuHFLoQgPUv0MXY/3dPOVJUI+7pAQ2HWI2NNMgK1G7KtQ+pHtt8g4LbtuqpjW86Yyigm j00BnwDf8K+70pZbmIk42AHKkIX1bTY8UIybDbWfufNJ0vLk6DKJxeq1AiSsbCkzhk6YF10 OYK1QpnBhnVX1ykAigJiw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:P0ApSs0MSjQ=;uCOnJJF/QvqPlD+n39NoqMXmVLS eM5EWb0Ud6xyEV3W8w/grya8xA9V41C45L4wdxBJCT2CuB1AylAxQED28stme8xWHu6Mm0kmG OpibkqglQPf01Ogn6u/hZq/XCKb1NHLIYsRFGuD0U0Hiwtw3xuFfXzVFw0ZVb6d2JpAUixNN6 NnW4c7KLEErKDy0uz+nbU5cxOu6toJpTPs+TnDFf+XudgboDGPkPB7B/mjYBxOsPh5FgZQZSJ fF7JX4+pJQBUHgAl7J09Yis1ubqLHWazN6MJfHoysovULwxOE64TPJd+NDSqx2BlAYHvAGkDD 1jezLWMAFsNQjjFcsYvDUTmK0ukU2MA6Y6s/i7bc83Sal8DnDzPWRU50IjNe8R7BEcreo8yKL FzmvAJJ47rM6vKfTrMDdLsjpZDp4mLC539eRLNYsfVGeMDWj07GhU1FSBVdQGfAZR0gsmhHcd 1mK0lNeMm8bkVPJqM6irDjQNbeWiI6LvxECQUHusEf/FGX5QThWRKGEKPupkdnGfVtz+v0yTh yUixr8IIwn/H+7d97p6SluJKrbMuv92oJkyXltU7Hf4+QQbyl0zobqldJ3QQQkwgcqWQVeWsE 6XsS5bypImJg+628k9D/hILPVQBVRMCh22DW4ttu+Dfft7vQiycEb/jfbfjHnPauBZj5ys+Z1 7Qci0wxw3FNSVF14/jjihXgiii345SWM3gMhIyoM5HtBOlUuNWHGKtKEabn4iE56M+CtCdr36 QNGmvgIFZuU7UBvgEmvlgasOh67X59Poskvr1AnWEl+E/NtoWtHHsRhpJWIhzbJogtJe8Iwdt GX1yYpAAN/tFm/hPU2c7WlOIKqML7bOESsuGKoRbFQtyuVCYwoSOaGxEtkODOWM6JcPY3yhv6 pCzyfPaAPKr9os/FrsRG1DPw0xaZKbbpL9u2ZXP9U4ruoPC1+/QBnFaJankEpUUkYnXH/lP+7 9DrcwdNzs3ISz5Plks3KqPIhP6kKnyc9E65OgW5ECMhgrrZ0rjHmteX34Mx0v5gV2HLlJvtvD obdruaQsgxkhmBy4fGPArauSXJOey3mIViIAVJohcUvMvC+uyHBh+bQkxmW1FVRUfpqW2Fnsj UstRLggHIsyVj/Fh9aHwDXqVSCKYWgHCt7xEz8MiyMP6Lcy53cmSaQtVbJmDixsP9rMYCrFCi xdRL5gkGqMaJnaB4A5qcC05pvM7V78KS68SU2dEjL48YPBad0zZ42qFFKvViRT7Y6naMjcBy8 RuhECNp2BEbGRPjGPUvyuS0MM+VPaFodHtDY/8bsyXQInZg8Upf8B3Rbf1X/lO+9/Nn/Mw7/H An6mVSRfgHmbrv74iX2FMR8pAeuxfpYVQ0XmECTbxu3A9GL0S1aOveqb7GiZgDlQ3tsFwDxcG mx2FPFWRzS3zqEhMdiyY5/GYqcNXmKr7is5DZkPtrdzeZHdP7nuMLoC9kw Fix mix of int/long (and multiple conversion from/to) by using consequently size_t for i and max and ssize_t for len and adjust function signatures of hex32_arg(), count_trail_chars(), num_arg() and strn_len() accordingly. Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- Changes 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 | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 4f201a2db2dc..36ee0422c6cc 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -755,10 +755,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++) { @@ -777,10 +778,10 @@ 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; @@ -802,10 +803,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++) { @@ -821,9 +822,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; @@ -853,8 +854,8 @@ 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) { - int i = 0; - long len; + size_t i = 0; + ssize_t len; char c; pkt_dev->n_imix_entries = 0; @@ -903,9 +904,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 { @@ -964,7 +965,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; @@ -1891,7 +1893,8 @@ static ssize_t pktgen_thread_write(struct file *file, { struct seq_file *seq = file->private_data; struct pktgen_thread *t = seq->private; - int i, max, len, ret; + size_t i, max; + ssize_t len, ret; char name[40]; char *pg_result; From patchwork Thu Feb 13 11:19:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973123 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 8088721D3C0; Thu, 13 Feb 2025 11:19:27 +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=1739445569; cv=none; b=d+kcjshSYSZ9b/gBLEHpgOlcrjrnrhhQYYfm4kqX56BgodGtVZFouxPbbKs9BLrbj/1zP1p272BRJyOnC5BPHoiG1+cUkTzkLRQ7P4gHMiinoGYKRXkn16hSCBffdgrAuAg6Iqr/1xvh54+XFq8yTpwz2wConbXvEx9NLPz+/uI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445569; c=relaxed/simple; bh=JdIo+E+SDO2PpXqGE31iS5BduX/7fzUOoJLxV9EOoIs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PCBhRROZDEnTirPpgKCT8Eft/Mz+I/2SeLSn7pS3IOgjJqM85+SyEUIHJ9V2JUadBG0FayEo9LaNIXVVJ42Vgbtl6sGZJgvb/LwyfCf2JM+utKo0rmcKpPmxfwWh07vO84JIOMeYzJ0044Kg67CiWlZhUU8gNOg7+du+gXn4TQ0= 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=D7rFTfN/; 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="D7rFTfN/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445565; x=1740050365; i=ps.report@gmx.net; bh=JdIo+E+SDO2PpXqGE31iS5BduX/7fzUOoJLxV9EOoIs=; 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=D7rFTfN/YKkRmt9Fj/2eYQEEJUzBb0H7a2/8prAvepjJo6sX/77qQj4Yza5E6Uu6 zglQvGQPi8+UNbKT7TDA96Zt5OixAtVR3ZCUTI0OQY91Ab8ZMEgt2HoQzfH74i2SK WJqLUZvLVreTf6hG5BWe4C6xtxUsQdApKVjJgq+DnQy+aq22nA5oSS1TX7k4bO607 6u2R9BZ4Yj12YQzy0LOocT4gGmmnmziw7JCpi+2UNALUF1YVqXNouvHRWSfFTs6y8 Vb7vsw0tfcs4MWQOpQurl83VqcPggB+bqgz4fWolWE28zPHGptESsQ5gGENrbY/Qu cHcx9u/er/XVyz92ug== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MQvCv-1u3cV82hRn-00IDQ4; Thu, 13 Feb 2025 12:19:25 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 2/8] net: pktgen: remove extra tmp variable (re-use len instead) Date: Thu, 13 Feb 2025 12:19:14 +0100 Message-ID: <20250213111920.1439021-3-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:H/PhhsIqx8cvF9Ak2WsVYrmclqrSpkz9+min1pgZUT1xDT4qsQH 7xMtbPuTOVWzdAQ3TWmIIJb6XkD7zBQ6+0DSYwTB5OBZ5FlmFyEquGy5fGwn5zbnMa9YASr oNC/Y2RLuxBhKDdlVxZnYr5Zd0yALIBnJGoEhm5llBBdUacpZhdtHVevY28af2ESxip12ay KF/dflynkBTKpH2iQ/7Lw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:HjEOTSD51mo=;X8dO7O9PvvITsu6aujW8bHs2GWS 65Q+Zux3IQizWR0aRLcld2+IXXhzFgLmdOasekr9AhfBXd56FWPIjXoyV+9OnDc/rZ610qJ50 ljK8iF2xfVwwJ02saDABPkOnnYMlnLzlfUWt5QUZg/CzGhXBt0JX0ESO3t6uMyXij8W2R+Wt8 Naj36fEdGivrzF7wyKsQ/QU0atgTHcFuZEeVNvvyUwxosVi6pCQNzVjQwji1vcnCcOLpTe60c MC6fVibx70xtY/3fnVCXnB452Sq1m2FS5kpkwH9lTFIH5qw3T4CeTXObPCR52ZUhQiTa3bWEJ X5Ui/i4lghrEfIhGJUHUCsZQSd5/u7diwMl60E69yx156CvhcsXxCwEJMINNdU1wyquoGjtRp f/wZkkofAsYVwQy9IDMeADyHPEbtqq0zFGeBmdFORqWFAMOP8VClO1VEBlT9HgMxavZJpFeD4 6X9A2Hh1E9bYAzXku/JBtBPgjPcLtx3fuWH/fJg7bCW3RpB4Go4h0p3BavfkWUMsRNVq/GbYb d+VoN44TlIAGwvEhpLLtlhm44KCee/ORkFV1kRBCRwUGbQgfcdHeqjm8DKVjVqTFuFtjltGPc RDTKleOIAXD/uWFkZ+VTcWpWAOmo5kUQfds2dLcU2fBceRyeas8UPOJqexNrnOCGBNAU3DBsW r4fGpZqnxgUDlgkR+T+a2fjZWsoQL+jMRRaeKr/XJfywk5F6pjmClZPaO7z66UhN86FmuwNMg 2UuE+B8e5RCZaemH+R/eed18ihG38tYkPU0UbqTe7HjglmP/zzY81jG09W3voHQkgPMfGC3M6 nEfAcDAIogiJvm2+oeOlrU/np4GUEhB34jhdWNrtrKURzfa/1lXpf9XmUkLL68mhFRN1dl9o4 q9IfKWpv/Am1yhcKjKDMoQ/v5Y7E9PuCNKqY0vnGxsYrrjHWPFZ4mBLvyalJrhI4lXmsrlomG ++cmIerPapHQPQGHaNf0CvrRKSo7oVYrmvjghsAnQsEsSinq2YJy9h775TaNhhuK0ne7dYRQh 9RwN7CaeF9wCYlN8640XNrFZTfc8FwjrqRYW7FchJZBCXKq5gdvBsclIX4o6Iza/IVjfKiHAh gYvqT3pwxtU8KSZ1uPz7fq4TdtZa0k0foF1fmZx2G23w5WdZeF3BPh38sbxcQy0CndCIUZI3Z GwkVQpoOKbXp3XCfq3e0IYogS4HdSxGT/BOPZxpqACNCTbMLtOF0rbK0vzwT9YcvMhhXld5u2 G0gN3mGrDVFpgPJJ+MaQR/rjOstS/hCIb+X3IvEGj0bsjqbg/qyn5UDHbmyUpYr6iq7RITY08 7sxzdG5LUb9VTLk8ooULdX1mKhWFyXQbKjin5YgftbHqInSsIAm6mPDXNBGFHcfvdcF+98tap G0FXZqc+dv8uLbJCQACQ/PrELA54GO3m/dvT19gzDsvMdI3dYUtxlLI/mz Remove extra tmp variable in pktgen_if_write (re-use len instead). Signed-off-by: Peter Seiderer Reviewed-by: Simon Horman --- 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 36ee0422c6cc..b9d8e33abe1e 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -970,7 +970,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]); @@ -981,12 +980,12 @@ static ssize_t pktgen_if_write(struct file *file, } max = count; - tmp = count_trail_chars(user_buffer, max); - if (tmp < 0) { + len = count_trail_chars(user_buffer, max); + if (len < 0) { pr_warn("illegal format\n"); - return tmp; + return len; } - i = tmp; + i = len; /* Read variable name */ From patchwork Thu Feb 13 11:19:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973124 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 2224D21D3C5; Thu, 13 Feb 2025 11:19:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445571; cv=none; b=FuebH21hDvbVg7Zj//nMlppN8kik6mJ7sIIdXVatbgkiLr7cU/vebmFXW8m39wOwiV3IH5P+bamk3KWmP/c4f0ZIUYyEFNt7HscxbPFBRz8iTm77urTZJPNpjX6V968NRI/HhTPCH62ZCfflo1DlFrMstQO7oxajM6hEgAVgLJI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445571; c=relaxed/simple; bh=Ca+RYzQ9soWrd7Yg/lFnhKtLF7Ve8a82GfLi0FYno3o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QD/VYHfY6MPKVI3cw6Cjh8kRPbNPL05Ib5koNS2LCns2UvswUDIjmmXaIzxKJQrRh4katflb+iBTjWvUAdZQKuA/fWf/ZZ1KJXwrpejWXed77fIdZTNmwYHTKQ8xKDeg/aRleRPEKye94JEjP/I2TUm9317M1qL4UUQIA/sD5PQ= 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=Fzdk/X14; arc=none smtp.client-ip=212.227.15.18 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="Fzdk/X14" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445566; x=1740050366; i=ps.report@gmx.net; bh=Ca+RYzQ9soWrd7Yg/lFnhKtLF7Ve8a82GfLi0FYno3o=; 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=Fzdk/X14cpnpwVHWdDmFzJBP9nKs3Wh3MrD6pj4jWRU8y6VNSvBCGqoIKKDK+IRT SqDsLtP50+4kdBdqLEJnO6p7jcXal7DrP6hKxFG0MblqZj216znsXFfDjAecTB9YW 4+8OwHMH0xB5iPZwo/2Bzt/93Jop+pcPAef5sSbAeX1MwGic9tmZv+4ApVB6+pA24 I5hXtnWb8cgqtkad28DhMrDzQpioucbbtPM1fYp1gbweKb8zJ/nwyNvo2XdjREVDk 9syj+MhT+Q/hfkPQ2iWzw+k1NRJZ/ZqQHcqhgcacr8wmuC8mw83tNp5b6SWBTPSdo p+NZ2kmbEknpZ+3BLQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N8XTv-1tM4XX0VUn-010rII; Thu, 13 Feb 2025 12:19:26 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 3/8] net: pktgen: remove some superfluous variable initializing Date: Thu, 13 Feb 2025 12:19:15 +0100 Message-ID: <20250213111920.1439021-4-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:64i7/RQdDiexzAcJYHeNIJGqgbVggzVpHID1CcxRZ9thvby/FET 8EUbMQ4u/5EJ4tlh0G5b1q4FkjHpJfky8vRsmJHQfpclaISsf1KwNsQLTqf8s1pWXO/f+eB Eqe4ypalmA6DiKlCGxeHOZSGzg2gZOFYgpUCdB0lu0RfIkSbadE+NSl9zrg/NuJXCnSpjo1 wRvLEhcMqScO17zYunTfg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:i+omshQiwx4=;Y3iDBelKZfLiOwRQ5Dy+In1SG0X uINeA9KVcauZPiNspnQEZ4Omo14BuCz643Y6RzJ71TRvypswkSi1jvHF5acaduzDYPuxkDkEM u+7WXZW/YsZNq+PFMTXlJ2a3rgnWRD0hk1flOnUsTRiwWLXzHEtn0fjBbuj4791dZS9MLbjD1 2cqxfDBaaXfQCscGhjjNk5ftoI30biWr3EvR16B83TuoxPX/f4I1XQoWoNz590XTgSFOjahiP EjV1rnn6WX3474ah2f0XegV2jZyGHV9h/WDt8SXoWuWODRiliLMF38MkIwGSYSZ6t8Lb81LF7 712mkeRrw0OxgQ3pTSJReO5XXzLWUT3znBqxlejVCe8xHmKDKSySMZYS2DlgAkww+eIAGiria gK0+29le7M8tpM1nU9LFwkBLNAo84EPy3MmQcQMpV9IMbLJj2PZIdI4HvynOdjwB3T83yjLOC hebbPglRgvrgsVk9669l0bkeYA05innBYfj1I56YOdDenD8CyS/t04THfR3fCgSKto4740iQg mj16Y5nyd0C1niEbMMkWLeeniAhkPFnH2SdVTLLihs+NkBM8CusA9SxVQpJ9TJfzW8a/9AAjS 8FPNXbATHTtvGYPEBMGnJIaq7PUuJrICYPvLwDA1XVIKZqwvg6gtkpIB6UoOS2rYsVonnkvBf 9VLOBN0lEW5I9IhI838HBwUOak3k2yKEB0kYFDjHco/hg+5bEJXUfWywuVUBISxybZrRWAPGO p9pGD0pilcAF3rrgc8QZQpsErX4DetW+twHa1QAwnRdklwT9EjcNKOZNvSwOgCBUZDpM1Tmp0 w6C46jnd+WfKSYBj4uh4oTqnSdiqLVTqqAwzqUugJj6kKyiJrXzl8H/j0uAl43zPSfWPzxl+R ImQAVme5iQQZN9luXNLaAlQyWuQnfUlboWXVI6cesbS//j/eOLA+CwbX8AHWUx2MC0gs8jI68 6LvCirWW8JtcwvuE4rGVG0jRBnH1sBZgUcAOPhTqRyZ6JGqt5y9ILdXYeRi49scxEPvKtpZsS CYhw+8aY9CLIAdapMPYZaJxloLNlZrTzgus/kPuAD8HTmmRqyO33LEK8QntVGtULabY9/ZSGl VjvNL4B2lua0VjY47LV7Z9k8BI61otbIo4hVG6cbTekw5KxUPvRLJ1tjeORtFY9AEP3trkfD8 6txYpY/xBk2ffZwAgK5kGTrZlT3/pFprOTGCpFYfijP8H3q2FKeOYrk0gc06FIK1wSLi5vmPU 1eJCAo7vn6W22IKKJg7MTm8a5BgPjUog0fHveqHNTqSeqQdLfddhIba7lowuSAWEt9QrDjoAP Mr5XgWnQR+SyqbbkOQDH9hI+dPw/66PTXvuDnArmBncrPupM+JtUHFZA01SfYJVoMWGEy48pQ QKPcqT9QiOw7EhVQKZ0XlO6NjbNrGmrFWXwGXht/gyWrtFiU6dQ1MjYU5t 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 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 b9d8e33abe1e..436076a2ccb7 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1796,7 +1796,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], HEX_2_DIGITS, &tmp_value); if (len < 0) return len; @@ -1812,7 +1812,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], HEX_2_DIGITS, &tmp_value); if (len < 0) return len; From patchwork Thu Feb 13 11:19:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973125 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 A9D5E221563; Thu, 13 Feb 2025 11:19:32 +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=1739445574; cv=none; b=GHnEUsPdHCTxkMWMcAjiKQ+zGhSn5OUxF8MoJGv6qM1s8eg382pDofdLp1bkfPOfym1ZA8BbFRxwNpNSkWtw46qSdMtFZQSjIdn+3VooJu9DkjV5ikr16k842fo05+vDU9jd8frH0mtJz87CYM/9A7RUW5ewDmkAWC9vISGmfYU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445574; c=relaxed/simple; bh=WBHymyYl/xHTKiR/7M7BV3X9wuHtayASAmHXzsQJio8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R6Q+mL6YQZ1U3wK4jJOa1iDmcX9euYEydsji5CQneztsTeXuSCwomPbIs3eSw3ANJMPsYzCTiRAMtwKWA+8RNNSCTipRvo1JhrTnOWkDF/jFLpu+pvuQ4L/aiEYwcm0sMnHPwqojlydCWvMWNvZ1z/O0M/IAatDxHB9vmyJx5b0= 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=muW3smP2; 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="muW3smP2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445566; x=1740050366; i=ps.report@gmx.net; bh=WBHymyYl/xHTKiR/7M7BV3X9wuHtayASAmHXzsQJio8=; 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=muW3smP2wC52cI58Eef3y3Dq2HwAwutq1HA4/IlrcQDFD37/DX7g3FcIl6hC8MCk qxQmXrugQ7xnBVYR6Y+ZDQR6f9NXzs9ZS/tT6dOe6USbeLUpCMFD7W/UrNh760OT2 SAnoeIbK7300k8LGgNbwqtVKoU8cXdxzWYRY8a/6AciV3619c9Jzol7WP3MwADn+T TRAWAkPYGvbK4T1r8oyC1Oge2pwB4E1dzGvRkhCwshZ0WcuskitqWsOcvUtT4HKDr Kx3OoqkPPQ+GpRux2I5MkhQiaAksQCNFx7LB/h1wPlIncoAznyP7C1Zr5VAdnt2/b p8PSoTGGGo0ab1Dr7Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Md6Qr-1t9TcD27lL-00fUvY; Thu, 13 Feb 2025 12:19:26 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 4/8] net: pktgen: fix mpls maximum labels list parsing Date: Thu, 13 Feb 2025 12:19:16 +0100 Message-ID: <20250213111920.1439021-5-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:rZohbrT/94omkfb9gHvJ5Cq9DKJCfwJcYDXIx7VMMAnltyRH6r4 OTA390AdBuOxf/hyAjmvIdUzdUz+iqNdE+X5P3asabSaF9O+AjHWXsLNfHuaJ6ftNBS8Q5w nZAdmoTAnsNlUM4rlpgOYPk2zV6HxbPB6oD2yzqdkKz0VP5B6z0yLhF0tAaRWS0Psy/OcJT ZPm5DJEenc5DFqLyCbcfg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:uErfn1VJ54A=;MAUGuRLocDEeyqtFHVM4hNyTIbM EtXsd8fp/4GRlLLqjEhjNGh1OJLr5/5DQg3laTPV2F5Nu84qxgFGnWV/Fw9NteSyIjpsq1Qm0 ptrh/vxHmO31KpLJwP5tstX5DEAHmK93ARVXLCEh5LX1GZwp6ayCJP2owvRsVvEhpOpQEhIgD PwDYWYHY5BtKiyhJrHVj3iAZ4W86C38dh3U44cnvaZFnN5ymOYdcxdC9LCJj5UaxizQ5MTKm9 iJC7vWeqYXDecQbSeVKUXPf9K/T1Z2Wh66X+2H51wt0xzNW0AskShVhPMhsdbWQ4NqRe7IFdh lQproClYpngMDtZSp8okrApyxYi/9IFWBWfPqr9aCXy+aZBPuvcs1zZ/wDyZm37Cthv+lldJE wWYtgE/D7tHAE4U1P1BcD8rI04+MvUYdEoCAmkcsPtg16iJYJCezlpWZcebdkeP/T9d/yS9Wd AenzyaUa0iDtmNMmc6/LDAqG2TB60zGMYadXj+MWZQKudvaE2FlWg2bWx2SBqVw9Dp/r8iumX J8SNhz2FEV8dYmTnMptO8kEzgDspywlaQtL1LAbYi9uh8wVUBQszVn+FnDSGpnIkUtg4BxqoS yg5jrLgr/2SJPQYyrPD+1LE7PGlduJV/zClBu5EJ9UssKO04iJbBSXlFTgv6FrxY0QUYB2g5o jZPIJRNOoxxMN4cu2EQP99bzATQaAd/tpKsmRGQgQfbhtmc8xOaUaCZTe/jN5t40cimziesZ8 vUyah4bt8nF5AssPGMEGW/Zg/frAwqhh/ytLbsyrXIWhaujLHbcS/H3ywA7XUXi4iyh1slpJP oiPioXUc/cSg09HqWOrWHzf+mG2KC5nIY1iUKnTdlNVyS6jEBx1W9ddiTG7HCKNlZ/YYeeeFV /4rBB6Tz8zfoC3qtNCWDGYXFp7VEZd/UdxNvD7+SnglWFlWOCCDjN8p4rUivX15dFqXDGKQd0 C0Oj9tDDebgkZNhfh9grLvsJVpAZIWE6Q2LHzaLGajc4TfIJuvOm9/uNoIyM5W46ylMWXQdRo rHpAwfhdPHdzKRwG5SYZ65cV9BXQcS+r9ZuOO5XHGJTbeNJlI7t4alBxlsPx/+fGY8iFiaZeV B03EXRYysYYcVr/tpZxoi5B876uB0+wB8JQi3/bzg8bnjPqqhX1mjtPqJDJmI1d23rNMFylk7 7/NmdMOzIftU0XaM4JOp/YwVEsmP852Pfg2dV5EZD7mUC72CVDPa9ku8Vvwr5C0GXeApyRq+a 2FIZlR2yNax7ezpUTeP6on1Z+O6GdICL6N4h0ay5Jw3Lwu/roim5X38oDneAtuGDKF/0bX/f2 OmnA6SXNJwOksp3lo0ZXsVYnty+y/PDJyp+DGrWZSmXzbFDHEg4n4LpQep+oMLtOkEfSZ/Aw9 fBAbxpbLUBl/ZEsH+n6PGMI0s42Mm5mKIGBKyzgW05dAGbzq7/q2CXS7lx 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 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 436076a2ccb7..9b63feb8a33e 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -911,6 +911,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], HEX_8_DIGITS, &tmp); if (len <= 0) return len; @@ -922,8 +926,6 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) return -EFAULT; i++; n++; - if (n >= MAX_MPLS_LABELS) - return -E2BIG; } while (c == ','); pkt_dev->nr_labels = n; From patchwork Thu Feb 13 11:19:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973128 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 2A82121D3E5; Thu, 13 Feb 2025 11:19:38 +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=1739445583; cv=none; b=Mm7wzgpB8M1cLXSgM+BPRKxrh7xcKkxPiBaY0BlSOydGIvdD5Qryp9HxUlF9VkfFNmmG+Q8+S4bX3XiNqWrw8YC9cUKUnzN+Sel33ewdnwMe3fkEsWLVE2cjDFjcIUGDruLo0QDlZm0YQIUcEekFxrMoXuIFRoO90H2rKNvfJr0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445583; c=relaxed/simple; bh=86qnJMX4eYbIgz0G92K/vkcN5G9fIRjY34mBXNoAZS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ij1gswinD6x4KO0pLUnopXzoT2ItogqV9Qzn8wN3ZSuX0SqOSDb2CK1VuYIl5LvF9PRe+6wwjEYHUuqMkqouUXqQ8xA7sPA0AJuo32b+kAJY5j3cZAHXMgLn6AGWu49JKC4VND0J+e0iOZknPYYuCkYMS/cJn7G4xJOoIBgcAyk= 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=SjR12EMw; 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="SjR12EMw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445567; x=1740050367; i=ps.report@gmx.net; bh=86qnJMX4eYbIgz0G92K/vkcN5G9fIRjY34mBXNoAZS4=; 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=SjR12EMwBdIn1hCWSXGsT8QeQ+n48S83v1L++3SyGeZzL0dbsXAFnHm6f46zJFb3 GO/J0ZweAKmNclbjN7oBxkBW4zG7Pkoj2PctgbyYXDnX49+1t41tP+kPsaBzeoT7X QzqPY/9hLOQS7fn9hSO3sgWyOW5vxOMoLhwT+oyyU+vYQfhQimdBntSLEfgQYey3t hF0zL83HQRe2wYw/km3rM5LoePuD1t8jengrQArMzBAYEbM95vgZYI90vqvsH0NG6 mKMpZIuB6vVwjdVC7/a1SevGl2RqC0gQy0Z5ODmlAWqVAWN5jukSu8xFIGjNEUpgZ RWUboun3eWqr91mJ2Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MWzk3-1ttDQl3g7t-00TiP4; Thu, 13 Feb 2025 12:19:26 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 5/8] net: pktgen: fix access outside of user given buffer in pktgen_if_write() Date: Thu, 13 Feb 2025 12:19:17 +0100 Message-ID: <20250213111920.1439021-6-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:KAInXvzwf9tEbBu5iLA0XxDch3RxKmp+yLgaXMUF4wWwIf4vJPC s/9iVWk8jrQgzkAEcSQjVqR8AtMznTICb2IWE6xR3H3Q1Y2GsAczlZJUPXl5fQOcqa1rS0Y g66br2P/lJcmeQzXoIKkdrJ7sk3bBUEBvujBi5gvFjj7lEOS1FRBoIC1kpUZkraV4xTZXR3 RQwc1LjlnibxU96Q3upyg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:AzbfCAwQTMg=;WVwwiffUNUi2V4V/LB6EuC+E6+L FNVedy+nSQBSpcFBZf155kydtB3IQua/vcl8njnxNwIXGo4W66pC21WoVHLKSU0+d2nHIvM4E WR3MOCJWhOBjmtE0NMVKyk0G2ljA+GdLmzZTvPD9aCw8yKHXpkLPTlsBps5aaCkRYFPu0WoDM 7ZsOQXBIQ/Um4veljMs2XH7KVUMOq2hBCPywlY3rifl4JzweUZm/97I6j8wV4ZPOcN2PGoBCb dJ3X6BUADENBzlpd6JGKHnTGC3MByAMdwi+MG/540g2oC9v1QowRdRNirsMbPIqBRVl4ybxS3 AXipU3cE4W0V89Xl3gUVtejjD0hKDUX0SiE9J82nnqjRuCNZHfaEgU43Jurk3Ry1T9ZTkTrYy 9P7LKMCcPxO9Uwl35RcTqZhDlqpE75G96EcmRUyT7/m3MAGvzzEfx5tMqb65kJSvVfyprGdeu ShIU1Jfhf97Cw1HAaGp0cv0fSBAGpYgOS/BecjTWvCEBbWWjL7N+tFV9qemtgU94bKFwODsQB hdrEnysm8wjbw0UhNhxEGEO8VeTvEb5a6CytHL5mLGvUoK7KutxTPzsVOS9/O8z1bYe4dg2qd gpDO/iJn90LY/j/FcTa5UqbWvFFcV7qia0Iyp445CruDGW3nbICd4lDmgs/VJe/bcUv7C4Y8i 0I7fzKJH0wGiLxiwDOSww7mhT2hSuEemmmlaASi5dAxIgG5dKA9pVzPfWHnQy3vmjJW7adnv1 u9EOzZslmJLahd9O6gy9Rx9yAGHva2QIAsmwxGYc72OHWdU3km4H7TMra6Q9FJwite7Txsl5j fXb7dCGSoqjVdwYDdM15mKIhD8jafnQ1Fosho7Rt4ZaoFfCVRMn1algmyrRUcqiTU2iswif7z /0OtwnU5g0x3To69Zsb/qeREiLp8d0TjwKbCNHZXfAf087vBW0xx/tLgkAAEeKQPK5F/oGljK J+DEiQ7qNSZg2HzHcUBWSqTqeCCDK/LVFcAz9esuC4JHbY5HL4uE7cddKnK0IJp4VRfpk/A/g n+PErj71L25Q/KlYlkcL1zj4zVfFUoGm8ojT2QgnVblDlVojZcsX7un2+0O7LB2RICDNvMDE2 8gxl6e+xCfAf5cHerwMLaHmHgvnnlWnL0RPTDqxKKiaTsSw+qQLYZvUEsiQ9IxuEo4wRzRcLL pyDNVWiDOhl4oWwvXawV4MwWj9sUa4R3iz+qNn0rQMlgXW8odH8yl6iJ6t3+FahwLPrkTiAIy vUBdL3dVaa3uaEQ3soJGcu3x/GTgHYd2kWVLdxLZaSYDI1RRm8qBga+r7cKKu+w7L12WX92FH SQiOuiSYjOvZS5ubQf7MYQy0ScEgF5LseVlJs37ooAr+ayj5p1FtDTbWTvh4DeyImq7EdcK5b vt57oOXGcbhtk8P4XpFi2Rp4X22Q/0nghTmM17bQY4WDjeNbPwP2oCH/+4Om/MpZclLLr1Dxg n86pECg== 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 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 | 177 ++++++++++++++++++++++++++++++---------------- 1 file changed, 118 insertions(+), 59 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 9b63feb8a33e..780435a8e605 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -852,9 +852,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) { - size_t i = 0; + size_t i = 0, max; ssize_t len; char c; @@ -867,10 +868,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], DEC_10_DIGITS, &size); + max = min(DEC_10_DIGITS, 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 */ @@ -881,7 +885,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], DEC_10_DIGITS, &weight); + max = min(DEC_10_DIGITS, maxlen - i); + len = num_arg(&buffer[i], max, &weight); if (len < 0) return len; if (weight <= 0) @@ -891,20 +896,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; @@ -915,17 +923,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], HEX_8_DIGITS, &tmp); + max = min(HEX_8_DIGITS, 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; @@ -990,8 +1001,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; @@ -1019,7 +1030,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "min_pkt_size")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1036,7 +1048,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "max_pkt_size")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1055,7 +1068,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], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1075,7 +1089,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; @@ -1086,7 +1101,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "debug")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1097,7 +1113,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "frags")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1107,7 +1124,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "delay")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1122,7 +1140,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "rate")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1137,7 +1156,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "ratep")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1152,7 +1172,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_src_min")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1165,7 +1186,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_dst_min")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1178,7 +1200,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_src_max")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1191,7 +1214,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "udp_dst_max")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1204,7 +1228,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "clone_skb")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, 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 @@ -1225,7 +1250,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "count")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1236,7 +1262,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "src_mac_count")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1250,7 +1277,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "dst_mac_count")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1264,7 +1292,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "burst")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1283,7 +1312,8 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "node")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1304,11 +1334,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; @@ -1344,11 +1375,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; @@ -1393,7 +1425,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; @@ -1413,7 +1446,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; @@ -1433,7 +1467,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; @@ -1456,7 +1491,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; @@ -1478,7 +1514,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; @@ -1499,7 +1536,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; @@ -1522,7 +1560,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; @@ -1542,7 +1581,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; @@ -1562,7 +1602,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; @@ -1579,7 +1620,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; @@ -1603,7 +1645,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "flows")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1617,7 +1660,8 @@ static ssize_t pktgen_if_write(struct file *file, } #ifdef CONFIG_XFRM if (!strcmp(name, "spi")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1628,7 +1672,8 @@ static ssize_t pktgen_if_write(struct file *file, } #endif if (!strcmp(name, "flowlen")) { - len = num_arg(&user_buffer[i], DEC_10_DIGITS, &value); + max = min(DEC_10_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1639,7 +1684,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "queue_map_min")) { - len = num_arg(&user_buffer[i], DEC_5_DIGITS, &value); + max = min(DEC_5_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1650,7 +1696,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "queue_map_max")) { - len = num_arg(&user_buffer[i], DEC_5_DIGITS, &value); + max = min(DEC_5_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1663,7 +1710,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; @@ -1684,7 +1732,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "vlan_id")) { - len = num_arg(&user_buffer[i], DEC_4_DIGITS, &value); + max = min(DEC_4_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1711,7 +1760,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "vlan_p")) { - len = num_arg(&user_buffer[i], DEC_1_DIGITS, &value); + max = min(DEC_1_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1726,7 +1776,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "vlan_cfi")) { - len = num_arg(&user_buffer[i], DEC_1_DIGITS, &value); + max = min(DEC_1_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1741,7 +1792,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "svlan_id")) { - len = num_arg(&user_buffer[i], DEC_4_DIGITS, &value); + max = min(DEC_4_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1768,7 +1820,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "svlan_p")) { - len = num_arg(&user_buffer[i], DEC_1_DIGITS, &value); + max = min(DEC_1_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1783,7 +1836,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "svlan_cfi")) { - len = num_arg(&user_buffer[i], DEC_1_DIGITS, &value); + max = min(DEC_1_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; @@ -1799,7 +1853,9 @@ static ssize_t pktgen_if_write(struct file *file, if (!strcmp(name, "tos")) { __u32 tmp_value; - len = hex32_arg(&user_buffer[i], HEX_2_DIGITS, &tmp_value); + + max = min(HEX_2_DIGITS, count - i); + len = hex32_arg(&user_buffer[i], max, &tmp_value); if (len < 0) return len; @@ -1815,7 +1871,9 @@ static ssize_t pktgen_if_write(struct file *file, if (!strcmp(name, "traffic_class")) { __u32 tmp_value; - len = hex32_arg(&user_buffer[i], HEX_2_DIGITS, &tmp_value); + + max = min(HEX_2_DIGITS, count - i); + len = hex32_arg(&user_buffer[i], max, &tmp_value); if (len < 0) return len; @@ -1830,7 +1888,8 @@ static ssize_t pktgen_if_write(struct file *file, } if (!strcmp(name, "skb_priority")) { - len = num_arg(&user_buffer[i], DEC_9_DIGITS, &value); + max = min(DEC_9_DIGITS, count - i); + len = num_arg(&user_buffer[i], max, &value); if (len < 0) return len; From patchwork Thu Feb 13 11:19:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973126 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 E5040221568; Thu, 13 Feb 2025 11:19:32 +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=1739445574; cv=none; b=iWo6FlURZ7yeWvQJy88NEaci1qG8U3i3yQUlC1UpETrPdg2d39dbtm4Y+oGAu/gB1ROjOw6Fsk0sm8DdOjLcZgUkpXInIndQILepFXuWgnTKiQV4RA8wptneA7KqQxEccjSc+8cBWXmOUaAW5vpqDYOcJ1mGBctZfiIFnUH4Y1s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445574; c=relaxed/simple; bh=YLx+FFBcppnoQ5foXkrGLrrLX4IzH/DepVjtxekALF4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DIHaQDmH79bd92fVBnAz0d+t7q0hNyiD99123IYJEIPDu+EiaiOQHtq9q4zsqjiPWeYp8ALffgm48HNeFVRjLwfTjWaXhDZyHVKfqp9iCjcpUUyrMavOlaDsBil5ePVV3c4t0GE7GIfHJUngYfGLKmuPsXolqcEEYg52S0PVW5Q= 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=DxgT9iVb; 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="DxgT9iVb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445567; x=1740050367; i=ps.report@gmx.net; bh=YLx+FFBcppnoQ5foXkrGLrrLX4IzH/DepVjtxekALF4=; 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=DxgT9iVbmc/NJVtRvskXSckHbDS78aHBkO9lYFHUc/lMTvlFbjvch+dkfk91oTJV kjdDf1wFtKxLyDJzN5A6Hn4WJRhNDQ6seuofVr0KsIyrpiKwWedRwZh0/BFqA9LH4 kQ0cKCOgdbdr5K4T5yU4JYd6wm0kB4pXo2Xa5TRtPY/WR1Qp6mu07o/TIY1xXsHKM /wYkkf7zr26riIx2q/ZOCa0Kwy07cTyyT0h/Qucg/Me658O9bRPWnXBEgXU6ilTi/ vMepahejldEasDKFEblovvKWlZLTfBaBoT6s/ePsuPQTJs24QlBdUyEsYQtnNbyl2 /kLA6E9AJacOQ7bywQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MuUj2-1tRHcD1670-00xIvZ; Thu, 13 Feb 2025 12:19:27 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 6/8] net: pktgen: fix mpls reset parsing Date: Thu, 13 Feb 2025 12:19:18 +0100 Message-ID: <20250213111920.1439021-7-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:QYEnJf1FkFJvRU7GgyHEvjD4zzUM8mOi2DuD7IDEApu20zi/f7h 4t0QYMhW7dYIPKdcn950pb/Tq5sgcdAT2Wb0a1mouLSXt885JByFQOW4bvbxPRtpma1tLef S+WnOqpqz/RgIerYEyIW6V+OxdOJgU5s0SwOs+dZLhN5A2XBelSzcoi4hmsM1xi+D5cvUSZ TS4Kln6VyNCjYhBr6kDeQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:fxjYW0XhBcs=;XFY+YssHXIoEYxw11exGsUzGG0l yHdmOnAPrfJhLzqHE0y398djJLfkNKy8ukXROaA2M4rWQwBL18alMclHSlO3dLqZM8GWW997u wD0wbePKDAl8WoF10GbK2j34SKbu9kIl7t5BDz/IfLwZImTzZAQeFRLGqukZpsI0JU4NpE1sV pzuyFsLiQi83oHqBk3ezNJDJW34veyOSWB1FLFpCSgLYwMWVuS1woOsXaICTkql5DF5KMeVEB P8WaOMwOY2+oykaT9g9VODziPOnJ2NvoZo1g/9gzGr8dFBaScV7SwZ5Ur7scFnamRpsXC2LnN JxeS5bqSfXfGv55tozCpKipdNzkwEVUeGL6Qhr9x8bpu8hFyzSbTDs3AzV2AfHyhJIlZbZnwl jaLuLlz1wYNTSuU99bJ5i3PLDOaDAbN0bz+He0vQPra0lMIVLwijBptpgjXIXRbM+JWDrZ8c3 hp0STc+IXOFgbVaxIcNGgWEICOL+oxF6ofQl9j66lrEH/TD9/y846w0AKKGkJDBD3ipnG+pJQ HFvjk+bqk31SzAVH1iJ10PvC1Dgd5JYc4H6aDVUebXyZCjtHD8moLngwD8dRCNgt48i0U5f6F Uh1Gvj6BXqM6Cwb98ekB678eLxXjU/R0gY0lPip+yG24wqwM/ufwGLYwEiEeuVum8yI7EhGae G7Yn8az2Xhgd5pPGytWGDJ8vXfX/ug/Q3KMEGc7yFUnrNLOhURykT5vTx+i5S167AVVpjmsi+ voaePsXDy/fMYUx7vBc57nfdPhXxA8CDwOpKlLR+aJ9IY96VTooEpAU7GjFZ5HulocEjNM1Aj VVzKKamaYrxMWCPoLc+2g3uK9YhmDfAICzR75DEO8pD1PC00LA4E26gtmfA/WfsSqZh8zgXbY IeD5D1XRj5h/7os1mkRceloIFuauR0FlchYsQGGuagPTR6KWr8F2iMDgiBEi4JrJhsYGDc2lN hbli2EFy1JZdoVh5IzX3BIAW4fkhjypWB5ExiQM5AYzVsFO+rcqodSOxPgKPN3m/4PjpMV7iF riQcpOrWFPcqtn09McrjPHacUOyAv+G4vdKYreJOHChbfcru8jdg1a8DYAxkRoMsqAgKcKbGi n2M2F0ULOXKjagWtllyVlj7pRxAmZtPkNim6Mn8ChbFdHTldPwROFYHRWCH4YZzS5eRGX5i3G Zj3viijw5wJBacvEP/Xuk7HrZtD/hSxiUG4uOwfKLCQIrlY9qDHoz/yMCj74dziQXNjuUx3oi I7TfTRg29opd7hOKoGKrhJcqfdLRUmaj7Jx2XN0STwa0cyEH+OHo+ftwV11rn7HIfgvDKGOAf Gx486GM8k/Ad5qd+4bzFwq5jxOloQLfOb0M8fPF+ZqUzkZ3TEJroDt9taQ6jeiXytPaJCJmlG qj7En+NGLTrQ6CtU0gHqLlEjsGcAjF/hjc7gfq1Ap9R8a7ZsCeZu7b5RSC 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 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 780435a8e605..1a0cfff2f3d7 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -925,8 +925,13 @@ static ssize_t get_labels(const char __user *buffer, max = min(HEX_8_DIGITS, 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 Thu Feb 13 11:19:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973130 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 CC929242932; Thu, 13 Feb 2025 11:19:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445593; cv=none; b=VQ4sc20qL4DxoeQE8cO6NZZQeLU4pJz0ZgZt8uXSAM1TajhDfC7cMYmztYl0rW3ylqJJppHX/DMkA1tMgzii5owezu76/2n0/xA1+QEhwXC1hHChkt/CBMe7v60IbtCZUZE6xpAaEISY6eIKhLg69As5S3bXRA7pWYdvni3f6Io= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445593; c=relaxed/simple; bh=9uuNd+3GB1+s/Ck5oO4hLGm+v5ubjOuu0ksS9ejQBNs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mi+uDzt1S6C9JmiiI29vWO5tnFnwQSXrdhi9GHKYJL+7Fh81FNmnKC/RKKRvBEfeRo/q+vMugeMrFGrClYWQlsxT/aFlTvTTHodJTQR8lvzj29lYJ1bcL2LQpOJI0/LuBLo6T9Q4x8A/ANiIbaRfN/krbfAUdWOQE6vVdz+3ZjY= 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=TBZRDG/F; arc=none smtp.client-ip=212.227.15.18 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="TBZRDG/F" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445567; x=1740050367; i=ps.report@gmx.net; bh=9uuNd+3GB1+s/Ck5oO4hLGm+v5ubjOuu0ksS9ejQBNs=; 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=TBZRDG/FU0Dd4edOMyPZ+IfPz2xRYwX40eJqSzlOBXPLNCpof4UyIQ7/T//7VrGt SEK+moDh96OhXlQqkvAZ4G7TTFDZQFVTQF1p7cgtdpGM+tt970HS0znfzn/Q3pACV kOmDga7MT3x7Dhqs7IODF5uJ8H2n0SO0h2bT2RqSpgvN5wbbvp24k+n/ZCgZkjwf2 XIFTOjSnPtYeao5w020W/NUuIHIaXzieyjO4iR1Si0HU+LEovLV5fUAgydDvZSNGn Lhh7GikTJ2amgk0u1eT71q/Jvb3KQjG4xsRJkoi8yI5AKX9TnUhEdVkWpgt8SL++O tp84Dydk7x3OTtkXig== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M2wGs-1tfEvb2j9w-006yzf; Thu, 13 Feb 2025 12:19:27 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 7/8] net: pktgen: remove all superfluous index assignements Date: Thu, 13 Feb 2025 12:19:19 +0100 Message-ID: <20250213111920.1439021-8-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:vgUEgNqAatG/XR1nP5KVaQnazr37N5sLpoB+44LlcguynB0/xZk xTDi+3eNeKMPZgUTQAqxiwXkXV6C48nb+OpG5mVXJzdP7jY0efdE8AftqGtQ1ao8yIDO1++ iWxdGXGzVRjcbksf5O9B/SfpUEt/nVAmtS04bI6GZZNNd+xTiN0M9QHxUkDTM5uNm4K9MZe WWOq5k6GhVHc2i8UpGkIA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:FcH4IGXayf8=;FoGcasg0FZKe6gwAuzvYfL2dbSe nIdX+32GMTUMsxyt7w+frcz9J/VqsLZ44Z+ItkTTouB1Taz0+PIXDUO88Bye5XazkmLQIUJks QMiasMhoRZEiQeS+61M+q+lEsTCRPlA7nnU5065mqr8IRd43p/bSVSluXAmFArQaV0TL2W//a HncM97jSrsz1606BWRni2+oW0eqwZcOn8/MA+lagjVP1a2VuyKCxSRKd3cFoQCRx9jjULShAf b9bWYjNQqxmOX7mQwgjatstvxvlWCKedkvvZY/GtApnY16EYOEQgtEuwhQGn6MsRsqV5Gc3Xr tyUQyuSxK9bUJCqfkjPe39PB/obgdk4mpN6kK1072qDXF6Xg/IyDAt3YRimAK2QUUxUltVKr9 Ao/1LTNO7tGlW2SZWWBI0qluGJn2wtpr1Mjs4C4t9E/a3Dn0sGEpfbbJ33B7gmtoGVrRDcTZX gQBZWXr6BY/JlokRoOzogFBjJMl3PbhdbrhnlU7A6oO4MonGu2Kzp7lS+Utt8M+fWBkKE0T5G HsD0yuh01uFgblkk1SWJXXlYzG9ZZDzLYm7sq+EsB2sPuWnpu9kaHfQHLxRXFTdVC2XqvgcVW MC8o4s8Wu7a3PEh07gWf9MZG9t3C6iyTDE3FPapg36nQFngQwt+o5Bl9im29EYsZoyJx4uZzT M+WNiQyPmpNhMpxvqdhdMHM8mrNfI9zfnXeMjVEVV0GSTC8tSGOtDQ5hYdEt5NEjy9Nif6BVc BHiHRSdCvd0ldgPBqff8qIL4wkpPOq50GXlWaDCoVhBpxGkcS8tstHTjIPob+1GKHQA4b+QLC YCVCagQtU5cRDtb0IspqrxlcOT296UeaHiKHjV2ld4AVLDQAUQDRJyiIGUsZF2GGvWtNZ4rDH 93/swLHPXCbElP8Oaq2W8oM0uhf9LASDGNgapxbrmh3CMfuG+d3N+Qb5WxbGJJ60ERP1UP2dE E4tqa9w5lWZ/lZHMQKBDJpVVOyD65xWF8lDiEAeT0PhvZiMRvuyfECyaeUFZAKYV/9HXR/8tg IvDTk9p91MbQX3raeTDyDr6cwHxNF4//vgw1S8do72vMGDsybqpQa/xuzeSIzwGEh2sHlUInp LX6wSubYZtEucTSI2LAPrBWoRqdXWRD2RAJOV8Ivlw94DSO4kumBfNVsZMpFW80uvHHqWRjss lIsDDjR0Fpu4xTd3RhY98AYAbZ0uP5ZAOrOG4UHWXcrwnuuI7YdzmzoCOrstkn/wg6iJ2a7w2 HY+EHbyI8GCnwRenEpCbODJps4OQ0zUpjE2clmZmaL+y1sHQSr9b6R4ZRBX8yyvAvXAE/vunm dM8xschpplX8feFXNMiWvu6ljmVvJp02H8Dlu+pTORpp+74BanCTJILf5YvYl13kYx/A9oHJ/ 5hwrO3OAmvm+Cbag2B+NDsxSp4rqgCQAI1RXG3ECMjI9hnP6IBAK/9/Por Remove all superfluous index ('i += len') assignements (value not used afterwards). Signed-off-by: Peter Seiderer Reviewed-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 1a0cfff2f3d7..bc01020fa03c 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1040,7 +1040,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) { @@ -1058,7 +1057,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) { @@ -1078,7 +1076,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) { @@ -1101,7 +1098,6 @@ static ssize_t pktgen_if_write(struct file *file, fill_imix_distribution(pkt_dev); - i += len; return count; } @@ -1111,7 +1107,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; @@ -1123,7 +1118,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; @@ -1134,7 +1128,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 @@ -1150,7 +1143,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; @@ -1166,7 +1158,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; @@ -1182,7 +1173,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; @@ -1196,7 +1186,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; @@ -1210,7 +1199,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; @@ -1224,7 +1212,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; @@ -1248,7 +1235,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); @@ -1260,7 +1246,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); @@ -1272,7 +1257,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; @@ -1287,7 +1271,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; @@ -1302,7 +1285,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) && @@ -1322,8 +1304,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); @@ -1347,7 +1327,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; @@ -1388,7 +1367,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) { @@ -1446,7 +1424,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; } @@ -1467,7 +1445,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; } @@ -1491,7 +1469,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; } @@ -1514,7 +1491,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; } @@ -1536,7 +1512,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; } @@ -1560,7 +1535,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; } @@ -1581,7 +1555,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; } @@ -1602,7 +1576,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; } @@ -1655,7 +1629,6 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; - i += len; if (value > MAX_CFLOWS) value = MAX_CFLOWS; @@ -1670,7 +1643,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; @@ -1682,7 +1654,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; @@ -1694,7 +1665,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; @@ -1706,7 +1676,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; @@ -1719,7 +1688,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, @@ -1742,7 +1711,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 */ @@ -1770,7 +1738,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); @@ -1786,7 +1753,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); @@ -1802,7 +1768,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 */ @@ -1830,7 +1795,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); @@ -1846,7 +1810,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); @@ -1864,7 +1827,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); @@ -1882,7 +1844,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); @@ -1898,7 +1859,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); @@ -2015,7 +1975,7 @@ static ssize_t pktgen_thread_write(struct file *file, } if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; - i += len; + mutex_lock(&pktgen_thread_lock); ret = pktgen_add_device(t, f); mutex_unlock(&pktgen_thread_lock); From patchwork Thu Feb 13 11:19:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Seiderer X-Patchwork-Id: 13973129 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 83B6321D3F6; Thu, 13 Feb 2025 11:19:43 +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=1739445587; cv=none; b=QExpW9WtnDMfU7jb4o2656D/1xosdryIpGh0JVznbFMek+AM2582PC7Q1Go/pJrGimuFvT7f1r8mVSmHXsK7Ww0Y6sZ16G22F2WgTqOMeGZM7bcLw6VL92P2LiNASvcpfC0EqNF0eop51i8DP81UsJI25/ubjJPOz/p4xpIXFwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739445587; c=relaxed/simple; bh=rssjeyIiAeL8XBn/wMcEhJ0splDoaYGMtiY4pRMGGyo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t8yoXUTsunHuXJvFadq1I3bIalMskzYyXLXr+pcHNQNxrDmEZi735p4/i4UAEphAz7YL+9i3kdOFMey51NwM2PjU4lBbb/qLmaSO6fU+b3r6AAw4/JIZ7O0XffRSDe+02PUI5llkc0/35ED7zq93j50rCAMseW9PDuwH5VhOLWs= 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=psFKTMu9; 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="psFKTMu9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1739445568; x=1740050368; i=ps.report@gmx.net; bh=rssjeyIiAeL8XBn/wMcEhJ0splDoaYGMtiY4pRMGGyo=; 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=psFKTMu9GGzORwmLPp1j7GZEGhtCIN3Jsd95gBQWOV+6W0KARNn5WGVPUaaT7YRR OHbKksvbSMjRpYLb3R+aFRvjd3KUZ0vGLEFjjURDb4x+FxRGa4S4bhzhVhwzpo9yn n2yHF7hjEFDL/V31a3p0MxWcM2fxSAT66PUWK7wdkuVr++i0gNPn7CaD+VNfoZgoJ ovA1Ow4c6bx3/isdpkmHVk3oz2yQMsYNm9F3Sf5xpYTiGL8Uq5QRdTdcFbXkP70BH /SY4w95txUJZqjnoMYyQ9O1whxhkQXs3kfBIEPVsGi7WQqVRAn2ZF1vuMuJoQwen7 s9JLsq4q9oFcelhO7w== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([82.135.81.197]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MVNAr-1tqTKh00tL-00VMYe; Thu, 13 Feb 2025 12:19:28 +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 , Nam Cao , Frederic Weisbecker Subject: [PATCH net-next v5 8/8] selftest: net: add proc_net_pktgen Date: Thu, 13 Feb 2025 12:19:20 +0100 Message-ID: <20250213111920.1439021-9-ps.report@gmx.net> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213111920.1439021-1-ps.report@gmx.net> References: <20250213111920.1439021-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:mWvR9DhNJksyPW1NHcmez+JupXYV8O2yEd/D3bL+dFi3jF/A47o Fch4zqSo3B0u7mRLur0ADukS5ZuMnlol5pUTwtFZuw4wM+cgWGzV6vGAHpnpvsxb7lngXRn avBe8FU93JpiHUs20uMXhx2zUBLVd2rEWYgCzLFmh36Sfu1JVWj8jdmBAYAO9N5voz5cd5K ZMgaR+KJFlzvaQGz6GWSg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:tvyH2MbilQo=;kKH4Nf1RIqtXLOfbIIJV7tXK76q wK05TqkYm625nt812eWDDZFW9haJDnZb5dLn9+KMc3CnCn2y+ftx6PuoE7yhYY0dS/5xs7fCR PGR5DExnxW2Rh0J5OqTuCEurM36ryyAh6Ii96ZdIjFuoemDp8LSNm+zMPNIYQLAZASp/ytB9C o1azae0kxTbZz//qMMBsoCrHr/IPcJNcypuynQpk1q5L0KvMlzOpXfoqpwULcbPmyim9zxVSZ 6G9xZ/Oo/WSwhFVaTVc50HDn++XE6dRRxEJDSCBCCcFvNR2NlAAkw/vnMfxbHwSkpPowaPBZq ceebkNR2sZvYUZujj9N8oryOPeBvLP0PqSw2iZLyuEZ2tp2q6HRMrV/H5qP2+CceCyvrm2keI jzQhWH8p801k9rRknk8MWwS4fxMoOLg7uXwGNUfJMIqYQEIjBKrdm7PU7vz4oQsp1NOplAGvm cr13i0qQPwsP4tfPtaJ22cfYjoTk0oDj2B+ecKLU9lPQKAFMpoQ7OpUJgap1CQCMLRpzupS3P aSFH1OS0ES4QywbY2bVDzY8WJG5dJhYPAogBigSSM3aInQzY9xFlmYUy92d+TkvDDJfCBfJ+7 TVK22v8xw4UMBnhN71MDDs97OAScabJW5nq88uJhkTa3CJBzhyeMqawI4gudmTz8/EVQrKovy ohHbeZiPFSLPj6thxEENQebaPqt3VnHNZ3jdTmCfOTeEe+AYOPxm70WnyrzHC6XBxA3K32RXY pq480FPG15m1neMWNxpdZ/iSKh+XwggMkvbyW3WYr7bxKtUaE9objjggsMywVQR9kF47iANhK NRdh/H4diA4iGK76W7Ikri+b7DcdOvYr9AJ5q8d61ddUGYuBMGCcgKLTLQKR1degvmuIRQ6uw P/eUGR3Z6YCFA+TBLCUa3HIqu0esNS51c3PnOvLyu5e6Ps5HtHgdqeQGTl0WW+cGxLENLJRje tciqCZPQVJLKWI+xkMZagKPMozsPIXWaia0fyI21FW9MRIBCPCOyFx/2UqZg8TfI9tNUXwvt8 uqfNRkoM022hXvgKqYAngBaGPsRfVnc0opfy1LkXsWcEbG29iib+giJEn35jV/tkCGd/6plGU Jk8G4ncNGXnZd7b7OVUUiDIXMcOmritvsZFIZYAGX+hmXh67CUwnlqniObIyg4IaYwi8B1V9G 1ZqX1N6eAyrb/z01QqDtTzvwHkgu3uHq1LguKSJi7k0mAKHjHFi7cWar1yvMZKL7yCBqNhfJ7 SFs9a38a5YJezptXDubEnhHWCbVbPOLu0f0p/WWta33oauBI3mXMmsKL+xaQGy5Uekjx1Ladj vqsSVJTs+8/4N57NiDaxjR2Lg+7U+YESnYb1QlARz8EY5UZjv3aPYPJSdy/ZNy64HJPW8n0EW MLvJ6NdUpVc8d4DKJf2/FN32foPAHWpvwrPAD3cPLHwwazxYA9LnH+03dV 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 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 b6271714504d..38c6e4b72d37 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -101,6 +101,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 5b9baf708950..9fe1b3464fbc 100644 --- a/tools/testing/selftests/net/config +++ b/tools/testing/selftests/net/config @@ -107,3 +107,4 @@ CONFIG_XFRM_INTERFACE=m CONFIG_XFRM_USER=m CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP6_NF_MATCH_RPFILTER=m +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