From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0049.outbound.protection.outlook.com [104.47.1.49]) by dpdk.org (Postfix) with ESMTP id 2086E8E7C for ; Tue, 5 Jun 2018 02:13:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ythWaDYf2KX2HkYNTnrr0F5IiS/Wac+3w0pSaQ1D7L4=; b=XCRMCTds+MlLHUY1c6rrxSfhBVFoZwQ3CxvhVPA0UQpd92JirY7XEj0cysKfTzRY4ccp5l9eVHABtvVXx1jSLJu7PrpO1IOJD6fomZHk+Kj4PyUAPK/KNvdbB4w1uImr3xA0bDaBmufKUoRo2QCgzKc5DG6LlymzbfLnEYv3NB8= Received: from mellanox.com (209.116.155.178) by AM5PR0501MB2036.eurprd05.prod.outlook.com (2603:10a6:203:1a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.11; Tue, 5 Jun 2018 00:13:41 +0000 From: Yongseok Koh To: yliu@fridaylinux.org Cc: stable@dpdk.org, shahafs@mellanox.com, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Date: Mon, 4 Jun 2018 17:11:18 -0700 Message-Id: <20180605001129.13184-57-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180605001129.13184-1-yskoh@mellanox.com> References: <20180605001129.13184-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: CO1PR15CA0060.namprd15.prod.outlook.com (2603:10b6:101:1f::28) To AM5PR0501MB2036.eurprd05.prod.outlook.com (2603:10a6:203:1a::22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM5PR0501MB2036; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 3:DdUpo8+13LO5FZaEwjJzx45GnD4eVG/TlSr2hAllqOibKScj7HRIHbURiI5PDIzqb4VqiIw+w1GCLZoDtKwc95XTmny0M+Fp5xsLB1HYZrgPjegTN3fGIf+s4DCz2LnIuXX6j0pq83Sp+z9MNcxevtZVviPEgipFuXeqBemh2XvDU6/DHFSXICh9cnZUNCIIuFkJCYxXR4Fjpzj+EbNV2aPoHPML8Tny8UJF5w14K54HW1QUR0edKELcdNpKXjwv; 25:vOX8R0XORwgRjsl0avX7kfIW5uslIGrRVWrAo42cPLnozFnFpnabLz5r9L6R9Tll2aCVFnofm0KHOHG0KhLaKKgI4VPpbWZgMgVBGHW6kB01IhmZO0+e+5K+WNUw+uAXh/oKRwt8ZSsnRtKofrNXjcuiONx+Mullu8+d0dTuRcZ7iVUbKysh1O0Ex3Ru1s7qDb9sJ9b3VoZ2QygQW8fS67q27ZlOd/oqKBjvwZ5qci5ZQVLtyYabay/mJ9wsNvzTuw34bJlUq0s5maQ5nahkJX6jbqB58uajkstQgGontzb6dXPz/5K4yjTCVUNLHPP1WZ6IZnGYxsAtCI5u33r+kw==; 31:0C21NBHL1TGALpjLFOURdgKz4we5LUQdOPV4Ny9QosEiOf0Yiv2WjfKro/rvX9r0MtM3HWdK2cBGWvRHOho7A1vusaR0C1V10VgpikebEkU32Gns2TmvP9gFlToXErCmswnNh1jcwN/8dHLwKX8DpGFRV0oZ4Ym6zlq9JhHa+DmO1G8n9bsHRPCqBg+6Q5leyyzvmDEaS5tpNyfsT+c1BunW7m7vyfSRkuMy2LZODCY= X-MS-TrafficTypeDiagnostic: AM5PR0501MB2036: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 20:WpBxyOqMWy80NgvWn7HJUTOaEAOn1J7HsJBsTFuDPdqfgxrFkE7sqa3Tza31B8pYoGJ0/i3Sk1wVbwMjAJUfLcZVW2wsI1cd3zrS03jOv6pUe/QAesFSH+rID4dfcCtoP6u2m9QXFB6z78rjiXOuOGpvtzbgyL8bpz2iHTrCvelXQrLGU4Z40uYjCf+t7bJlUvn3kdXK38kb0EyQvUTZsBnX88Y4oVA+vCtns3CA0ReyoMpJNKUQEAuNOXfpaxxRntz9a5VXODSbE0/X/Z4wq8WX8HjlMgDda/KRNJsbtr0b9oEYatfhTqclv5loxOnYTdUs21PmvSFtNUQoR2Jx6nhKdobqo5RctytEoL1BMAhN1I5b16xpsVcejip3/dBw33Tx3TMOE6tYRkg63WlgECQzVCpsvKBuITdIWbPNGMvUeWUGXVraqN7OnOHaUWVqSRxcADSKmhglHnORgOU0SZqJq9vVmvT+RIirAzHZmtQhAwpiEs2O8qaQIU+wB7MK; 4:Pfg6aFyMXucJBQfbdSfTFMcP1e74PjL3TMwHQBB9dqcS32Q3cWo+sgefeEQSX91LZsx0yLTE2sL4PjCC7eFE1qvdN/75Mcb1zP10PuLdwUof2U0hBydqd4IMBb/49ti2Qxn9CIWMfAnA3292kwBVng7Iz79VC2i6bgSRG2LxEWw/9cJMFjDWI4oEQz01itsZOQ9W/azgFG6A3MnurF6W4rA4d191MEOe/bF7Rlu3T7/lAXRK/JQlqH1xMQzehXWQZ+jHRAgS/HSZn6GrUHL0PA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:AM5PR0501MB2036; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0501MB2036; X-Forefront-PRVS: 0694C54398 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(1496009)(39380400002)(366004)(396003)(39860400002)(346002)(376002)(189003)(199004)(478600001)(81156014)(76176011)(7696005)(956004)(2361001)(50226002)(305945005)(2616005)(50466002)(47776003)(486006)(97736004)(5660300001)(6666003)(2351001)(106356001)(8936002)(186003)(81166006)(52116002)(6116002)(476003)(6916009)(23676004)(386003)(446003)(11346002)(59450400001)(66066001)(26005)(3846002)(8676002)(16526019)(1076002)(25786009)(21086003)(86362001)(2870700001)(575784001)(53936002)(4326008)(2906002)(316002)(55016002)(36756003)(105586002)(69596002)(68736007)(7736002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2036; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA1MDFNQjIwMzY7MjM6aHB4azBuMUJFdjJuSHB0T0REc2Frb3JI?= =?utf-8?B?a0o1a3hTcWJQVFhmNEsrRVBMNnZQQXdjZTUvNU1lbWJuSTV0amFDTmQzYk1D?= =?utf-8?B?Z3JMdkFNLzViTWRDMWE3S0ZNcWxPUlgrRzcyU1lSUnh6Sk5PaFZ2aGJTRGdN?= =?utf-8?B?UzVFbkVydWw0bWtqai9JalFITXNZNTZnOTNSbGtNbTZhSFdEUUVHbGZOYkY3?= =?utf-8?B?MkF3K0pHZ2lPRVpkeU1tQkR6SkxiMDVzRjdReVpUS0dWeldNSEZNU2Y3Y3M0?= =?utf-8?B?OUtIeHZ6a2pOYXRxMGVUR1NtcTNyUURHM3Fsblp5N2pxUXJaL0NnaWd3SVZ0?= =?utf-8?B?OStzYjZzNTVoNDZRRHJRVmNIVkU5QjlSWVQ2SkNOL0YwVVZiSkE4ZjdZYTdn?= =?utf-8?B?ZGw2S1JTYktTbktZN2Z6cFo2MDF4Z3ZyMExnckZ6YURKbTFqczFQQ20rNXN0?= =?utf-8?B?T2xtTWNRcWRuRUxjTGUwT0NTSkpvQmNqTklyZEJZTmQwYXpVZkFlWEFkdDFk?= =?utf-8?B?VTJrVVBxWC9SZllBUTJwMkJqRTNjZkxYNDNBR1lkRXBuYms1NWt4VzE1eEh1?= =?utf-8?B?bmpjWlkrZ2VWdm9OZ3Bma1hqV3JRVjdKazhUSEFMTEM5VXR2S1cwRGd4RkRH?= =?utf-8?B?QTBmMllGaWRmTXFzSVlkNDdmWVV3ditpOTIyRmkwbHZJUUFSUnlIc1kzZXF2?= =?utf-8?B?ZzhBVFBUcmtxaHgvNnNRZlE2S3Q3ZXFDN2drTVQyUFZ0QnMrZnNWMEliSFZD?= =?utf-8?B?UDdudkloZ0V2ZE45eXQ5SVFURjdQYnZqUENnSmRHOVhhNkJ1emRaaE9MZU03?= =?utf-8?B?RTJ4d2VOa05hUjFYY1VyV3R5MU4za3pNekhEczdxWEQ1U2RYQm9abkhFdHJp?= =?utf-8?B?TGcvK0QzK3E3VDR4UnV5K0Q3Y2t3V1owLzNIYSsxRk9ZVk41MW9zak41UHNY?= =?utf-8?B?RnkxTjVBRFd6NkJRTEtlWFNCcTNIMVZmMlg2WFhWN0liWHAwL0JMWXZmMWVo?= =?utf-8?B?cmFNN05NaHZtNW1mZWRpV2VOeTh3RCtibG5ibGhnY1Qva1hCN29tUDdNVDhs?= =?utf-8?B?NWN5ZHFLbXZsZE1rdEsrZlVHUWo3WCt2MFN4UUcxd0YyaXloRVZiYmpLZG0y?= =?utf-8?B?REtzSUtuSmd0VWJQL1M2TUg1SnBCMmpOcXVxc2dSbGpPTEZHZWdQL3BZSVVs?= =?utf-8?B?K2hjbTZ2bktaNkk4Y2l6S3V6UE5IZ2pacWJzZktTR0dtZzRDNHVRMHlYNFNs?= =?utf-8?B?bndsL0cxWkdDWWFQb3dSSU5hQzdlN09hR3YrNC95Z1EvaXByZlR1ejM3WVRS?= =?utf-8?B?QjY5a0ZueFYwMEhkSHZDaDQzOUpDdnVCZ2lBSytkTnlyRVBYUXM3enpoWHda?= =?utf-8?B?YnNmRWw2TE9DdmpSQTRtbjBock03NUE4RGtWa0d2dVZHTytrVFIzUWkwKzNV?= =?utf-8?B?SGxEKytBUTkwUjF3WlNRY2hmTkpnbzJSUW9yWVdqNkdxSWpCbEpVOG5EWnln?= =?utf-8?B?WkRxN0dvN0x2NEh1NFpXOURFZEJhTVdWZUhFbXZmdmFyL2I1K0E3UmloblFk?= =?utf-8?B?dDNaczBMZ0U4RzErNmMzcTFxNmlnR0VKWVRiVUZwREd3M2ZpcmJPOWNsVmdo?= =?utf-8?B?MFRFYjA5czA3cHNsSDA4M20wc2xLRkhKL3l4Szl1WFJzRjZTTUJFWGYzUEtr?= =?utf-8?B?L014aG9DUzJkZFJKdW44ZHNBZXJqZkZZU0xnN29ZM2RteWZvYmdTYURvbHAy?= =?utf-8?Q?LbWE26xtEJel824xMiPwL8bOoSfFyK3kx87x3Bw=3D?= X-Microsoft-Antispam-Message-Info: nSgzXwIQhhYXIs1uwvvNdjAH8qQz/0jR2ml+IiaEQsJhtuQPZnEvboOYI5gUj+E2+c4rMxjl91IpS7CgmRBRbzEWTbMlYBOvjSIxoGJ0FcpmWURGjCSer/7OYoZo38hg7uL4jXXgIFKYMVOYe4MTG4gDw/ogdAdQdAfHYlnBQBRPLXFERroYNSmrJ8s5QquS X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 6:BMYfOP3n5LG4WzNg9SBzC9c7n6KoxWFcCuYbwIAsqT6tocDcIEhxigcS1ZbyLI0CPGMuxSzORyAdyTzGemQ6G7E2dWX+Uq5VIK5wdIRTI/Ud5rkDf4BvxJhaNToad2z7ZqsIpudWfvsIlJDN/vF7a5uH9P5tOIH3v9tDSbCYrRrDpOChPh5EPSSHknma4GARsUuRmn2EV6QzmK8vYPCVYUg21RxZQXs0qj7n7FaBKLMOg6o+s+urqbrqf/kpv0h4gAJmdCL1MEbFDtJEdOBP6CItMqTMiWeEdmJMu/Pa4mH0Ov2YBctEHqY1SGRk5aP0H2PQzPbyu6IYqwqzn+cQTKhcYxQenEuQhplRNzQ76PZkHr6ZXXVBEGR1/UF1s0cyY76Ese+TKXzBTh9i6q0D3zwVGaAeWDSq0t3YHjyeGJfnJT8Wg6PfShZf/sl66suwJhGlCUVe6MfM47GCbopPgQ==; 5:TN4aKkPYDMQ0NMQlSyZYqr/YZbL2srQTskJIo0/JVG9O22+iyPCt95gD8BuKu7EpuB6j4xSGR7muORHZ3EA0jCtn+0L1jGI+49P94g8Z4ZFUb+Ikweh91j0Rvm2sKg8ZljQMsSUTJC/ljuvXLoVuaF+3YJ3lulQoOdjgdeiqJP4=; 24:ylluOwiE3owZtRE31fJH+weIf4iXmXIAFnIOlcesSsAH4odLliNu1nMwCMek0XQ7igBni2Nw/8WQcyOyT1Td8NS73zh9LbUSlNA6yn5ihdY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 7:awNu3BYXuxPeDUs9c0MVgxn2O2AwLBF+V7YUTLMrEkudqxqt+P2dHjPzR+IB49Tl4fn9t7sCYzvPK2dTfBF8qEVaT9f+Id3AtgtCoKbZ1j2kbiGpnsZjLW9fb1DeyAwY2q+vFRkH53i67BoUKzaa2DoiWpZ/XJhItu3XOSohzI0zniApDOQHLpwSuyoC66SVw5CmiKT4OpcMj0lMCDPlIAoN0Dyrz8dgm/Vv6l6+qXhv48WZtVKK5geFPUL7AE+R X-MS-Office365-Filtering-Correlation-Id: 7ecad786-1da8-4fc0-e3df-08d5ca793258 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2018 00:13:41.3582 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7ecad786-1da8-4fc0-e3df-08d5ca793258 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2036 Subject: [dpdk-stable] [PATCH 56/67] net/mlx5: fix flow validation X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jun 2018 00:13:44 -0000 From: NĂ©lio Laranjeiro [ upstream commit b7a7c97a40cf8c513ca4526c4734d7401907692c ] Item spec and last are wrongly compared to the NIC capability causing a validation failure when the mask is null. This validation function should only verify the user is not configuring unsupported matching fields. Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions") Cc: stable@dpdk.org Signed-off-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_flow.c | 77 ++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 52 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 425fbeb40..f9a931438 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -504,7 +504,7 @@ struct ibv_spec_header { }; /** - * Check support for a given item. + * Check item is fully supported by the NIC matching capability. * * @param item[in] * Item specification. @@ -521,60 +521,33 @@ static int mlx5_flow_item_validate(const struct rte_flow_item *item, const uint8_t *mask, unsigned int size) { - if (!item->spec && (item->mask || item->last)) { - rte_errno = EINVAL; - return -rte_errno; - } - if (item->spec && !item->mask) { - unsigned int i; - const uint8_t *spec = item->spec; - - for (i = 0; i < size; ++i) - if ((spec[i] | mask[i]) != mask[i]) { - rte_errno = EINVAL; - return -rte_errno; - } - } - if (item->last && !item->mask) { - unsigned int i; - const uint8_t *spec = item->last; - - for (i = 0; i < size; ++i) - if ((spec[i] | mask[i]) != mask[i]) { - rte_errno = EINVAL; - return -rte_errno; - } - } - if (item->mask) { - unsigned int i; - const uint8_t *spec = item->spec; - - for (i = 0; i < size; ++i) - if ((spec[i] | mask[i]) != mask[i]) { - rte_errno = EINVAL; - return -rte_errno; - } - } - if (item->spec && item->last) { - uint8_t spec[size]; - uint8_t last[size]; - const uint8_t *apply = mask; - unsigned int i; - int ret; + unsigned int i; + const uint8_t *spec = item->spec; + const uint8_t *last = item->last; + const uint8_t *m = item->mask ? item->mask : mask; - if (item->mask) - apply = item->mask; - for (i = 0; i < size; ++i) { - spec[i] = ((const uint8_t *)item->spec)[i] & apply[i]; - last[i] = ((const uint8_t *)item->last)[i] & apply[i]; - } - ret = memcmp(spec, last, size); - if (ret != 0) { - rte_errno = EINVAL; - return -rte_errno; - } + if (!spec && (item->mask || last)) + goto error; + if (!spec) + return 0; + /* + * Single-pass check to make sure that: + * - item->mask is supported, no bits are set outside mask. + * - Both masked item->spec and item->last are equal (no range + * supported). + */ + for (i = 0; i < size; i++) { + if (!m[i]) + continue; + if ((m[i] | mask[i]) != mask[i]) + goto error; + if (last && ((spec[i] & m[i]) != (last[i] & m[i]))) + goto error; } return 0; +error: + rte_errno = ENOTSUP; + return -rte_errno; } /** -- 2.11.0