From patchwork Tue Nov 14 13:51:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kirill Tkhai X-Patchwork-Id: 837861 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="fqHpxFPw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ybppd2XpVz9s7C for ; Wed, 15 Nov 2017 00:52:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754494AbdKNNwF (ORCPT ); Tue, 14 Nov 2017 08:52:05 -0500 Received: from mail-eopbgr10111.outbound.protection.outlook.com ([40.107.1.111]:45078 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752526AbdKNNwD (ORCPT ); Tue, 14 Nov 2017 08:52:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=zPn8EHV4gPqLrBL8VR1LlHousRku+ySa5oxyXOivzjY=; b=fqHpxFPwWM4Qrl4+VAyinxmzliGjj5snudKjXp3koDlTCLxrW48s4hIF6F3CYowbH4DdSpC/KigLxlx0NpcrA8rfndisTDUp4CJzPuPhRdAz2MV0IZDvq/A/F9faKvdIU99MbFVH+KLrzLz2g0RBHEI2qXchGYiFn3+w6T8ueLg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Received: from localhost.localdomain (195.214.232.6) by DB6PR0801MB1336.eurprd08.prod.outlook.com (2603:10a6:4:b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 13:51:58 +0000 Subject: [PATCH] net: Protect iterations over net::fib_notifier_ops in fib_seq_sum() From: Kirill Tkhai To: jiri@mellanox.com, idosch@mellanox.com, vvs@virtuozzo.com, davem@davemloft.net, kernel@vger.kernel.org, netdev@vger.kernel.org, ktkhai@virtuozzo.com Date: Tue, 14 Nov 2017 16:51:56 +0300 Message-ID: <151066746546.14355.8649773749613206923.stgit@localhost.localdomain> User-Agent: StGit/0.18 MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: AM5PR0502CA0019.eurprd05.prod.outlook.com (2603:10a6:203:91::29) To DB6PR0801MB1336.eurprd08.prod.outlook.com (2603:10a6:4:b::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 22c69573-c459-4dc8-0cd6-08d52b66e010 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199); SRVR:DB6PR0801MB1336; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1336; 3:d0JNhV2EtZ/XU7Gn2n4QB34hanxSiExlM2nhpqxNX3rLDtAqYZynPKHL+9M5bMaPjmjOby9zAuiQBWHIGV3CXd8D8E3L58BHKzZnKYd/oJoNimQQab18IWeoiNLotC+opB7QgCPRO/5/SQw8CyuNc8ZWoifQn40YULbBjuMv0m1d83tJDHqQcfzdnCP1a0h/1JaK32hu3PQ5q446X9mqgOf698JOc93aFk/64D+gmlfDde9/gnRGPnsNe4GoeOgQ; 25:RpJ+8wZaJITRrOhbd5JOjt57o2Ma+rAvzAeX/JuMsFUnpF2icA+dZtCIM5HRsSVMqyDt/8gWN7V4bbafpSJuifFijv0jrJewRxSNJCUA4hfZI7UF2IKst1q0tdprRXCa3Jksbt6nECQbKN8PUM6UfmLnZsfhNCHEMkzc+VElEBWVUchSXY1aMmvqlYQeQOHv110vyZbGEZwmZ0tm6fJJSsZxzbyJuZXuRF3u0Sm9S0MydEm6/gIF3tG6e2KnuzXwscesjQwDc+OwhUZ9tZkLCf1YjOiva1xlU0PiW5bQUKUejTNed3FjIyqEZ/Nkf4IfbhIonMuLvjr2zYKTpm7C8A==; 31:L/rU6pl76XKhc6w6myjSeiEL7645fVep3Mm18JUVoX6Ev1pIuUtqF3pTaUimCodjbjBR59hv8th/y9yMUvKBsI1sKAxdkHdVrGXejMVa4upuC/gh0I1mKKCk8bake6RzoVl4175uz9EtSvD9go4B/Bb/2M54EKygo0rNyiMFktK4L53sLe5NL/80//ADjfrZyaSuPelKYz6cMI7AsgYyH1WbWg9g1B0RA6vKg1eCQkE= X-MS-TrafficTypeDiagnostic: DB6PR0801MB1336: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1336; 20:dMJ7ij2ZjnP3LX9o66Pq/p9Bnf8BXiIALA1xACHt6pPTXP+xdFYQDsRmMINEJKXU0WY7KUX+pKQWGrUGgz7aTX+XxUnOM4XEjxjbTuS12ZcloEbhxKkjf6Ea9UMpdzY86UjPQj44M+HPIdTtfGLQN27IgLEKlqybPzC0MKOZHRf6WX5l3DtKw3IYiETe5B6tLMptE+R4r622PmrF9PjJxjLFxH5VQUpre33hMWqAiYUQC3f5/NTvGPoZ8AAuNfw608OQpZ3faKQnHV143b5FM1aegfb2bAFVMIFbEL7ca6blMMAt4QcF7HEta7uWZFiMckT/tJP2UH5C67+ZCcum6OQ7c2jlOe+t0cTLZoQv2n39LlqT9ThruXOb56wLllR9qkdL5cdJNOH4XtN5Ibu2k2BA/rVLKvWYBp5eHPSJWSk=; 4:BvYZTuBrFg/QW97Tf+hy5Jirj/QPFxYcMKiiF0Imn1QLi/pC7TtWoXLAM4oXkAV5IfOxz7Iu6LhLsKz5Z/IwQOeTMEEfelr3DSEiFid9CIUgel591BTm/JQQUjV7JSWPH7QZcVnXSxv/VZZsmzVlv76qagNfrl8b5HxD+v4H798kTgxDEAqSgn5q8luuQlYCLPiumGdpYSUNq1gfzIOqz7rJELB5K1V1e0BIsWuhZURQ59SNKAHLXV+AAutQD69JI0TXaY5X1oqYGp1QGcoF9w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3231022)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6041248)(20161123564025)(20161123560025)(20161123558100)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0801MB1336; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0801MB1336; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(6069001)(39830400002)(376002)(346002)(189002)(199003)(81156014)(86362001)(305945005)(58126008)(81166006)(8936002)(8676002)(316002)(97736004)(16526018)(6506006)(5660300001)(68736007)(83506002)(53936002)(55016002)(9686003)(25786009)(478600001)(2906002)(7736002)(105586002)(106356001)(189998001)(6116002)(230700001)(66066001)(50986999)(101416001)(50466002)(61506002)(47776003)(54356999)(3846002)(23676003)(103116003)(33646002); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1336; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BDB6PR0801MB1336=3B23=3Aju?= =?utf-8?q?BGW/y7ra/v0JvkxdL0sAOkdt8dySKsQ8agaVb78qKNOxn+3AWqF6pDSf?= =?utf-8?q?WI4hkV3JM3SvhvwUVUe7sjJ2zJOrXGcXXa11gB707mqUk6RFXCibLqSs?= =?utf-8?q?ul7rWR5CXBWVGrCQpjvy//1lumk9yYycmnNLOvqFWdJlcV1b1Kvla9DS?= =?utf-8?q?mAbfuuHMHvZmK7DSmh88WiPpEecq3SbsKbG+0kpQh869MYRpelcbi61Z?= =?utf-8?q?Jq4GHsHSqwQ+K/XrfYo5mwsqm+DzcbRf2nRcoMVwBbKbC4qdeWh7MwYY?= =?utf-8?q?mggIy5m1XUcdrukUFlvZPq4vVo3205VieNTzl+Wat0h9hXG/q4Y8XC5n?= =?utf-8?q?TPXTXo5vrlPmJHpVELI8Kv6QsV8E2IELhaVqDx85hM52v2MtTAg5wZrN?= =?utf-8?q?apwHhUOVnjUAGxCRsukZb2W4M1glmSGiJsltErVWQ+SdPT6cnMFlzP+y?= =?utf-8?q?VHzLZZaMQzr/8Zvqlh8VoCQx5tNfXIaxbeoPGUm0EYOmwIjPoiSc2X7u?= =?utf-8?q?IW7D2zDUXTLGHaCIFvJCAZC+NHzIVOHrTqiinrUrv40FvmPT1dYieh3i?= =?utf-8?q?rKf0tMFHUf03ZIFYMIU8z1t5YFDTYtKJSCyhckRkMBN+m+iaCz26wj8U?= =?utf-8?q?cH2Roe1B9bcWO01/BcCHPhAAXpyyk1/Io/TP7uN9gFuIVrQw7+FoYlQx?= =?utf-8?q?sNEgKdwO/Z3Foa1VPb5W3I4Ji8C2yGHhvMtoQhyNZeccrPWjT3p2z+st?= =?utf-8?q?qFxLw0eBqvNCeIi0FpyfNMhfaq34u6/NynFh5sZ/at5s72Box3kQBK1H?= =?utf-8?q?A9ByVdVeIrNOGw543VaXVGzcQ301uW9vmI1adbQykDSvGAFh0e8uppxI?= =?utf-8?q?muy1k7BY7PLRMJ485iSx6+ygZ3sIZCK6NsWV8jNyK1iTefHsFW8ikO14?= =?utf-8?q?G6ZWT9OHCBNjih/JoNps4rl9TqnWMDXS63EREzYVIewLM2Wd0ycKufWm?= =?utf-8?q?WAtNgE8A2vOKZzU/ohvR5SZqnyXMi+XqZ8d3Aa3OyxoXNFnCEGBdynCw?= =?utf-8?q?p4qXBD8jKz0viCeVNSgzov1qVY2l/gavYCNA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1336; 6:sxH0OzREsiHb+CZNGb8GHNMpvJdRUwPCSFHY90F19v9+GO0Ch5s7B7sdrrRtpxOQkN1XQ+K7pv4ITAbHyEIujb8rjGyvbij8awBtT0cE7HHZU6q0kQTXCYkTOy59xr8KlvTKX9neVpY4GmsOz9laCQQEW9NigeroUc/akaMg3hc5He5Djp2uPrYNJToPELeJlAlutWDrkVXpEpwCHNLlI2EST5ZjDjnLMjO2eanEeRbaJ4ljObu+jWLNSygbiSH9OUKKyS9UfzSKyzC4DDhrjqbPHa5+nNPAPig5+x4l0dpHJNkfokgwj64BdtuYWzb/2GKHkeA8YfyidXOf+NWXqd0DRcPTkddsDm4SnY8YFwg=; 5:zgy3iC5Jq/UTir59QsqGCiL8fskybKBPyYbJPifEBu+UWFyIIXSPB2LHQbPJ9nvLkaf3O7Z/V+VrkUdbXlLYcPgOLepN+wy6p3hBiDkHOndXv+TSxeBFLE5Fkv0w0mChMUVTRQVbDQP/FKO0hLfzVf/dvMn+HUSqpziMhfFgTT8=; 24:YTLxwoZITZZPpxd7CM91rDZiFEot8ABKSsVUt9bUmj3FCGv41Nk17jHSaAlO3jIvh7itRo48rNWZNgYTJSjxDttoxdg+o/luy9icADvPn+c=; 7:2a+pSDoP59qn03Atx8B8hAzrD21Ip9Y+AVIn0CB4EngMUSoXGooeDHwrQEfOahK8nVNG7jljkjtqcL78xZ8XAKC90voATiAwRv5Yl8OC4df2Jr/+9LzomC6T555n5IARS9xxiJCPawbFCpu0jSQT4Kd7llMP5TBen0iKUcl/4RTwJVD60zjv8gTYs2JAAyFkaUOtp+VoH+orgx8qU/vIo6lOfDxeeDsJ46TwkNZlMNFWjudvYBIZmheJP6NB/r1P SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1336; 20:/iPq40YQ4U9b0ockz19oz0K8UlaT6mSOowWqhUhnN9VICQUQZ86+vZduHAgGSFsV01dhTeJ8ugg54H1O3K6jZCZGCCF2MwqaebBVSpMvMh7IJvqwJeWdmBMsI4p1gqL0yo7Ko4GjzppYT+dvVq7wzECg13AzW4UraE20AFnO6Fs= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 13:51:58.2349 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 22c69573-c459-4dc8-0cd6-08d52b66e010 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1336 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There is at least unlocked deletion of net->ipv4.fib_notifier_ops from net::fib_notifier_ops: ip_fib_net_exit() rtnl_unlock() fib4_notifier_exit() fib_notifier_ops_unregister(net->ipv4.notifier_ops) list_del_rcu(&ops->list) So fib_seq_sum() can't use rtnl_lock() only for protection. The possible solution could be to use rtnl_lock() in fib_notifier_ops_unregister(), but this adds a possible delay during net namespace creation, so we better use rcu_read_lock() till someone really needs the mutex (if that happens). Signed-off-by: Kirill Tkhai --- net/core/fib_notifier.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/core/fib_notifier.c b/net/core/fib_notifier.c index 4fc202dbdfb6..fd5c613aea56 100644 --- a/net/core/fib_notifier.c +++ b/net/core/fib_notifier.c @@ -34,12 +34,14 @@ static unsigned int fib_seq_sum(void) rtnl_lock(); for_each_net(net) { - list_for_each_entry(ops, &net->fib_notifier_ops, list) { + rcu_read_lock(); + list_for_each_entry_rcu(ops, &net->fib_notifier_ops, list) { if (!try_module_get(ops->owner)) continue; fib_seq += ops->fib_seq_read(net); module_put(ops->owner); } + rcu_read_unlock(); } rtnl_unlock();