From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 35C178015D for ; Wed, 9 Sep 2026 10:40:47 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 689AdSd3019036; Wed, 9 Sep 2026 13:39:29 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 689AdSd3019036 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="ATHCsWBC" Received: from mail-yw1-f197.google.com (mail-yw1-f197.google.com [209.85.128.197]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 689AdQF2019032 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 9 Sep 2026 13:39:27 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 689AdQF2019032 Received: by mail-yw1-f197.google.com with SMTP id 00721157ae682-86e8abd7136so77879327b3.0 for ; Wed, 09 Sep 2026 03:39:27 -0700 (PDT) X-Gm-Message-State: AFuF++m9uPixqxwR/pdUljcMUkZXCdN9lEh4ZPP+rRf7WuzIWS1Nw36D VS0b7j0lZ+kFy/poIInCUap+irChjgViDEkYidEGCLWXE2Zxhb0KgqxwYt9QnWa6raNFJ9Upwjn jBEa6Xc9uVpsabMB5mEdg/Emavr+J61MXZ7Xz3V+p88AoNvy9xyNdSA== X-Gm-Gg: AYBFou3ZiqVrZL49WcI7KgMBNobE5xuL30dhRJi37BCMpqsFKN0oDLHvPDG+XCd4xp8 eu+4aWE7XnyDUrToTEbJy8NISItzgL5RX7Iwkx159rucbiFT+ZO36SqEePIpZPZR/giI1ARIncO Vv/NOR6Gw054D0vXufwgE4au1R9ZGP8o+VP6A8qYlS6mN/y0Y8vawc9j7Iwpau2Mutj/yiZwvv0 jqXhQG5cXNa8iD7PO2fws3LMNesMakK3V8WQy72bOb4HV5+D/T1W0SduXR3srRoBokMKrQlIY9P RAJ63ncjdmAcZWF5BvjoLVVNU+qnm7EKMi5WPRymCG7AMuw1gcTARYmsW8DpmTJEb6gArlnTNuR eYYH/5ECFStT0FkYtZepIJD/FuHAfvhXKYElP1+IUKoxDdQ4do0d0Se9tJzCP8HoEoyWP1rkplQ LwJQWT/wpyyhqDUeWoehjN5P6WGIgQYWR3pw== X-Received: by 2002:a05:690c:c4fa:b0:880:2544:fb13 with SMTP id 00721157ae682-8802544fe88mr6579637b3.2.1788950366084; Wed, 09 Sep 2026 03:39:26 -0700 (PDT) X-Received: by 2002:a05:690c:c4fa:b0:880:2544:fb13 with SMTP id 00721157ae682-8802544fe88mr6579587b3.2.1788950365463; Wed, 09 Sep 2026 03:39:25 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788950365; cv=pass; d=google.com; s=arc-20260327; b=WsMBXsY75SbwmsFB0lAfYj1vVcCpEYhF3IcYIgRsjeNlNkA3OVC4G48Rxxz9seJLWG HtXU52Jc97dpESEVMq2NkTuHvIN76XuSW/7BzQHrSC+H6F8toyShFI36LZCRDHsF0cMG 5v5o/0QxHG3OYcoFQBC6BSk6mhrz1Iif7GcoDxuJKqx1jllBjzmB100ktwWpbxV9YI5h kIyYh+QipXmMxybUdsRk09aJRUP+zNKusag1vSOEbD9QLBWZNSYEYGPQsa6uNXhJ3Frb v//ch7F0Rcg13LxQ0NnTfzFjWEF5b4Tu0PAh8TjoJjEetzUBsmO+mHKaz2HUdSnwbSt6 F5cQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:in-reply-to:from :content-language:references:cc:to:subject:user-agent:date :message-id:dkim-signature; bh=zPX3tO5kmUrrQQZe88Voe+AjfjeQwtNl79WpYTVj3zk=; fh=26FXTO6eY/S3gvyMXNKNKTFHQ0lD1bPkQ8wRpe0tMZI=; b=YhgRj8uhBW0Sq3wZA6eEN39CbJGnOaQsxNvpVpVjp8yrmPoeDmUjlMhLQ1ahrDCkjY fKfs/CzYadozZnbzlxfpjZF8zieDpgKJH5fHlo4XNTV6VLjh1ZCkK3gXlCb2zvAbcMof U9xZ2Yt7dRLkOr2I6gJZFBuzpKAaTotuu3eeNDJ4Yp6EvHM7R5kuRk+iOU/sWvHWNhqT xJ4Vf9zh/3Q4Vqe6E/6om4XMQL7/GCcv5WYaTwvsGpwpk1qU0nFL3DzbgJk0d8tVZtSM AOr/mghoRwP+TwtGpQv+EolPJOq5TL/r/hFyGhnMHPofj5pKQjfL0ZCRBURUpKJOEWUX l8sw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=ATHCsWBC; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazlp170120005.outbound.protection.outlook.com. [2a01:111:f403:c200::5]) by mx.google.com with ESMTPS id 00721157ae682-874d3cdf75bsi52370907b3.164.2026.09.09.03.39.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 03:39:25 -0700 (PDT) Received-SPF: pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) client-ip=2a01:111:f403:c200::5; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=ATHCsWBC; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LNXitbSnLk0LYs07hHdlWiE5mGOiusYaWg7jhrSRDCaqUCBu3g2pjgO5eTdeK9Vua5jcjnVB0BJbCXQfTjL2GxweovgT4wGX/DoWJwboIsnPM+nC6MFCCVRiH+F/l7XP4OtCLxhYYD+01g1Y1sX8Ehsj+WElKNT3TCyeqKWLUMv1Vjwii63alOSMYqCxTEe43A5AfIV7++TP4bTdnDfbSZ3fLqDYLY4xYWyZo7aVkYfxD4IIa58GG1m8ZoR4Apgsj5kHfZDo+okshPKek4mwTZxn0YAOhVv+vwykJq7WveRjrH6OLd4FtMgwEa7ub/HB8+pOdRIc3z1/33TKjOIXrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zPX3tO5kmUrrQQZe88Voe+AjfjeQwtNl79WpYTVj3zk=; b=P1M8nnsfPdzNltE5MECgoxH5kLXwji/dGUEBWMZBdbNcDPpLUreHBwj6dfVGh3SczQv9hO/wuphmlyew8jZW5hKzXCSCv/34hvH0+GYd8vtQpqOjDNAs4wia7l9BZJ4T/2UuWpzlJnoPF+jQnqlPKQOvjEVllixXj4mLI+Nl13gvvWpL5Y+Ta875RAMGIFTT7e3tOw0id0d0rkF9NuEUnEVxKu1ElcX5ARXko8GU2dit2anSBYVpLyxDrm2St+hnB7QW0ynod37NUkGFzcIjSDybPcf/o2nGUsTzVlkmZdnm1kWnRtHVUTgaKBMsvQ2j9kM/gVuCXARtS/fKZMAJ4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zPX3tO5kmUrrQQZe88Voe+AjfjeQwtNl79WpYTVj3zk=; b=ATHCsWBCnO9egaXs6cgqcFtG/QMJ6eWFDJB5DqKUaA9ab5k30CBjWdQaSWBZLXrhNXIYE+vBUJu6sWgucV4DSrXMVEmRWTzk491CGQ6AiboXircaAXS6O4hyxvL9oUUGtOhAAMx3VOPTWTrAvICofezs/5jX8Mp37wvlIHq+opxLB5eDxVZ9YIX/pf3QZ93G/BCyJoY2Pk6kyJrhFMRJ4sl4KlzQORQNOt/pvoRtDQXlm3bl7BetJG0fiLJbnZIfn/K5H+Pe8JtzlDci8dF/8+KaV8Le359uROqMoJapoBDIO/jBMDoLtIyRZmgTs3vZp/UF2sJ6vrlLFL53anxQTA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from DU0PR08MB8470.eurprd08.prod.outlook.com (2603:10a6:10:406::17) by VI0PR08MB10584.eurprd08.prod.outlook.com (2603:10a6:800:1b8::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Wed, 9 Sep 2026 10:39:21 +0000 Received: from DU0PR08MB8470.eurprd08.prod.outlook.com ([fe80::3db0:9d70:4641:5f47]) by DU0PR08MB8470.eurprd08.prod.outlook.com ([fe80::3db0:9d70:4641:5f47%4]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:39:21 +0000 Message-ID: <464d8d05-9660-468e-ae84-85ec617d6bb5@virtuozzo.com> Date: Wed, 9 Sep 2026 12:39:18 +0200 User-Agent: Mozilla Thunderbird To: Konstantin Khorenko References: <20260907-ve-selftest-improv-v1-0-a17847abbd48@virtuozzo.com> <20260907-ve-selftest-improv-v1-1-a17847abbd48@virtuozzo.com> Content-Language: en-US From: Vladimir Riabchun In-Reply-To: <20260907-ve-selftest-improv-v1-1-a17847abbd48@virtuozzo.com> X-ClientProxiedBy: VI1PR0102CA0082.eurprd01.prod.exchangelabs.com (2603:10a6:803:15::23) To DU0PR08MB8470.eurprd08.prod.outlook.com (2603:10a6:10:406::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR08MB8470:EE_|VI0PR08MB10584:EE_ X-MS-Office365-Filtering-Correlation-Id: d766f510-3662-49f0-5645-08df0e5e9b9c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|366016|1800799024|376014|10067099003|6133799003|22082099003|18002099003|56012099006|4143699003; X-Microsoft-Antispam-Message-Info: zDwzkSlKIws6q3lqYrEtOkceIgbjxCMuW76nMBvAHueO42nI818rOUwQ6lwGejjjX37GL6vqj+rjuHkJwiEbyLhEhMtK7dPy4rAnIQ9lWRbLoJUC7HdeQZ4YXTHhQhtYLvO52joHzwzVMXWCmC6r/2Xf0vKbqJprod+vctUXLDudoVeSx04QhqZuqRm8sinsiN2hsX7t9VEmglDvwCt7EHOTT7/n9LsHxb70ngWCGwMlrTmDRYhbSVkvyCoHioYJqUKzBBx5fTulhGDL4+yjYdfadx1DxMEbbESSaSRYgLHAaWIVkawDv43ZcJykal02OXSOtpCMkjdiRNAxuqLiaWiab2UT7JkbkLHiayK9pwDuAarx1rWf5e0PQ8jczqmV1Bn9zVQnbchSRexCeFkuLC7kxEVSnVKd9l2+LzViq1XxTyt4pG5ppWzEeeyFgZcPep17JxXUABImoJ0f3ToZK+tyOt5Jya6nsM9vKjnaCJyFmkz40t2Zg1PRQFVyjl7ZbCE3/IDYEqg3vnPKTdWZJIIsPM6qM5Y2mgyx6q5eiT/E6ywBvRffQzdTjPEHY/AHyz5i4H5OcvMZgBi4ShSirEZ8QeIlI81ooBWJGoG3XsREOXJuF4E7W9mgzjz2ifgOJ/1M+vWs9d1Aa0QiufUykDlrkPqKbjxMlOfXGVo1D6U= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR08MB8470.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(366016)(1800799024)(376014)(10067099003)(6133799003)(22082099003)(18002099003)(56012099006)(4143699003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NDRXY0lwd013cHJKUTRQZ1d0VlBOWWpuSXNHdkZ0UHRsRXJpMXRkNk9jcGVI?= =?utf-8?B?ZnFBTEd2MHdVSWlZdDRISnJyZ0RxNTRER0RqVFA2M2NaZnU0WjU5ZkdLMTBR?= =?utf-8?B?aUREVGRGcXFhdHFwcnF5K0VRdWdsYTk2eDB3Wjc2dXdqYWdYU3VrSVdXT0tZ?= =?utf-8?B?ZHVyVjI3WWZ2SVMwV1BIMUU3S3RtVTIxTldqd3NvSlZMakU3bGlUQlF0VkxT?= =?utf-8?B?bGNIQS9Cd2hscDhIUVRGTkJNaVBpUnZjWEUvdndNb0l3WmdyOFZZVFVTNDhT?= =?utf-8?B?MmF2aTBBTEhSdm0vWDhFMjJEOWVUZTU3amVsSXRpQVZOZXh4aEN0V3JuSEV3?= =?utf-8?B?SU1lK29zekZIUll1emZpbktLcGoxYU9pYXUxNUFiR1pBYXFBODBzd24wc2tX?= =?utf-8?B?ZVZlMndtRXIrRlhjRlRBMTB6eDc3amszUmxENStjRFVyVW95STJpZDZoTTJS?= =?utf-8?B?L1hPbWZNRk4rRlJyU1FBeUJaZ2JyQlZLcFJHcjdMZlpGSU1pKzhwQ3FmcE5p?= =?utf-8?B?NVRGT1ZPbFlSMldtK0xlWnVRVFBPQjYvS2RObzNPaEc0Q1NGa2dWSWpLM1ox?= =?utf-8?B?R2Rqc3Bod3ptSEZuRmZsRzFPTGR3UzJZZHlIZXhiZFFZNnhNMmZ2REtIbEs1?= =?utf-8?B?TjExWmhJcTlUMmhxRHM3bkRoU21HR0YrVTUxSXlpVHlYNzd4bHBReDZZOU9D?= =?utf-8?B?S2ptU2c0KzJtMEcwTWdBeXc4YUVGSnpmQVBMajFTbng5cDB2YkM2VVlHbE5o?= =?utf-8?B?blZmSHM4TlFodGs4Q2NRdyttRjVyNUg3cDdMZk1yQzdHZ2E3SG4vL2UxcTBz?= =?utf-8?B?ZFRaUFJ3b29GRzJCVkwzekNEdjVIQTRRbkRqb1hZWWdJV01kcExpQjdRT0ZD?= =?utf-8?B?MFRlVzVvZ0xhY0Nwbzg0WCtYN3RHSEdnNGN6TTJSd3lVZ2RrbUc4dUdGSXl4?= =?utf-8?B?MTNhTkZiN3k0R1l0QjVWRC9qSmdCNUpiVVlBdkNQNUlXeFQrODc2N0xieGht?= =?utf-8?B?SEhpbElTOEVseUNiS1NkbVdtVk1hWkFwbUhWMHJ4RWlCWnRlZVN6c1laWEVK?= =?utf-8?B?amNuK250eGNiTWpNM1RDMkpueTB4RVBnb0hoTmJiQXpML0dMdGpnK0hhQWRi?= =?utf-8?B?Zy9jcC9uYzVnU3lMWjJLSjhEQ1d5WGUzclZTcnhrYkM3TDhDTU9tTzlUWmUz?= =?utf-8?B?L3dVcXpiWEdraHpGZklna1pnTE9TRFpmcXp1dTVWM0paQi9WMm8wT3Y0VEQ1?= =?utf-8?B?bDM0MDZ1R0dSd1kyNUI2VlBGMzNEb2JlMWZJZ3VrZk90c1BVdG1GVGkvenFy?= =?utf-8?B?bzBEODZQbUlCcjFIYVpNN01ZbFJMdmU3OVB3SWdSVnJEWVdpdWExdi83KzJE?= =?utf-8?B?ejlnRDl1MWd5VXU0aVJuTmFaWml1UGdGUit1elpXVnJOS2QxUExQbVdwYTB2?= =?utf-8?B?TEdoZzR5emxQZ2J1eVNITkFUVUwxNEZoMzIvNXV1UGJ3c3MwYjZucm11MEZq?= =?utf-8?B?emZneHZFSkd0YWtTV0pDUk5KbGlHYzAwdDEyczZVYW54MUlSdmdlaWp3ektq?= =?utf-8?B?SFRDQ2RwTUJndVRkQnNqYTMySEJMUU9DcElZWVoyQnYvSUhSWXAyQ1F1alZO?= =?utf-8?B?dmJxYnZQTnBadDRxdWZtdVdXK1ZBdjhGWFpTK2hKTTJ0OGtPZ3NhTzNKMy9R?= =?utf-8?B?NlV2aDh5c01yYmNFalZNWmg3aW9Id2V1UkYzajAvY0xDckE4ODdLdEgvVmtu?= =?utf-8?B?cHU3NHk2azRGRWpjT3RXSzJJYVVlSk9VM2c2MFV5S09za2krYXNYaktPTlN0?= =?utf-8?B?Y0c4STNkL3FaU25UeE9oZzFMM0xDZWhKVzg3TWpNanEzWkFCUWxvV2pMcTg5?= =?utf-8?B?Vkd0R050TnNJRHVKaHpyanVhM1g5UHBmelIxSHZxL3JZNlY1WDMyTVc1cVlq?= =?utf-8?B?N1ZvNCtmWXowc09xWkZDanRCWC9VMkFBczBOaFV2REZreXZpM3dXQm9DTFFI?= =?utf-8?B?d2FOOW9NWndmN3ZSejA3a0xUTUVJNzBkTVptaFBFc3VTb0d3eEpvN29aNTA5?= =?utf-8?B?Z3NMd3VjTFE5Y0ZWUFlBaWFXVW82dU9wNGNWS0YzM1JFM2QzQXNCSXBmT2Q1?= =?utf-8?B?dWVhTWkwZEJOSTl0WUdhM0NZMXVtdVYwbWNtV0E2T1NOQWFHWkJoaFJMRitk?= =?utf-8?B?QThlZS9KQmxKRUI4QXhSWWtTemZLaXViNjN6QmprR1kyYy8wMW5NMk9PUzg0?= =?utf-8?B?Vk1PS3FDUlgwQ1dHVkdIMVhNQi9wWmtrOUtqUFRwZUJmUjczME9jbGRHc1N2?= =?utf-8?B?T1NFQlV1MFJwTFJXL2VLZFFFeUROVFdia04wbFU3QmpFby9zUDduTHFiM3lk?= =?utf-8?Q?mwufLUaWnhEtpo0c=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d766f510-3662-49f0-5645-08df0e5e9b9c X-MS-Exchange-CrossTenant-AuthSource: DU0PR08MB8470.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:39:21.2284 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aNI+lBDWdNgU+79jbkZNk5MmjURVqI7x37IVY1Sj4yLX1SKvcEacIZh1v35hr7dxnNnu/8Nt1ORuH8I0n0zR+bMFKZvVuVSgWAP68GtNJRs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB10584 X-OZ-Fwd: true Cc: devel@openvz.org Subject: Re: [Devel] [PATCH VZ10 1/3] selftests/ve: Add namespace management helpers X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org Sashiko review + replies. On 9/7/26 21:14, Vladimir Riabchun wrote: > When mount namespace is created in a child, it is destroyed > when the child dies. We may need to keep it for a while to check > how VE handles resources. > > Instead of keeping a thread which lives in a new ve+mnt namespaces, > let's store open namespace file descriptors to enter them later > without keeping children alive. > > https://virtuozzo.atlassian.net/browse/VSTOR-144504 > > Feature: ve selftests > Signed-off-by: Vladimir Riabchun > --- > tools/testing/selftests/ve/ve_selftest.h | 118 +++++++++++++++++++++++++++++++ > 1 file changed, 118 insertions(+) > > diff --git a/tools/testing/selftests/ve/ve_selftest.h b/tools/testing/selftests/ve/ve_selftest.h > index c53bf7900d20..b3c5bf63f34d 100644 > --- a/tools/testing/selftests/ve/ve_selftest.h > +++ b/tools/testing/selftests/ve/ve_selftest.h > @@ -31,6 +31,124 @@ > #define VE_CONTROLLERS \ > "+cpuset +cpu +cpuacct +io +memory +hugetlb +pids +rdma +misc +ve" > > +struct namespace_ctx { > + int ns_save_mask; /* Mask of stored CLONE_NEW* namespaces. */ > + /* Namespace file descriptors. Name should match /proc/PID/ns/NAME */ > + int ve_fd; > + int mnt_fd; > +}; > + > +static inline void close_namespace_fds(struct namespace_ctx *ctx) > +{ > + if (ctx->ns_save_mask & CLONE_NEWVE) > + close(ctx->ve_fd); > + if (ctx->ns_save_mask & CLONE_NEWNS) > + close(ctx->mnt_fd); > + > + ctx->ns_save_mask = 0; > +} > + > +static inline int save_namespace_fds(struct namespace_ctx *ctx, int flags) > +{ > +#define OPEN_NS(name, flag) \ > +do { \ > + if (flags & flag) { \ > + ctx->name##_fd = open("/proc/self/ns/" #name, O_RDONLY); \ > + if (ctx->name##_fd < 0) { \ > + fprintf(stderr, "%s: could not open fd %s: %s\n", \ > + __func__, #name, strerror(errno)); \ > + goto err; \ > + } \ > + ctx->ns_save_mask |= flag; \ > + } \ > +} while (0) > + > + ctx->ns_save_mask = 0; Sashiko says: If save_namespace_fds() is called twice on the same namespace_ctx without calling close_namespace_fds() in between, does this line reset the mask and leak the previously opened file descriptors? User is responsible for freeing resources correctly. The idea of this design was to avoid additional initialization of ctx before calling it. With current approach we can pass ctx with any stack garbage and it will work. > + > + OPEN_NS(ve, CLONE_NEWVE); > + OPEN_NS(mnt, CLONE_NEWNS); > + > + return 0; > + > +err: > + close_namespace_fds(ctx); > + return -1; > +} > + > +static inline int enter_namespaces(struct namespace_ctx *ctx, int flags) > +{ > +#define JOIN_NS(name, flag) \ > +do { \ > + if (flags & flag) { \ > + if (!(ctx->ns_save_mask & flag)) { \ > + fprintf(stderr, "%s: could not switch ns %s:" \ > + " no fd in context.\n", __func__, #name); \ > + return -1; \ > + } \ > + if (setns(ctx->name##_fd, flag)) { \ > + fprintf(stderr, "%s: could not switch ns %s: %s\n", \ > + __func__, #name, strerror(errno)); \ > + return -1; \ > + } \ > + } \ > +} while (0) > + > + JOIN_NS(mnt, CLONE_NEWNS); > + JOIN_NS(ve, CLONE_NEWVE); > + return 0; > +} Sashiko says: In enter_namespaces(), the namespaces are restored in a fixed order. Could this cause issues if there is a dependency between the VE and MNT namespaces that requires a specific restoration order based on the flags provided? At least we should keep the same order as in save_namespace_fds. Will fix in v2. > + > +static inline int enter_cgroup(int cgv2_fd, int ctid); > + > +/* > + * Create new namespaces and store them in ctx. > + * CLONE_NEWVE is treated specially - before unshare corresponding > + * CT cgroup is entered, after it root cgroup is entered(not original one). > + */ > +static inline int prepare_namespaces(struct namespace_ctx *ctx, int flags, > + int cgv2_fd, int ctid) > +{ > + struct namespace_ctx tmp_ctx; > + > + if (save_namespace_fds(&tmp_ctx, flags) < 0) > + return -1; > + > + if (flags & CLONE_NEWVE) { > + if (enter_cgroup(cgv2_fd, ctid) < 0) { > + fprintf(stderr, "%s: failed to enter CT cgroup\n", __func__); > + return -1; > + } > + } > + > + if (unshare(flags) < 0) { > + fprintf(stderr, "%s: failed to unshare, flags %x: %s\n", > + __func__, flags, strerror(errno)); > + return -1; > + } > + > + if (save_namespace_fds(ctx, flags)) { > + fprintf(stderr, "%s: failed to save new namespaces, flags %x\n", > + __func__, flags); > + return -1; > + } Sashiko says: In the error paths above, such as when enter_cgroup(), unshare(), or save_namespace_fds(ctx, flags) fails, are the file descriptors held in tmp_ctx leaked? True, but honestly I don't think it matters a lot - failing here is a critical error and the test should be aborted. But I'll fix in v2. > + > + if (flags & CLONE_NEWVE) { > + if (enter_cgroup(cgv2_fd, 0) < 0) { > + fprintf(stderr, "%s: failed to restore root cgroup\n", __func__); > + return -1; > + } > + } > + > + if (enter_namespaces(&tmp_ctx, flags) < 0) { > + fprintf(stderr, "%s: failed to restore old namespaces, flags %x\n", > + __func__, flags); > + return -1; > + } > + > + close_namespace_fds(&tmp_ctx); > + return 0; > +} Sashiko says: If enter_namespaces(&tmp_ctx, flags) fails, does the process remain in an inconsistent namespace state for subsequent tests? Additionally, does this failure path leak the file descriptors stored in tmp_ctx? Fair, will fix in v2. > + > static inline int write_file_at(int dirfd, const char *path, const char *val) > { > int fd, ret; > -- Best regards, Riabchun Vladimir Linux Kernel Developer, Virtuozzo _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel