From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757933AbdKOMhF (ORCPT ); Wed, 15 Nov 2017 07:37:05 -0500 Received: from mail-eopbgr50137.outbound.protection.outlook.com ([40.107.5.137]:23392 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932396AbdKOMgq (ORCPT ); Wed, 15 Nov 2017 07:36:46 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Subject: Re: [PATCH] net: Convert net_mutex into rw_semaphore and down read it on net->init/->exit From: Kirill Tkhai To: "Eric W. Biederman" Cc: Cong Wang , David Miller , vyasevic@redhat.com, kstewart@linuxfoundation.org, pombredanne@nexb.com, Vladislav Yasevich , mark.rutland@arm.com, Greg KH , Alexey Dobriyan , Florian Westphal , Nicolas Dichtel , roman.kapl@sysgo.com, Paul Moore , David Ahern , Daniel Borkmann , lucien xin , Matthias Schiffer , rshearma@brocade.com, LKML , Linux Kernel Network Developers , avagin@virtuozzo.com, gorcunov@virtuozzo.com References: <151066759055.14465.9783879083192000862.stgit@localhost.localdomain> <88152c11-a5b5-90f8-be46-99ed6c722064@virtuozzo.com> <87shdg8bzd.fsf@xmission.com> <8c808278-1925-37c0-619c-87bd1802790a@virtuozzo.com> Message-ID: <06b1d740-d443-ac23-a7b0-675e7b6ff6f9@virtuozzo.com> Date: Wed, 15 Nov 2017 15:36:34 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <8c808278-1925-37c0-619c-87bd1802790a@virtuozzo.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0046.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:55::32) To HE1PR0801MB1338.eurprd08.prod.outlook.com (2603:10a6:3:39::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f163fad2-2060-4aaa-a46b-08d52c258607 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:HE1PR0801MB1338; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;3:v9NPcptSlIqSY/TuwucWP8aV0duwRW93etnk5XB9xNknenAQTkBjeW8JEvq6mei68/47G6Fg8HWpyU9HJ+KfvOQpiyDjEGmHrZ+66jRyxwd35+K6eU8do6oCpB4yYQ3dJLEK8p8ugNrc0o4rjfvweq7nWKVvLiADtjc1FRQE0WPqEIIHKRrOAZygWHvCXuv9OUrF/HckTULM8/YP7lY/QL5brEjQo6uJbHdmReaCOW9ciL/IKR3XqdEta+oAUolO;25:XHtNzRBsGxklCXwP63vV3lfTHFDwldnZUUVSILBwn1e1gq5egxVwYrW5gjBmPWJw5PH4/kcq7IuJFKUIm3dN9RZhxrnli2JXYLAlVRlTtb2E1n3ruPf50c138w6rnz4xxCYdmNQ71Wra5y5FwIQv5SKYEQ57HQzG/InI/iLExD3I/Os8g6DmNV+2U9QA1hQfuiwYSRJRnzFo/fKE+0AfJGLY8sFmMqIlCDEn0Zek3J4l0iN2DZTUF/CGFvZpf9eRldV3Fo1jX6I8MMWbz63eNRIh0cTa2U1c35NRaz7uJIbSkEy6HER4WBg21ZI/WXWA/P2AzMFGWUNDuvhIYwyHiV16dXMNUvZZ2Nx4d04VvZU=;31:pDihZfGs6GntzSOaKHI2AKqb3zMuIssYRdU1sqDmxCOz8HgmqZ2aFy7Uflkj/LCYA+WzNAQmEGepyGPpPlZR+d9eLfE/VW6PP/TtkS1YZFPYXG2/cObrPQCk5sSaa+yC3HhhCbWv4bC9P1J8Ty+s4uZsYQy6CZoLuQnc7Nci6ba+0iRnJnCRtOmo71IizA5b45ymwy9UIWOWn2LYB7b0FEhzlHxlVWJsJ99a2Wznt+M= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1338: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;20:920Zu9Y3oefZP9RlvhCFkHpdV/jW4L2BUx3pjgQOLlrhn+/SFW32SOQFQWJONc1RxAHtkOTq88SulThJKl7vKDeG3IpXttSQ12w16IflWPNpCj9aYY8hUQeplOjYF/cANZXe0cdHtSfgY8VYP0KVwLsqsvaaBVkHemANWd5OPWgtPCeFm5jPNEJUuAkUEcfxEYP8v1ukHCXLb3O2rb05bOFlPpUXc5sNwXAdSijInX3pgZF0uLqqEtQ0OecPyICd6uao5IxRYmhaVhwUzjBwZ3pXjwpb/otSFXY9tA7n3ehLT7KCusQAL0bF+jey3LzLOds58GqnAb0CpS7F57xIcFHcXz/b30rpAoKzPIk4uw8EqLpntCx4ey44uxS5Hd1gr8VjKgBL8V3c1HypfFvGkxjT5dcEqhmFzNfT4honEzk=;4:hElwnBqDr47zTq80k6tmRw2VYTqdG5nKLrduH9jf7T+j1Bl+WhsmBEnZtcmGVp84sKwbbo/NB9bowr514gLkCsxZmxP4x54j0OJzUybuW0eYIEPUiDD42lGzs24tOQVYypGDOEAoH3pFTDYZ81Hr5pOhiQx2bv6Gyjq/hbAsgrsuzLIWRUwLtlZutHara+rguaDBZoY29FVc1Oda1Mxk1hcfg5CMFSiagW149h9YTAez5D6j0u0JIfh9K083uCXDyNQjyGzT6QA/Y21pXcvwkw== 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)(5005006)(8121501046)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(3231022)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(20161123564025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0801MB1338;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0801MB1338; X-Forefront-PRVS: 0492FD61DD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(6009001)(346002)(376002)(199003)(189002)(24454002)(316002)(25786009)(16576012)(68736007)(58126008)(93886005)(65806001)(65956001)(66066001)(7736002)(8676002)(54906003)(2906002)(64126003)(81166006)(305945005)(33646002)(81156014)(53936002)(16526018)(6666003)(31686004)(2950100002)(6916009)(6116002)(3846002)(5660300001)(7416002)(65826007)(6246003)(53546010)(106356001)(189998001)(54356999)(76176999)(50986999)(105586002)(107886003)(50466002)(4326008)(39060400002)(86362001)(77096006)(6486002)(31696002)(47776003)(23676003)(83506002)(8936002)(97736004)(230700001)(101416001)(36756003)(229853002)(478600001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1338;H:[172.16.25.196];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjEzMzg7MjM6Ry9iSW1IaDVBR2RFTG02VFVUM1NEZGN4?= =?utf-8?B?TFEzQVMveEZTNGRmTjJWRUFoKzd5VkhiSVZPNzc4bTV2ZnNndjR1clRnU2V1?= =?utf-8?B?QWM0YUpyZGZuN1hiOEFsckNlaFNIWlpmNWtraXpoSzdXak5STkdEVHJiN1kv?= =?utf-8?B?VUVSaXRub1RhMk1FWnR0ejNiQVJLc1krc3FIQW9Sd0doNXF0U3RnT2orUU5S?= =?utf-8?B?cWhNVGJKcldSdlVSWnF4aDFscXRvMXNxQTZCemZpZjNadWFjQm5UaEZ5WlNk?= =?utf-8?B?Si90RktUVGZCUXFvcmFoL2dSdGNkUTQxZE9nNURTM2QwalAxRjNMbXNKVHBw?= =?utf-8?B?NVNJVzFGZXJFWWVtNEdvVTlpcVUrZUU4bWtINjljTGpFams2SGF6bmlORU5n?= =?utf-8?B?VFJIMlpxSXpvaGpob3VIcEkzb3lmV3N6QkcxYms5OUU3TFBSNVI1bW93aG1P?= =?utf-8?B?RnEyZFNKNWxQaUtvVXduTU5TTGhnUUtMZWxVREF4ZUpQSi96dzdnVUMvMmdy?= =?utf-8?B?cmR3RGNUZmhyK1Z0UFJneFVvR2U2ZXF0TmdweVJCT0NKV0RUU3pBUzdJSmV2?= =?utf-8?B?aFJMTTNjNnI1a0h6NXpEQmxYNFgvVjZ1Ri9xWWpRd3RDSVlsb2NUcXBlMGNZ?= =?utf-8?B?WWxHUFJkUldJUTlzYVVJU3ZqTStxWnZiQkNMbW51RUdETFdsUFBVVkk3bmxl?= =?utf-8?B?U2lBQ0pWSWgrTzcwYVJDMnpLT3p0WVcwZ3J0cjI3c0UydXd1Qm1IUjZDTHVR?= =?utf-8?B?UDkvSEZ0K2IvOXI5cXFRMnRLcGloY1dTODluYWZ5VHR4bW5YcXVnUVdlc2gw?= =?utf-8?B?TG96TEdRY0prdERORmpLYUJ3c2p5Z05ZU094R0Q3U0xPYjY2T3NIcFJpWXdn?= =?utf-8?B?Ym1DYXBTcjJyaEM4amFPL1lzcVAxeHJwK2ZBMm1qeXB6NjBXNkFTdjBiZExH?= =?utf-8?B?bEJDUTIzb0RBWUFDQ0kzYUdxaURORVIrcHlKR2ZTakhsSkIrSHJ2aTV1RERt?= =?utf-8?B?bytCQjltZisza2RZbjUrem11eVZKV3ByRTI1b1RObmwzaW9RS2hLYVdxTytl?= =?utf-8?B?NWpWWlBVSGhYZFluTUZmZEZNa1NyTE5FdFF2elJMdmZDVG5NM2N1TnFUVWx3?= =?utf-8?B?NEZPQktDOFZTNGM5WkZCK0V3Zmxnalp2WW9zRmVLbUc4TnhTNWphNWRrbHZV?= =?utf-8?B?WHQ3UnJPOXNmY0kzNEtteG0rclg5RUhYWnBlaU9qR1JBWHQyTkhzRkM0SGhz?= =?utf-8?B?ckt6VzJndU40cVF1M2pBVndlSERpVjBrQW9mSHlhMjZ5TVJyNm5sOTVxK29W?= =?utf-8?B?ODQvZ25YeU80b1lUMUpoNmF6YnlBTEU3cVBYbmlYeHJtbHA4RUZJTEVBTTZn?= =?utf-8?B?d3czQ3htU0JSUVp1cklZSWFnLzIycWQ3Zzk2bGxTQ1FObENaWG1MeEFBTWxk?= =?utf-8?B?NEpsZE1EL3dXRnJkZ0tFYUg0dUwrTzlrWC9xR0pEaFNwVW5mdGQ2TWNiU3NJ?= =?utf-8?B?Tm1WamJpblhDRVRJZ3RRMytRNTJML0h1aVozTXdzZXFvOHhrbk9NSFlTdmpT?= =?utf-8?B?THdoR2xVRHRUdnE1RU5XZFRQY0dSYVlSNUlZcGExekxyZCtZYlUrSHRDWDRl?= =?utf-8?B?UTZSZkpiSTVwSkpWUXdKYmg2eWFjbHZvY3NlQlhlc2pxMjdvVTUyU2FXRUJB?= =?utf-8?B?UytyVmZ4cW5kSzgzaFZKM2FHTFlmakF4Z1JiRTgvTnBWRWU0TDVlazNPYWN6?= =?utf-8?B?dUlxREpCYkNqdHlwWVVGK1p1dFM0WHIzdFNlUEtOK0ZSZVJsTmhmTWxFMkcy?= =?utf-8?B?Qk1Rb0hTZDJIZ0pUS1hhcDBkYU1YaVhEbmRZUnRucFo5UGtudkE1aW1hMTlt?= =?utf-8?B?ZnNsMWd2WUt2Z25nNFY5NzdLR2dSNUJOaGF6ckZKa1BMQndBeUhLWXZtYTZL?= =?utf-8?B?V055UVFKaSttdUE9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;6:L/4NwQn7TrJ+PvERXAUWRrJqFmO8vdJNWKb/LGPW53Qhj/mW82IdGOZFJCxOqCrIR5vM6j0sB7n5be9tnoJeT1N3faGsFhuDJnECdBGcDhB7jBHH9i25cqGqXRjhyAJbQyiHTJg3WBs6FbAYzSm18frCZ9WhlJjhYdHTdyW6UGBXs6CxZ6xroMeg6b+SrB2RYymXS5GGAiDQJig5vD0oCUbOAhBMe80DIF1zSHnC5kIrzHVnr91uBeTmgIBl54EGYtbAtlootZP04c4HUb2v3ryAIHMovddQhL1rsxay5E7B+KOcJNjNa+Li+V8cw6m/CCtZ1V/mb6ZdUrLHqTooB0R80taMJ/z8D2niOrrkfVo=;5:lbeyuLiEWSlpZW7R24AnU51jaVcEPlCVLehgzi150+eVWT0apokBqYeDCevVdNJNNO/5wMzWXNQPx3lKle5yMUPfdTCMYeldNHSZusbo/PIIXvXAjo2T+poW4X92Mm0s1/RLPtMMjQUagXtPIPtnPlKaMyUw1WakWSQ2C5TuDPA=;24:FpYJ1ic1uf1rpvOPSqM1zYPgoJIAd/v6mBiBXY+lh7sgS+7fgzlHjZjtMkSoyfLzTqLyP7u5TrCOLRsSJ5iakVL6e2dXKTuFb0qg4YvSs/M=;7:8xmHAMCNaU9JWPhs9aYMoZVdYVkREUnJu0X4FeoFqpVasAKmGMHSPj9+8cLBU85hYj4YYomzQZRgXvtTI2vKyWJb5sTOImIcI9KFs6hntTzOvRzpM4iq2oH4E8FAI7flJna0GWIw2pq9fJ+2fPHzsbMGOeYYbcNs+AHvBydVieADDFnyhyzCQ7Ev4LpdjZJ3PWntfShAqzpTxKSQa37GYg/VxTXKG6Wsl49O50f8FKfgtI+Cei4cqEflwj9lAAru SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;20:+wCYLNrwQYWcOOcCMvNXfhOK4+OrW3yvDEwp+isKX2wSGB5sdTqZB4UUQgqNvTsRanZlsbpmwvF5Tfc3pVq9yJR2ZcC3f16Z3v+w8enMxlVROOd4piiom3gWMOYvLMHutTBIoTJdt92IvSvkp9hfsdHeoZkkgV1C0WCfm4DpzJY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2017 12:36:38.7633 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f163fad2-2060-4aaa-a46b-08d52c258607 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1338 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 15.11.2017 12:51, Kirill Tkhai wrote: > On 15.11.2017 06:19, Eric W. Biederman wrote: >> Kirill Tkhai writes: >> >>> On 14.11.2017 21:39, Cong Wang wrote: >>>> On Tue, Nov 14, 2017 at 5:53 AM, Kirill Tkhai wrote: >>>>> @@ -406,7 +406,7 @@ struct net *copy_net_ns(unsigned long flags, >>>>> >>>>> get_user_ns(user_ns); >>>>> >>>>> - rv = mutex_lock_killable(&net_mutex); >>>>> + rv = down_read_killable(&net_sem); >>>>> if (rv < 0) { >>>>> net_free(net); >>>>> dec_net_namespaces(ucounts); >>>>> @@ -421,7 +421,7 @@ struct net *copy_net_ns(unsigned long flags, >>>>> list_add_tail_rcu(&net->list, &net_namespace_list); >>>>> rtnl_unlock(); >>>>> } >>>>> - mutex_unlock(&net_mutex); >>>>> + up_read(&net_sem); >>>>> if (rv < 0) { >>>>> dec_net_namespaces(ucounts); >>>>> put_user_ns(user_ns); >>>>> @@ -446,7 +446,7 @@ static void cleanup_net(struct work_struct *work) >>>>> list_replace_init(&cleanup_list, &net_kill_list); >>>>> spin_unlock_irq(&cleanup_list_lock); >>>>> >>>>> - mutex_lock(&net_mutex); >>>>> + down_read(&net_sem); >>>>> >>>>> /* Don't let anyone else find us. */ >>>>> rtnl_lock(); >>>>> @@ -486,7 +486,7 @@ static void cleanup_net(struct work_struct *work) >>>>> list_for_each_entry_reverse(ops, &pernet_list, list) >>>>> ops_free_list(ops, &net_exit_list); >>>>> >>>>> - mutex_unlock(&net_mutex); >>>>> + up_read(&net_sem); >>>> >>>> After your patch setup_net() could run concurrently with cleanup_net(), >>>> given that ops_exit_list() is called on error path of setup_net() too, >>>> it means ops->exit() now could run concurrently if it doesn't have its >>>> own lock. Not sure if this breaks any existing user. >>> >>> Yes, there will be possible concurrent ops->init() for a net namespace, >>> and ops->exit() for another one. I hadn't found pernet operations, which >>> have a problem with that. If they exist, they are hidden and not clear seen. >>> The pernet operations in general do not touch someone else's memory. >>> If suddenly there is one, KASAN should show it after a while. >> >> Certainly the use of hash tables shared between multiple network >> namespaces would count. I don't rembmer how many of these we have but >> there used to be quite a few. > > Could you please provide an example of hash tables, you mean? Ah, I see, it's dccp_hashinfo etc.