From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50043.outbound.protection.outlook.com [40.107.5.43]) by dpdk.org (Postfix) with ESMTP id 68E411B66F for ; Tue, 30 Jan 2018 17:00:49 +0100 (CET) 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; bh=JfgsYfR64xUnzymZ1h6EEg15T7fmbQ3cbdX8YVn32AU=; b=btaMuH0aKt6BvB6RAYJcTAA+/iygDTJwq3nlNjvemXEnSoRZro3okcIlkBg9zkRZiBR5qwMZQus93nK+Ftm54wQfTAtyDVLtZKEDBMyjqRASo29Ra5bkY1uy3/KITw2VjhpVFxD0yKi0r2MVcItFRch4HzOEni1JYm1KZEgeA0g= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; Received: from mellanox.com (37.142.13.130) by HE1PR0502MB3881.eurprd05.prod.outlook.com (2603:10a6:7:87::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Tue, 30 Jan 2018 16:00:46 +0000 From: Ophir Munk To: dev@dpdk.org, Pascal Mazon Cc: Thomas Monjalon , Olga Shern , Ophir Munk Date: Tue, 30 Jan 2018 16:00:29 +0000 Message-Id: <1517328029-17052-3-git-send-email-ophirmu@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1517328029-17052-1-git-send-email-ophirmu@mellanox.com> References: <1517224703-20708-1-git-send-email-ophirmu@mellanox.com> <1517328029-17052-1-git-send-email-ophirmu@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: DB3PR0202CA0009.eurprd02.prod.outlook.com (2603:10a6:8:1::22) To HE1PR0502MB3881.eurprd05.prod.outlook.com (2603:10a6:7:87::24) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 0def2524-3c31-4360-8455-08d567faa0d2 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:HE1PR0502MB3881; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0502MB3881; 3:+W9vUt92Lx9wx58AY4MVLbtRdhDivmh3wQXZTUO85p/XxdLBB3zm7tTfZjbtpQypx+UP5Pvuh3IG+VLtYQcL2LAdvufMZeNi3Wh7uxm+p3IdTJOoTXCsZomw4SkdKVZFrgCAjm5/UNhiWFVRMRB5VdY0ZlMAXAIF0/NXv+2TY0TUfrXuVevJWtad7SdLuGG3N32xuEskMF2gxFSdCp/rC4woRkSw9TDbDg38LOLCTS5MSCw2JiGaSMiKfPEhIvuy; 25:0g+AZasNd+lby0RaYWFZcHpLr4YGlZm42ZLSH8FDhfH9wnl5+KEM8NeXlV5hUKJQv+hwukhdI61Z57chc3fb0s3ENMNSn1hE8t9n9qV76L7rSahOfhglel6eBRcEvGXjAhfBI30YKPWgn5G9jY2PpHsQ8GB5B5hDfufgYYgldobcHkSd7SdAEpzpKziWU9sxvDmEM3UsBSPOcyAbDAFb+UT3XcOENlPGJPChTD65K13L/cj8+eikIrSrboz6kTURCtmHmPj7HlBXO+MBbbfsZHYp1CQwg3cptsGEeuXHTXnQiNpDCyaRJyYvizL75+k0Ka/WKoYlFAHLp4JcMRztBA==; 31:Y09h6vYWwnleGrvMH4Uk/xt1FeIwQts/SfAxizQPGWKskQDB4LIziIqDJY8TVUtzNWJp6BW2/Oqc+sGQINnbHfjf+Hn+TS8TsCsEw17nBFNUqTHDM4yx4txFl9GOFR00P2N3FLDduEKwTzY+8GjBH+q5p+Kuro0CkJFodS9XQC2hBWlII+1WuTaS0z8y2vQ/rGFN0+D5WTdQ7DmhURL4vm8gszq3TDnjMpZ8uL0Pp1E= X-MS-TrafficTypeDiagnostic: HE1PR0502MB3881: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; HE1PR0502MB3881; 20:GBRbeen2phVa2UQnJKfr2KcwQOoTIKL61Aa3mS0k/WiVpS/8MrSS8TODXRItI97hpDQR9jSY9S2BXFvOHp/fzW2/qsXAEqdASM79ySWsR1WvNI0MlVYl4hcA7e+aa2Sa8U18jbiS+VytvizuesY/+MUwKUclKFJwbeX5+AAI4ozD853r6L2CdLf1+rj4VaKxq1aEMdtpDu44ABpHFFH9zTP6h7zFXGfHESlHEmlCiaRjmUBhYLO6uoauJ+9FuWoUaW3KgV4sNAB954lU4yz5xm7oTrSzuNmjOm4hu/fKV/xhVcl2DAjqEkxTcVFOGB0ayX3bJ93znfShp1vbY/C4aZF4ocr9Lcn2t5oXK35rRkOSEt6ndVeRNwhBNWlt1AbHrCh6Im2NsSSMvz8NyZLJkd1LMqgFaM026/cg+u/FTyopSLBYbRGHZgICCHG5awZIUfrnXWvByGrmzkEVSFZLBEclkxxJKO+btNlsLM0h2gQfj2jq4Ag0blMv8Vbwa8bb; 4:GL/KvpZOCZQAjL6qoqaStxBIms86p5ydRKNw3PcWNT6CW5M3zvXGXBL4AKkBIuLSUp+8shyKXvfBWaB3cbV/8cXz+76pJ4cAs3DvmO7XVtxKZ9Y3CkvWTDexP+aaFhh/HImkgJMa0ICp6U4LxC65eiheyyfqbRC/DSY4N5+Y4qTKjsaa6gYHmJ8zAKC/FJhcjJvsIpiNPwTLZy/fRttl4d6Sdwp1AIzgns8L/Tf28VlUj66hUTrVEENEF9qqAcZeRLWwITzhkChqaHYnWoPIeA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231101)(944501161)(3002001)(10201501046)(6055026)(6041288)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123558120)(6072148)(201708071742011); SRVR:HE1PR0502MB3881; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0502MB3881; X-Forefront-PRVS: 0568F32D91 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(39380400002)(396003)(366004)(346002)(39860400002)(189003)(199004)(7696005)(86362001)(76176011)(16526019)(48376002)(186003)(59450400001)(107886003)(16586007)(52116002)(54906003)(316002)(33026002)(386003)(68736007)(51416003)(50466002)(47776003)(478600001)(66066001)(26005)(6666003)(55016002)(97736004)(105586002)(36756003)(5660300001)(25786009)(2950100002)(6916009)(4326008)(21086003)(4720700003)(7736002)(106356001)(50226002)(53936002)(6116002)(69596002)(3846002)(305945005)(8936002)(8676002)(2906002)(81156014)(81166006); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0502MB3881; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0502MB3881; 23:SjMqlyCg85JU7OMPuwLALYlxoTy2YOCtIjqydhD?= =?us-ascii?Q?9E2go8XwTFc+cHAjpmBwnpLJKc/NK5k8nrx5Pb4H0/vEmKRT60KpUYkSTPRw?= =?us-ascii?Q?32HQMquPvRY9iVzNUueo+W0bskw2IVvMHKgl90fowbnSSq+YyelPRepZZVxv?= =?us-ascii?Q?rHqTyD8UZynR1ouMfTf33OuqV+gZr70qk32ghGpiYmwLRj0oqm2RpwoW4O8M?= =?us-ascii?Q?qJf26YcwUmFN3jK6NLAp/wEWzUj4lkf2EqpVFbRfvR8GGHyc29kwoDKuzFjH?= =?us-ascii?Q?51HDsn9cLHh4MWQVo2rA6FrZQf5QSVcFVNKOjK5aiH4IWsIsCY20fiKFVcG1?= =?us-ascii?Q?QKxMukPyLaJjN/f8KAiXsfjnZs1tADMmztjJ/jsRh/LjU/AKVXwL6irc1iWj?= =?us-ascii?Q?6R3WTuo4WRCpf7iLscKtTiEwFUkJMHPewH/Ved9YeW15ElIyWZV+IjzgZx3J?= =?us-ascii?Q?GpJa9+2aDvYTy1wnWZ+ysjDbjHemrRX49ceO3+COoPeu47Ag8QZgW3ilYqQi?= =?us-ascii?Q?/4DdiDo8Wg3Zhq7ULIm75fhHkgejd08gwlF2RLCcTufKrALDCRXmKpTPtj91?= =?us-ascii?Q?ujvAc1IyAyVfd9GJmN5I8pK0Amf1Kf5tyfNfUsVc128TfxmtyjeNHEE5aiZH?= =?us-ascii?Q?Zwaq9BMvgCwtnTIyRHM6VYzw5n7+09tXkJYd7m5a5gM+rAxPJ3zjWbMydDPT?= =?us-ascii?Q?Zz77wL9LbvbpXp1tkQChT7N7GpVcGiq5IiIM8Xg7y7VI/XyH3mDnTkuKbgoL?= =?us-ascii?Q?v3ZcNuuufl0Hmu5u8K+fCcSVTIXELtbw1XqLvCMGzsWdxmCZySvynDKJemP7?= =?us-ascii?Q?b3hjMo+PSYq8qkQwJKPW4REFv8hs7mPDh4PY+pL61qFG3KJlBcEA/PPOihEX?= =?us-ascii?Q?/bqgWP6yWDfSEaiEkCfA+99u8PGSVZb0fDVuUZ1hGkoJDcxE4iEXKHaLr5XB?= =?us-ascii?Q?5vdoVLGeCPvIKQpZz9nVdh7qGmUj4k/5pCB+si9qewSAbVpAMnLdWqgLvluK?= =?us-ascii?Q?yBdjncycsGYa3DuGJhBhy/tg5yoFU1fpKkVixRIOD9YXaRu5O2hSnqfdKoBG?= =?us-ascii?Q?778xRdEioDB2bzjCc387IZ3kcJyx0xOR/1ET10V9bm/z7A/nnzdIU8KQGwDO?= =?us-ascii?Q?RAhzQjSuJuBx5RfWrzEm/XMgcA4XxYcyOMXLhl8U4bD5Hx0puC01bLn0+8lH?= =?us-ascii?Q?WMwTh7Z5xpQTcYNTFWit0wtgzZ9r7M62gsLzTYsDTNlKQVfPu5lrwpeUt2wP?= =?us-ascii?Q?/pp6TC8Z9I9wEohqJICI=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0502MB3881; 6:Q6XFvoeH4iplMD37xomLR+tOQHe74BCQjEhSctkPuS46qr6bY01iJa743K2rTafB9dmMXs/VW0EMrGJUgNnLPuojkPTUdHV7rv854eK1u/+iXwaCzpQcF6RKCHrkyrP4w6TyN0wNuBIYEDyUObNcZ44yxWaeSXuDMuaKN1yXUTxcK3lFu6jYyOCOS5JhFfZWHO2eRi04rVgp8O3tbAZBPcCqSHThX7Hh/HW9l0IzhJ+3f7aVf8GTML7OHRfJX7PvFOqeMw70K0WY7xpU1S2nE/kRAv548YJ/AMCFyPk6yvjtiH3hWd7kNca5iexwwr6A2Z49wGW9u3VsKuAaue0mE/snV2WYWq3F5T/5qjQYOV4=; 5:ASiIOG7S30bjwM6zsv1UoNMX3n9p2PVbq113vz30QGSkadD0sp3ByshagziCMRr5Zb/dtlvnTVRttwCfM6fKWw/3N2KruwGSuuveCr6O3AhNSVEPgEf/tKxdTdrrGOp7Kgf4GAIyJ9H5JpgPGU5P4Mxcf0CQfNEpYVH0btQu5fM=; 24:KEeSIgkl1nqj98Cj+I5tehPsWZvwGIi5xEj9i9o2DDh0aAp99iJ43BM7yBxY+0sLOltuj0eoi84AOcxbZq/hAhkYHpixyKgdiFzoPTy29JE=; 7:7Btc3yO7FQ2Bknk2Gy7XtOooAiIPb+CtOu9pS21crXxzN+fZtpkuU4v0tmsoqQO8w8WypUiZXfre3wtiZWeKzHdWmi4IwgG9JkG6nGRTNqNYxnae0bldJWmkxMrwJ2u2PGUk46bkeHKUZQ2EuAyTIP8C1Vt6DoEH83K3mFm1GCQL5vrnBSVoEnoDYw5P2+o24awhCD7LxoT0s1AVc86ggOUjrIAcxHuzpjPgXqRinJPBQeccgYCoNA5OJCqm52Mo SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2018 16:00:46.8866 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0def2524-3c31-4360-8455-08d567faa0d2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0502MB3881 Subject: [dpdk-dev] [PATCH v2 2/2] net/tap: fix eBPF RSS map key handling X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jan 2018 16:00:49 -0000 This commit addresses a case of RSS and non RSS flows mixture. In the corrupted code, if a non-RSS flow is destroyed, it has an eBPF map index 0 (initialized upon flow creation). This might unintentionally remove RSS entry 0 from eBPF map. To fix this issue, add an offset to the real index during a KEY_CMD_GET operation, and subtract this offset during a KEY_CMD_RELEASE operation, in order to restore the real index. Thus, if a non RSS flow is falsely trying to release map entry 0 - The offset subtraction will calculate the real map index as an out-of-range value, and the release operation will be silently ignored. Fixes: 036d721a8229 ("net/tap: implement RSS using eBPF") Signed-off-by: Ophir Munk --- drivers/net/tap/tap_flow.c | 47 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index 533879d..18cfb91 100644 --- a/drivers/net/tap/tap_flow.c +++ b/drivers/net/tap/tap_flow.c @@ -1797,6 +1797,7 @@ tap_flow_implicit_flush(struct pmd_internals *pmd, struct rte_flow_error *error) } #define MAX_RSS_KEYS 256 +#define KEY_IDX_OFFSET (3 * MAX_RSS_KEYS) #define SEC_NAME_CLS_Q "cls_q" const char *sec_name[SEC_MAX] = { @@ -1953,38 +1954,62 @@ static int rss_enable(struct pmd_internals *pmd, static int bpf_rss_key(enum bpf_rss_key_e cmd, __u32 *key_idx) { __u32 i; - int err = -1; + int err = 0; static __u32 num_used_keys; static __u32 rss_keys[MAX_RSS_KEYS] = {KEY_STAT_UNSPEC}; static __u32 rss_keys_initialized; switch (cmd) { case KEY_CMD_GET: - if (!rss_keys_initialized) + if (!rss_keys_initialized) { + err = -1; break; + } - if (num_used_keys == RTE_DIM(rss_keys)) + if (num_used_keys == RTE_DIM(rss_keys)) { + err = -1; break; + } *key_idx = num_used_keys % RTE_DIM(rss_keys); while (rss_keys[*key_idx] == KEY_STAT_USED) *key_idx = (*key_idx + 1) % RTE_DIM(rss_keys); rss_keys[*key_idx] = KEY_STAT_USED; + + /* + * Add an offset to key_idx in order to handle a case of + * RSS and non RSS flows mixture. + * If a non RSS flow is destroyed it has an eBPF map + * index 0 (initialized on flow creation) and might + * unintentionally remove RSS entry 0 from eBPF map. + * To avoid this issue, add an offset to the real index + * during a KEY_CMD_GET operation and subtract this offset + * during a KEY_CMD_RELEASE operation in order to restore + * the real index. + */ + *key_idx += KEY_IDX_OFFSET; num_used_keys++; - err = 0; break; case KEY_CMD_RELEASE: - if (!rss_keys_initialized) { - err = 0; + if (!rss_keys_initialized) + break; + + /* + * Subtract offest to restore real key index + * If a non RSS flow is falsely trying to release map + * entry 0 - the offset subtraction will calculate the real + * map index as an out-of-range value and the release operation + * will be silently ignored. + */ + __u32 key = *key_idx - KEY_IDX_OFFSET; + if (key >= RTE_DIM(rss_keys)) break; - } - if (rss_keys[*key_idx] == KEY_STAT_USED) { - rss_keys[*key_idx] = KEY_STAT_AVAILABLE; + if (rss_keys[key] == KEY_STAT_USED) { + rss_keys[key] = KEY_STAT_AVAILABLE; num_used_keys--; - err = 0; } break; @@ -1994,7 +2019,6 @@ static int bpf_rss_key(enum bpf_rss_key_e cmd, __u32 *key_idx) rss_keys_initialized = 1; num_used_keys = 0; - err = 0; break; case KEY_CMD_DEINIT: @@ -2003,7 +2027,6 @@ static int bpf_rss_key(enum bpf_rss_key_e cmd, __u32 *key_idx) rss_keys_initialized = 0; num_used_keys = 0; - err = 0; break; default: -- 2.7.4