From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30070.outbound.protection.outlook.com [40.107.3.70]) by dpdk.org (Postfix) with ESMTP id 9C9D2CFA0 for ; Tue, 5 Jun 2018 02:41:16 +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=tuW/nTMmGxLNDwFzj2jVONEt1hVVMaD0ys4n2Pl9XReg5qXN05dM7/hMG7M5LXXdswM5PNgdO3dXeXBQfjyPEGmkIeXbz3UEE8DvVGrvTD3Hez0y+88p3+Pc2XcDW1zl7rpXWjg8+vZ5pH5A5/64unKEc6hSFqGOIqeLcl9eYAY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by VI1PR0501MB2045.eurprd05.prod.outlook.com (2603:10a6:800:36::19) 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:41:14 +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:40:26 -0700 Message-Id: <20180605004029.14593-7-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180605004029.14593-1-yskoh@mellanox.com> References: <20180605002732.13866-1-yskoh@mellanox.com> <20180605004029.14593-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: BYAPR07CA0013.namprd07.prod.outlook.com (2603:10b6:a02:bc::26) To VI1PR0501MB2045.eurprd05.prod.outlook.com (2603:10a6:800:36::19) 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:VI1PR0501MB2045; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2045; 3:jxKxf+Ahpbg+r0ALWncGTmTjrsuF/zkqQbG0Fx1SW2xi5002vQ870PlhEHld+4jEHSYHs2GJM5lhRx+4RwMfJ5sg/KwR/pFYt+lYxxsMNyWRpqU/U4IH/OFxQZL/4FwrEXyxGgacIIA/u7CmlmwO50+S3RZBbvSVwdaHweELMt80Qcraqm3VkUcN2xQErlIJMHcDeWulQA0taqwXjW4Kmn6V5fP+NBzJKiPbp+8UDHQxKOjLpYj5EHHaSPfvnQR0; 25:EwmUNyhoWUZuDyXUvHEeynnNvnfJ1y3upxkbQn5D4vMwZ/5EAZf15Q4IfKoIwZzcs7f5IFcf6qglyaFUVsnqDhB4Imq5EM+B4CT4nOr6fXdAZWvx8KtQ8/Vqzgh1VjuuGcjhJMgBS26PBk3529J3mhIP6Zy8BZ0wB/6kVpChVkGlim0BlNb/KXO99SKcJYhv1rafmnFse7KHBSVvM/GGC/VtQAogXEzU/fxMJweVkRs7HoU8IBSr2ov8rPMo0WLqQp12a4/nDYuEwXsIDJWGp2luCkKyZRnPGijEJiOJ6CrltDUeqAXFoOXHFAjvoFCxmrEK/P5hk/4aP/OFF1fGtA==; 31:YvmBK9F7kYaBx7YDImGpzwWPj10nd3T6BYMBbwPhiXllH67JrXC3M4E/RGtK3hfjjzMJLoyE5SPv1TtjFmuhC/Nz2bPeEkkLmrn5ZD3crUbply/miRCENjL17eq0KFJWsnfVwetjCI1ARGtTxRnRazNw8lMROGN4XnV925KC/R8F6MFP5W6A0qoNVE0OEYz4/jIj6FJsC1zZl6ZKaGUcWR8UXFJVXpB4/cf/fmgny78= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2045: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2045; 20:9knXp72nww1ne1Ma1MLLc4N4rlEC29iblwBIR71JDKeWDOvqSIGz1F9+T3fT3B7OBysi9kxM0KMkMO6KP3gc00OdQxI7Jf+kqPL8qJ0dKrkpBs1x4jyWXASSLmW1QXNwddcxkknpeVV+zLSrADrbcK2im0amNogy3iv++4qv+UP+xhrmwgjrpy7KlayefU5IGh2VWNwEXcFmQg+UbZ7jZ15MqtAQUBPu3B9E2BQZZ471XQp4JQScOCaUU2IOPqT25+eFuhEJFVtws2NjADyjLfN1O54npYNLzgCyZu/4008baymOQeCNwVOF20HTIreE0eXYW87XfXM0vyWHrtFIKh2JWj6s9gbig8gDqVIMyoEiOwUqYAEi980WElKe30RaiZdvCEZGfRZlj2C2tvuGNk/NowGpTKNq+Fex17tQIPY5OKFJOXbyAvBX+Qk584G2ziQc1MRPP72K0iFlFPYHMcYfTVMZtOBK8b9XJm8Rt/uhkv1uFrz8XjpvENwniwBM; 4:R68Thc01HKyJ8fpGqA3xpBnIJfo/pjNWz0QiGKOKUHcNmmfj5HuyLItR8G5BRHf64jyQybqLWq0xKENGpT2jK62qp4KaFJV4eyeUCt4xDMPwNqGuKpAe78zIxj5ly9nZdGfcQlBZFe/nWO49nX7RQ183J/U0K/RdGAP940pFdXxl/ncYk6IDHRcRlCSYH/xWwQfKu+M3MMFxT2GAvk2uUZCVz1CuLW75crPvN2uFDj3wJa+AwmFB6rpr2VFSjgcJE44IPeRXDBMrP1T9czd63Q== 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)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(3002001)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:VI1PR0501MB2045; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2045; X-Forefront-PRVS: 0694C54398 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(366004)(39380400002)(376002)(396003)(189003)(199004)(5660300001)(8936002)(3846002)(6116002)(6666003)(2351001)(55016002)(2870700001)(97736004)(7736002)(305945005)(8676002)(68736007)(2361001)(6916009)(2906002)(575784001)(86362001)(81166006)(81156014)(1076002)(50466002)(53936002)(47776003)(446003)(36756003)(105586002)(2616005)(486006)(316002)(956004)(23676004)(69596002)(52116002)(7696005)(11346002)(386003)(476003)(59450400001)(50226002)(478600001)(66066001)(4326008)(186003)(21086003)(25786009)(106356001)(76176011)(16526019)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2045; 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?MTtWSTFQUjA1MDFNQjIwNDU7MjM6cmIzM2dUMjhyaVAzVlJoV01TWEltcnNB?= =?utf-8?B?Q1B3bEV4bGFpUm1aWlphUE91aHdOZHZCYzhIcjVLMDN6WW54ZGtmS0lCNW1y?= =?utf-8?B?MnFPYTlzSzMvbmxXUFpzVU9tcDNSdWoxUlJhemk2MmhaTHFFVExYaFRraG1r?= =?utf-8?B?SmNEYjZrKyt6ZmxSb3dNckhwOTlpRVZRMnY5ZmxsU2ZCLzU0TzZ3M3YvQmNm?= =?utf-8?B?b3c5bDgvYnI2WXhEYlFmanVKMUpMQXlNWHN4dVV0OXI0cno2V0hTYWRndTBo?= =?utf-8?B?ekxISyt3NWxlblNRMEhUeUJMSmNSNTNpdlFaWHBlVmNwZmhTUW12Z3hWeUZM?= =?utf-8?B?bjkzWlArNlFtOHZYM2FyVDFoNTNkaWpqZTBEMjd6NTc3aTJmY0hvR01LQ0Vh?= =?utf-8?B?dkh0c1pFT2VLRDVtL2picWdmVkhlNUhxMzIrVUpuWXlJVWU1UDV1NGZBczRv?= =?utf-8?B?aDRqelptVmZ5R0hnV0ZzMjRqdnJSblMyMVIvSnNaSDJjNTVSZkdiQ1pObnhV?= =?utf-8?B?M3ZBNlV5YStsNHJiK01TMWlZMXBlakpmcFM0NWxJcUgvL2JLMTltd1o4K0NS?= =?utf-8?B?VTZlTWduSk82aVJ0V1E3bUVIaGZmNVM5K2I5OWRMVDRzSlNNN2s3a0hPdFdK?= =?utf-8?B?MUVhUTVzRmdNNmtheHpORkU0ZmFwMmV5N2NpTW9RK2FHMFpBSmJQNEJUUTBD?= =?utf-8?B?VlloN2dVcHp3R0xxdVRvbklTUXRRbnViS25wLzNRZC9lT1doZlY1WEtrQ3Jm?= =?utf-8?B?RFN4WlcwMVozeWRkVUtBNGJETG5kVWliVGtlUEtEVFRGT3A3SmNoWDU5VThD?= =?utf-8?B?VGtvWUJnUUNKMVlIUEpGczc5NUl0ak9OOEhPNVJOZkZmemtXZnFMTmRMWUFB?= =?utf-8?B?SzBtL0VpNjJwK3lIU29nMUUwUzN4L3g3THU4YnV5QW1XSnFqRCtKUFBoVmQv?= =?utf-8?B?aVp3cktCNjFFb3MwTi9TYUlSRUYvT3VuRi9ZZUplT1ZSeTRXUFBGeGpOUHcv?= =?utf-8?B?TDNrZEQybElOT0tyeDI4emZNMWFYOHcycWVUM0FjQ0FoSEU5N2R6bnhkSzNB?= =?utf-8?B?d2ZPSytkN2JyNWhPL2xma094Y3NWeXhIeUZPRFBuRFJFVlQzWjRnZTFnQ2xz?= =?utf-8?B?OGd4dVUrbDZrZHd1OXQ5Y2d5dTJJOHFJaEMwaU1KNGhKOGY3QnBlWEp6bnV1?= =?utf-8?B?Z2R6ZGNKbzNvNTFCeXl5dnNlQzMxQkx4aDB6eDZJY3lnRjRMZHIzR1ZpTHVp?= =?utf-8?B?c2czN3hkMWdBWjFtdUVhMmM0S25zNm9nR2JrNFZtVkN4TUJqeUpqd2xYUFov?= =?utf-8?B?aURPMWxPZytYOVZXVjZzek5Pb1J1RlhUd0FTdlBIZlhOVUZnaU83NTVtLzdr?= =?utf-8?B?UVN2ZmNBT040VkpvamQ2Ulp2dnluL3BMd2RYcWxDVXd5WVdiZjVMNkthRHpC?= =?utf-8?B?bGw5ejk2MmgvMmtuY3NGRHhBTktuWlFzeG1WWXYralFpUm5uK3RHZTB0cmth?= =?utf-8?B?TDVDMjV0dm1JMXBtZmlUYTEyd1FUbUtsdk9HUWt5M25WVUVwRFc5bWgwMlJT?= =?utf-8?B?V0RQc2F5aTU3RXNWT3g5WDJ5RGhHR0lNdnVCSjhadGFhUlY0dGpESWNCSkI5?= =?utf-8?B?VDl0ZG03WTB6ZjExR002N1dsOHJvczJlMjlUTGJmZmg0N2o1WjNRMXhGY2RX?= =?utf-8?B?S1luMEtBdDdmSjZpODZDWnA4NVl3N2tLUDUxRG80cmNCNk1GSyt0VUxoajd5?= =?utf-8?B?c053aktuQ1NQekRJQ3VPcVBBPT0=?= X-Microsoft-Antispam-Message-Info: D5Ww9YsBnYdkwfSbabJxnGxOPdpcqILSgkQN79SnaH6UaVpJRhivqMogEbx6RU6NslOWDxcoExjtvDWO5JeS1aOwOr/3x+ZaQXdNX63UkRzO8SxXRBb0JQOHto++5bbGQ+qMVC+LDtrDKakn9GE49/pHpdxss+sO5hSRzFPRdef5jw9Mrsh5b5492ru2+LUr X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2045; 6:lj62rcSX+LC+WAt+ipNlOmrPvONCAbJfAAYFqMQCugfDKvRtoQO2jPqzfmvWFg18Zj1YTpGbwxO7A6YUwaEr3dXZX7Oh6dfChGu4Df+VLJPJEZ1pYMy9ke0Hp5BC9QSw5ETBegE4cpmm6hrlTyRxNGHuqpoifVgL65p+BDG6cJzGzBnUzLNo6mrevFuxD1BAklkHmDKw21uxWOy3kxmZDqn9ADgvk3us/SGyRWmpSPB1+/zEcyRmyBxw3Mkxos0i0EF3Dk/sGgYvl+BiuCOsD0LXtPb6kmGSed7rlxjDGEuPzbIzTjz2Mim94HgyM0fd7OHFt52inMvyd1x3NzQtlqEr9aV709sEXntKSl/efPHyMZvhUQ9XCLVSz6vN4IMfv8Z/F86wQfhQdNNQNoZh1yOCKIInNGiPSd5COQogypHPKiN28/BIziSk4qn+LmQv+SqqHPkvGt8SKTGzOGQxOg==; 5:KUuuqCCfN5XBw8hmsJtcIVhEgh4jbkXFuQHpDDlc942s3m1Pex1Ji+4AVg1Og5ivd0UVkTaBC63XJkAy83sBQnukL1Ml283iSGDAqnMfOYTw/7hyp5eCmpX2i6a8e3EoZ5dDH3SRnbcFrSp+JoHqcb3DMdXWvrO+WmANgColCxg=; 24:/u9pl70cayRlkuKJm13Qkooj298sET3AzAf7crh3p59w3J7vFYEFVKF/24G2lKEkq/x/veI/AhucOhgnt0X8T4qmvmu8iV0LYrp9m0N3lUk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2045; 7:ZCa03mnFPhQ3eFvGjb72Z1BxO6o6p0VDKHsVhE8XLC51Ge1ja5Z6GQ7Ds/1iVvIPvmtk0TVP27IXsUQUSPrFkrFKwhXXW71E2iLHUtJAor4/HX1GfuvWD++2UiIL1qzH6LUA+xUySUFgrfGta23TrIfloWrTS9d3fj/iu3jZr1FJ6Yk60l7f6CNQ2XyJdYPXHIGXQwVnXMcDtAx3tKZTeNJawtOhdkZK/tPnb+6Tn0Q9TJC4pb9+z1lv2bR4nWdy X-MS-Office365-Filtering-Correlation-Id: b3110f0f-280d-44d0-8efa-08d5ca7d0b75 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2018 00:41:14.1644 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b3110f0f-280d-44d0-8efa-08d5ca7d0b75 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2045 Subject: [dpdk-stable] [PATCH v2 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:41:17 -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