From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932323AbdKQShk (ORCPT ); Fri, 17 Nov 2017 13:37:40 -0500 Received: from mail-db5eur01on0130.outbound.protection.outlook.com ([104.47.2.130]:23085 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755395AbdKQShG (ORCPT ); Fri, 17 Nov 2017 13:37:06 -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 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> <06b1d740-d443-ac23-a7b0-675e7b6ff6f9@virtuozzo.com> <87r2sz33n4.fsf@xmission.com> From: Kirill Tkhai Message-ID: <24d2557d-5790-2a69-3758-d155e2b940be@virtuozzo.com> Date: Fri, 17 Nov 2017 21:36:56 +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: <87r2sz33n4.fsf@xmission.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: HE1PR09CA0065.eurprd09.prod.outlook.com (2603:10a6:7:3c::33) To HE1PR0801MB1338.eurprd08.prod.outlook.com (2603:10a6:3:39::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1aecbb97-1135-48b8-4839-08d52dea2fcf X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:HE1PR0801MB1338; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;3:kbNniIGIB5bZAgRX7nU+5QL91sL81jNk9BXgdBxIBV0lvypM1SneAIgT6BjdTGfXGtuC/MDDLA0K82wDIPImrheqOClRObekraEEChNCHFaRf7nkjDGi/WJvOJQOWZIdYGOY8V4lF0FOTFSkGUKKPEpzJTpcAIRJgljuXzkKgfLsB7wBvhFCOY3UtwqW2P04hf4wAqHgOKk+h/3SUgJtG4tga7a+EnPyy4adkkzp5wJN9NODgfBM+PdK7L6jdSjI;25:wuNclm0CQoM0f5SuHNjC1WSm0WB5DSBnLeKQYV0C7WBv6MgvFQUOCGDOS2r0dafzPmUOHzJEiCYMKorkzFP6AZSxNuQRw0VxkV4c30wQrPtDV4lKOgra8DJgJghxKT0Smib7lESm04DLmm0vn2aZ5gKQeTLkbM0zsBrVhj7WiVYU+ns0F2161eJ4d/NoNiVfnXA6/EvU1h6u35fUgFikZ1AvjHonJyhJkIRD6uLTJuOZGszOu0WbRQrTqFqad/KMKs6VjX0Wb0qI4mBH1mP+X1uVlYQGz7zhH74BOPlrzwifLg9tPmIn2FK6EWh9SGs/Tiym4jUtjUCpg+aL9AFrSg==;31:IGH8xLJ59HwhTS5PmHMeiPGfk/wo3AJgGv/eJW2QBW0m1orT11ON0rglyuB2chXtuHb7IxFQgep52ZKhSV0/FZoUoD6RTivO185E5DvlZShVuMqfEGH4uWHELRxw4R7k5eoJ1PHf6kKDeolo8HX2jLp7rkxTlP9VY0qhPWDqAljXKqoDxzkopnFnhzuJ+aEFs4Ek2bmB0XrdAt8321okdyVbTn6/cXbkU+SLDOMARW4= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1338: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;20:aV4uha2QEhCkVALaM7U9p5juWytK6sY2OybUIHLLlXb1Es0tQchOx/hWdYyG/ebyM/2nZUynBfVHGuDg4a7F5wvwTTb787+wIxyk5h5ECl2mBHQJcWcHAbaFEb+ZMTZR6cxoJbl9UTlWo7E9dWUEyhLHKoOimWh94jRpeY0CSzxiiuCRY7FElbQh1ruBT+ujxsXXn3/rDvFGR5n1kL1E/YByaHFTdh6raFrQrqrWzHJxsS4eM1AquOdkZy8TJYKSoAnPY/+uTMq3p0VnBjZpBMTBoBTPgSQFhgdtJ6efvLoLT9Ck1KZbuVgPdRm47Rq4c1DG3nlpi4akOLU1Ah/gJndvp9wFalZzNRzZx4Vgnqgr5ebEfqamRikfHNAzexcwPXwpbOTy7SAMlHcFFyD/DtW7D0pfCACdrqzeLic4FVQ=;4:3cLQFGpXLqy+acT9qYenI+qe4aQhFCde5WlfBlmVq63QaRB2KLO0AWD2w/d2hFUt8EUB0x4MZppQxraS0ghfa6hDD6ei4ctZqYIfbfFIbWTVnZe5ti1Bf0p1QGHjuI/qZ3bcD6jYi19lRA7vqiCHixFVdBDhHrN8XBOg4Muc0VgD8hUboPpJRYpnHV5vWLVwAgirjd6KyTfh95xOAea66HtPHxq30acH6etrV4kyqdYnK7STN2ddZhm6OmC2mX+ksTR8iUEs/yMQVcRylI5L4Q== 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)(3231022)(10201501046)(3002001)(100000703101)(100105400095)(6041248)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(20161123555025)(20161123558100)(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: 049486C505 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(6049001)(376002)(346002)(199003)(189002)(24454002)(58126008)(16576012)(230700001)(97736004)(31696002)(7736002)(68736007)(8676002)(33646002)(83506002)(5660300001)(65956001)(47776003)(65806001)(7416002)(50986999)(66066001)(76176999)(54356999)(305945005)(53546010)(65826007)(3846002)(6116002)(2950100002)(6916009)(107886003)(81156014)(23676003)(101416001)(25786009)(478600001)(64126003)(81166006)(105586002)(106356001)(31686004)(8936002)(2906002)(36756003)(53936002)(229853002)(86362001)(316002)(4326008)(39060400002)(6246003)(189998001)(50466002)(93886005)(6486002)(77096006)(16526018)(55236003)(54906003);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?MTtIRTFQUjA4MDFNQjEzMzg7MjM6bkpuUFI5eEsvdFY4ODVYSjVUU1RNbUxu?= =?utf-8?B?bHlwTXRrZ3hCVVVsL2x4NTRwWVA0L2lnS25zQ0E0UWVYeGxSUTB2ZWxUU2M3?= =?utf-8?B?QWFJUXpLZUlPWXlRMTl6ZVRDajlreWMwZkUrUTU4azc1SkRFa3hWV2pvQkpt?= =?utf-8?B?WTBEYzZna2RNTkNTYkE2TkZuOVE0Y1NDRE1weXp5S2hMS0Z2N3paZlJ4RWln?= =?utf-8?B?UXZEYWMrSW9GeEN0eE9mR250T1g5ME1aWmNyM21lbVB6ZnVqQWZjd1NObkw4?= =?utf-8?B?dVlRU015L1p1ZFhya1Arb1BvMkJQeFgzWTAzZUdTT1NKallmZU1WM3hiK3gx?= =?utf-8?B?Tzg4bTFpR0FQYmhra09mYVppbEpJUnVCYlhrUHBZNFV1ZDVVR0RWdWFjNjIz?= =?utf-8?B?UVFqOEIrdVM3a2RIMWdmVW8wSU9CSVFqV2Y2dUJ0SE5wM3FMNTNKT0VuMlg1?= =?utf-8?B?S3o0RlNzSDZkZVhOcS9RMGY0aVE0WnY3MzlBVGw2Sks0c2h6NzdzdGMwNkVp?= =?utf-8?B?Zk1qNDByTXZLclN2cDhiVjhKeU5sR2g2OHdkQjNRTWoxMUF1Qnc5VjBBSEVK?= =?utf-8?B?dUx4cWpNeUZoNU9XRVpqSUNvYk9LNG4yajRETWErU1lGKzVMVlJpTTRPV1M0?= =?utf-8?B?THFvdkZFY080bXRuYmwvNkI5VGhIdkMramlHVUJSanliSGhTRG8vbUhsQjds?= =?utf-8?B?TmZJNk9IOFloQ2RBZGNQZHNmWHBLdktvMGcwMk1NR0pGdG9vT2t2aVBXZktj?= =?utf-8?B?RWNPN1hXelNzcFZQSUliV0Z6RUxCSFhOR0RyNVpRSEppMzE2eGsrN3lObzZL?= =?utf-8?B?b0NVNXErNW5xRWdiaFdKcXlkWm9ib2UzaWs2YWFBOUV5K0ZocnV2a3c4ako5?= =?utf-8?B?TmFnb0puMWF4SkQ3a3VPcWRZdktKYU92emF5eGZsZGZlU1dobTBNMDVub2xO?= =?utf-8?B?bUM0VFJpcFA3NmNqTENLSmpNZGpRK0tncjZrSHVUa1pNaXpNVTJXT01jdWJS?= =?utf-8?B?TFNoNm50Rkd0ZmdKMkxUeGNuY2htYzZ0MFIwcE85TTRkQ3VZQnVpWnlNSTlT?= =?utf-8?B?RW9KWFlwajJ2MEdQd0hmeEFTK1cza01oSVRjbm4zaGVMYUU5amVtTG05amY1?= =?utf-8?B?QUh2UmsxS3YxVDdMVzUxS1RQemtvS2tXOU5oYktQeDkwVkhTM2orNmJCSm1m?= =?utf-8?B?SE51SmZKc2tUd3hLRGZUd1pqeVEyRW01bXFUdHBtMEdKdStjYWt0S1B1MkEv?= =?utf-8?B?cHl3a2F0WE1KY1dQNEsrRFNBNnRxQlowT1paVEMwN1JjWTYzV3lpamJ0Nlg0?= =?utf-8?B?N3YrTGtSbm5JNFhtb004M0ZnZUtMeWFIT2RvS2lPYXBZNDR4YjBOMVphU3dw?= =?utf-8?B?VXVnQUhxbDJlTVVpd3lUWW1aUVlBRlpBWGd3R2lVc2JKWnFFQTN2MSt2SGNN?= =?utf-8?B?ei84RVY1TFZmN3JqS2h2eFN1THFVZ3NMdjlWanVrZmdxN21iLzZpRnBsaEQr?= =?utf-8?B?TVQyYUtIZlZLQ1VIZVNGQ2JUWE93S25wUzdxSjZoSG1ienZkYnN4M2lqODVL?= =?utf-8?B?WjdOUU9kV003VFcxSlFZYUg1TWhTUGp5Q054Vm92eno5Y2VacjF2MDFLKy9j?= =?utf-8?B?U3dKRzdia0xsQy9tZkFaQ2gvTTJoQStmbjlqbnB6S3F5Yjd3VERMV3puVGd6?= =?utf-8?B?V09JRi9Wd2Q5YnJ5SkhHQmNacWpmNXVUdUJlTzJZWWUxc2xhZWU5Vzg2T2Fj?= =?utf-8?B?aUZFWUZ4VjhNUVlQNkVMVnNkUkF0VHFaUXZWRndpTFF3SFRYRVFUeG45VzVk?= =?utf-8?B?dnlSVHVnY3IwV0g1N0pTa1pseHc0WmtQNVBUUTZLYktjUDkzQUF1NTZZcW1D?= =?utf-8?B?SFZzZnNOSHNtMW9HaTRYUUQ3dXZQYzlzWmc5UFBRWDhydkxiVG1VQ2lIM2Vz?= =?utf-8?B?YkcyY3I5OWczUVE9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;6:JKHErksxOc4bV83S4LTwX6ffBxey7fKAfeiI4FeFTQkrh/QNXou+EYNpaR+4RQ7c7Lc9hzdR5/uBPtyujxxrIDoYPX1+WLXw0u7ovsCwXXGjnr/HUsgPl/CINVipZVVLWSaiJEioADgV6HGG1B5myNF9dh5tv9AHmS79MzG9i7sKm3Vtp4upFRNrqm4DP8mVKcYKuERpN5ROBeSQeZl1TpUsH/GFujhGE0EvX/Ek+m+uaC/z6AxjWZm0QVr4Ledbj0XNSIi6P6v8IXt1NoWP92lRJveBTcsgClcXoCataBIs3xBoDG+Sg/6ErzCOblZYT6x+t1b5/A7IS3W0ed9VgdzsBAEoJS/FCTi902nm5UY=;5:TOxlib+zE8h3m4URI8eTOTYoGDTWjlgn9bTJlGYezayjIh6hPEWnpIdzLLRsvuDTJ5dAEOK8ZQnl9acu4xN64s//0FrKVDisgtxBPPFkz5J662sGKSNP9ddJTujRwpcXXDycNd3uVqXpEwzw1tOO+r2QF1nE4/G9a9ffwl7vWOU=;24:OrKFUUfxAeElWU98yH3LWKPT9URa5D6Z3twqEI/SZqpt6qkI1lWjCrbjhxwcSOhS8MIQ+7iAk2AhD1bFYongyL/4Hg2xKoush80dGk/Tmgg=;7:27jIfA4EFt7bCeKg7KehcHps6VpdGUQLOBhp1kv48KL+V3dhTWuTdq6HB7MW7D9hbv16jByJbDuYk9x0DPsOjyu+3exDMBaO4I/K31KdaK6VrqnzgFCgYW14IJXkll2P1+WU86f9f4wajBVNMooH9/B5O3EYnroPHsynA1UsSN14H2mTV62G3qoWPWD3ptKmQi9Jind5PXnoPDIMxij2DVsAI5Orec4Kry961Zz1RhmeoqrN4O2IzK7a71WHBFhI SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;20:qQGdS2QNWAVj9SJJERYKiibAnEPNrvdcsbRBPcjNkS8jhGjViMY8OQJzdVR4kvcvzyqmQYTHv6xP2p1r7MiZn6cIUe2J1RayURquCRnetdqQOHcH1SkbF/mepkYLohkwGcFlG9pv962NzEHdJJlhbt1/TT7lddlaTvs08vYoLNI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Nov 2017 18:36:58.2378 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1aecbb97-1135-48b8-4839-08d52dea2fcf 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 19:31, Eric W. Biederman wrote: > Kirill Tkhai writes: > >> 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. JFI, I've checked dccp_hashinfo, and it seems to be safe. > > The big one used to be the route cache. With resizable hash tables > things may be getting better in that regard. I've checked some fib-related things, and wasn't able to find that. Excuse me, could you please clarify, if it's an assumption, or there is exactly a problem hash table, you know? Could you please point it me more exactly, if it's so.