From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 154A0A0A0F for ; Mon, 5 Jul 2021 11:47:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 06DCF411AB; Mon, 5 Jul 2021 11:47:49 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2057.outbound.protection.outlook.com [40.107.94.57]) by mails.dpdk.org (Postfix) with ESMTP id 5098E4003C; Mon, 5 Jul 2021 11:47:46 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mjdJ+aHva/hrJnq1JfPI86/H5G3hrZV3BPSrBSQBklxui34zLKP9ZhTh8S9reSQfDNlwNjcJN1ee1R04R00lxh3gqErcigLM+KzCWPn/Vi1BpksW2cxW2cd19XnCz57JWub+/UPEjHfXNNn82pm8XGjDuIGgA4ejjSXDQnjTJRlRQeqb9Za7q6pmX19kwyp3GV+NNZB4AQOC5XQQvSAKxzLrFfMvRldUVF72Nk47jiWS+Cbxh34ho/DrRqZBrM5GPqw/82JrQWCHQMXLFNo3+ceNknEOltm3/Yjl7jNQ6ZQPiqrjakWgoaQQXKvk8QiV0+fICf6AEvI7Y3risp7VFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+VytrpdfRbTI4DwyLbhgYfotU+A5SS7Yqih/wCVfCvE=; b=F2+mKNaCwqQoGYF9kPI8PFnigglL4ZWOD8/arbbDwVevsV4ksgJ9rUTsNt+EldTgzCwIquLgTfs1lRm4N+SCYkJoR5zN/bfmFZ42REmnWoLJ6Uxgai6vTimBXG5O/T/SFeqdbytGD/VZZ2yBajiVGP7KW8PUUxtifwX+3ckivjiTCndxCDQEw14OW7wGkA8FePgsf3lvVI68+2I5QOLOzJNPvFaoXhpn+aVkUYGbOtn3he8VcNmyRUnQWd8uw82LrC375NVdMvX7y+3jE8RkkvyebuJw7nG0zFFtHKCkVVewv4CPXoxM/1PL4Y4dMdO4mBA5fXIWKtd6Rbe6w11swA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+VytrpdfRbTI4DwyLbhgYfotU+A5SS7Yqih/wCVfCvE=; b=Qtne4T0NyayGdf9dC7ZF3CU2tOQASPTeJxfa8u5RFPsPhl6fvBb560DHLi1kjBNjXttjuOuFeq8zLUoNnFlWLdoCs3EcSN1qb9sf98Uhuf8GR0/ZSGuO2bFwgE2KL3rkqX/nIrqkgxm9e3Q/kVBS6GJfJ3ZSKCTSBts4PEgLVBkB8pTlo/HsLQC0t0t2OX695FbdxbiKptzFookOJRcsj7/KIc39SzuIxMTK2zbFDMTR1Fg15IYZuHETyO25pEqQ1snRox/wvulEvItQrL6sxv6hkYaODdMCozAvQ6YHPmFaatEKP9vvNTc7yVn//bg2oiz1BKOUq11MXvjr0oshWg== Received: from BN9PR03CA0954.namprd03.prod.outlook.com (2603:10b6:408:108::29) by BYAPR12MB3128.namprd12.prod.outlook.com (2603:10b6:a03:dd::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul 2021 09:47:44 +0000 Received: from BN8NAM11FT018.eop-nam11.prod.protection.outlook.com (2603:10b6:408:108:cafe::ed) by BN9PR03CA0954.outlook.office365.com (2603:10b6:408:108::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:47:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by BN8NAM11FT018.mail.protection.outlook.com (10.13.176.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:47:44 +0000 Received: from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 5 Jul 2021 09:47:42 +0000 From: Alexander Kozyrev To: CC: , , , Date: Mon, 5 Jul 2021 12:47:04 +0300 Message-ID: <20210705094704.26585-1-akozyrev@nvidia.com> X-Mailer: git-send-email 2.18.2 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.20.187.5] X-ClientProxiedBy: HQMAIL107.nvidia.com (172.20.187.13) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b701cc26-75b4-4ec8-90b0-08d93f99f044 X-MS-TrafficTypeDiagnostic: BYAPR12MB3128: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lb+05vCnbeNKq0TtKZijEs35088Ym73XwMUxnnI7M07WO6kzcHhNGG+7x8DPM7jh0kU21yc5LuX+8vQ0wGSt+rTvB6gWVY101tBH7ppIg/koOZrDvBptAZRrVwpOdqjl+yxKKnHPVAdCrIOup3nzeuDQuazNo6vxuL7a42Z9TQeUaWpbPj64mzpio/sGdR1D7lfNdtzXAjEb/UQZvlbyBtNQFlYIix98/MU95SZlIy00iQXvXAqw5YpdMV+L9GCzdPd4vSIMCxNWjq0BJm3iUgzpWTIbD1Fm56UIPSKDXafaY4iZSOlI2ANkiQsfEfqkd9rd82JDWCC4NIJPoK53Vm5diWhD76s2GrwwkMaq/bFG757y9aYMoDang6SsX4qP2IlgKTcHKXAjy+r0uUl1X5OjHKJ9FusE4t3nUDDTO5UYjgk/cPTn5JoUbmg/DFO4Ome0o1AoF4eB8KZKufeudzhUJpCPizktD16DmfD6nNHlLz99wjGDqXStRWPlCxFIIV+LBXHOU1+xvjBv2TAsxfL7hQxy5LN4krozgM27+g9tfvG8f4AdRJ7I5ffjcshvNbK9Kz20ybRas5FjFWD6KC3zePGCvhfO/wIYLYJOrJd5kuOE/2lV61mXZPupZErhOLxp/qgD3UBChs5vXMpr1JBbv2DjpE1hRyj0c7NAYRExZGlGPZeZaCGI1oT/8zavNW+nEDr1M7+PH7HkdaUiGw== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(136003)(396003)(376002)(346002)(39860400002)(36840700001)(46966006)(5660300002)(7636003)(336012)(356005)(426003)(55016002)(54906003)(83380400001)(36906005)(6286002)(316002)(70206006)(47076005)(478600001)(86362001)(186003)(70586007)(4326008)(82310400003)(82740400003)(16526019)(107886003)(450100002)(6916009)(26005)(2906002)(2616005)(36860700001)(6666004)(36756003)(8936002)(1076003)(7696005)(8676002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:47:44.1388 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b701cc26-75b4-4ec8-90b0-08d93f99f044 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT018.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3128 Subject: [dpdk-stable] [PATCH] net/mlx5: fix offset calculation for modify field action X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Offsets are not taken into account during MAC addresses manipulation for the MODIFY_FIELD action. That leads to a wrong split between 0-15 and 16-47 bits and corrupted data being copied to/from MAC addresses. Use both source and destination offsets to calcucate the proper modify header action specification. Fixes: fdd0c046f4 ("net/mlx5: fix modify field action order for MAC") Cc: stable@dpdk.org Signed-off-by: Alexander Kozyrev Acked-by: Viacheslav Ovsiienko --- drivers/net/mlx5/mlx5_flow_dv.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index a04a3c2bb8..4ddd3beb33 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -413,6 +413,7 @@ flow_dv_convert_modify_action(struct rte_flow_item *item, { uint32_t i = resource->actions_num; struct mlx5_modification_cmd *actions = resource->actions; + uint32_t carry_b = 0; /* * The item and mask are provided in big-endian format. @@ -422,8 +423,8 @@ flow_dv_convert_modify_action(struct rte_flow_item *item, MLX5_ASSERT(item->mask); MLX5_ASSERT(field->size); do { - unsigned int size_b; - unsigned int off_b; + uint32_t size_b; + uint32_t off_b; uint32_t mask; uint32_t data; bool next_field = true; @@ -441,7 +442,7 @@ flow_dv_convert_modify_action(struct rte_flow_item *item, continue; } /* Deduce actual data width in bits from mask value. */ - off_b = rte_bsf32(mask); + off_b = rte_bsf32(mask) + carry_b; size_b = sizeof(uint32_t) * CHAR_BIT - off_b - __builtin_clz(mask); MLX5_ASSERT(size_b); @@ -463,19 +464,23 @@ flow_dv_convert_modify_action(struct rte_flow_item *item, * Destination field overflow. Copy leftovers of * a source field to the next destination field. */ - if ((size_b > dcopy->size * CHAR_BIT) && dcopy->size) { - actions[i].length = dcopy->size * CHAR_BIT; - field->offset += dcopy->size; + carry_b = 0; + if ((size_b > dcopy->size * CHAR_BIT - dcopy->offset) && + dcopy->size != 0) { + actions[i].length = + dcopy->size * CHAR_BIT - dcopy->offset; + carry_b = actions[i].length; next_field = false; } /* * Not enough bits in a source filed to fill a * destination field. Switch to the next source. */ - if (dcopy->size > field->size && - (size_b == field->size * CHAR_BIT)) { - actions[i].length = field->size * CHAR_BIT; - dcopy->offset += field->size * CHAR_BIT; + if ((size_b < dcopy->size * CHAR_BIT - dcopy->offset) && + (size_b == field->size * CHAR_BIT - off_b)) { + actions[i].length = + field->size * CHAR_BIT - off_b; + dcopy->offset += actions[i].length; next_dcopy = false; } if (next_dcopy) -- 2.18.2