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 89D508017D for ; Mon, 19 Oct 2026 09:02:04 +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 69J90fUZ021153; Mon, 19 Oct 2026 12:00:43 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69J90fUZ021153 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="DMsBaFjr" Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69J90drq021149 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Mon, 19 Oct 2026 12:00:40 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69J90drq021149 Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-89f2846ab57so2073362b3a.1 for ; Mon, 19 Oct 2026 02:00:40 -0700 (PDT) X-Gm-Message-State: AFq9FYJQvVLZh8W6b5+SwbeU+4knMa/j7MUpDRsbR/KCw4G58Hev7KPM koHXPaV5QAI0gIk1i4pcS1czeX5nUNVrPxMzBkOiwEFzRLwWMcvNgMZFye2+zksoLE3TDPL9Q1G yF5czJOcX7ebgEQkKUtxWIt3pbYTFpDER6KhJvo6CoadcllgUOIwv1A== X-Gm-Gg: AYBFou3sC9a9pe0DW4hr2dh2aD7TRumCw0y4ost6Phxsuh9RgHuTp9p4LbyF0njAlOI 7pV1qYsVDYC2fPNUhMuQ5NBRV/7h62lzHceKpY8ATKWI/InDMIEsf0iGYmt2qYUu2pIB9/fIL7w ZohsGoPgrCg0HZenlW9AmvwbE2++ig+80kEiPPHmspVoMvd8lv9/uGKy1Y+AeZzW4ctigR8xySB hvXwgNpnLIgsvpHhbx0U/IVCUry3Af1CpwZ8fjVxlcKJtRJb2oCKU+L9DWD/Luf+lyRokGwF75l J+NUk2nkoYMzWGG9t5HPeHMhzW0Bm3VdjW7zQ3OfJlksbd1wdZDepPMFlbIY0nE3z7byRqJa7FC HicqHEXICAk95ZjUUppLi4TCefQ3tX2I/TW30nBvwucMXrYTKMHUhDKTVZZ+q0yudmlgIZ2FDm0 XkQQoyvOo4QZY1zb0IRJxldDhr X-Received: by 2002:a05:6a00:3d13:b0:89d:e6e2:b2a6 with SMTP id d2e1a72fcca58-8a04ce4e86bmr5701562b3a.45.1792400438870; Mon, 19 Oct 2026 02:00:38 -0700 (PDT) X-Received: by 2002:a05:6a00:3d13:b0:89d:e6e2:b2a6 with SMTP id d2e1a72fcca58-8a04ce4e86bmr5701531b3a.45.1792400438187; Mon, 19 Oct 2026 02:00:38 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1792400438; cv=pass; d=google.com; s=arc-20260327; b=eW3fHKZOL3MdycmsuTSW+Ma2qvEeBb53wI9faT9bCF5zobwrHLJkoxf5MBopIQYb1h oHsy6mt53f8tdUod0RI2PXV/JGXacakqPMmjD6fjM0zebCfcZdFBodXN18MPQOmwOV7I ywoFStz0AMiMEefG9KARDaR62QMqZO5+loibE2hgBkiQ6bMfZjNB5AHpmjsXhAV8jt9R +qDQSeWyZb2E0kFzMS468+EyKgNeWO9Nyqp+AddMm6TZPghxGTOUkTXG2IdGJ7LKYazL 57jvwjGulSPfzkZA+twuOkQhG0H0ZqIAOKEwsjiZzpPmHxWt5CZirCEG5YFkNUiO2FZ9 Jkdw== 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=pEOCzEmcQjuzAzkZe5ZzA7HlpuQYhq+CCbuW9jgNdi0=; fh=pK0qqO1HhBgKxz70F36njo/mqEEnDEasp0hTruzWUP0=; b=N3sAz9fbU3wI1EtXXJ3GXKXLTS+1ty5ct6Iy8lzEdUjBMWd/v+rUa6xhCmFYAHmLhw lysehqNsHG9WhN9+3ozBzMmfBvbxo8QuC9kUdJ+WTIfQmEHpkdbQ5miwhzA5D9PGYVWV cup+/o65UAoZFotUW4p080g/8QdUx6ugcTr2bkFUgF10dptu12Mfu7UArxwHNktUUMud El1cOC+M5BgB+XtMETWQSJgmg4wEDxkWdkZ0bBiAcKxcbTa3FBfW8R2XHQowmc7m2367 w94UPb2IiZHRc+nKX236NM6vwsyStmBpZ2l2l3hJWSkpDM6yOnc4rWH5dEvtEg/yoWyh mEqw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=DMsBaFjr; 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 ptikhomirov@virtuozzo.com designates 2a01:111:f403:c201::6 as permitted sender) smtp.mailfrom=ptikhomirov@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazlp170130006.outbound.protection.outlook.com. [2a01:111:f403:c201::6]) by mx.google.com with ESMTPS id d2e1a72fcca58-8a06861edcesi5082872b3a.175.2026.10.19.02.00.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Oct 2026 02:00:38 -0700 (PDT) Received-SPF: pass (google.com: domain of ptikhomirov@virtuozzo.com designates 2a01:111:f403:c201::6 as permitted sender) client-ip=2a01:111:f403:c201::6; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=DMsBaFjr; 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 ptikhomirov@virtuozzo.com designates 2a01:111:f403:c201::6 as permitted sender) smtp.mailfrom=ptikhomirov@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=gQxvuh9+S/lRCbj+5sn9Xbb2+GMbM2bt/Bxl7pFKpJfzogqQuNow9Akcec9yiPYIDPIudjyl14J+iPzpcrqj+zQnvsN56SDFA7OkDjw3wHtUYqEAy0VcAAPosW48fj0gR3lTawzsf9ma+C9bWWPLHD76A3gqUoYBQZT6SYoqUeUUmxwsrnA5or8432dWHPqMODEQAJr5GQl5CzzYUXPLby1uElFJ8iyt4vmFSkIIakMSm2C8ajHM0nU32qd0RHd3L6Ud+PLZASJQ4uyvhDuCvUgZVhFj0mRD41wDW5sG20BkMhgffivt9ozgGwQXpq5OoTj1C4pSkKcLjXQCF6LTaQ== 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=pEOCzEmcQjuzAzkZe5ZzA7HlpuQYhq+CCbuW9jgNdi0=; b=bJ8OOqrwADgAEYSXQkzJoYb5BWeOztiBD/D5ALk/XKdFbAhnXn56t3+pXLmDM/MZaDl21qV6rzu3w7F9+AFu+2Lg1DCkAh7bunPVx853kDatpyHqYqJI9/cjriXT6Dz9ht9iDYpZdZ3rR/NWQm1tLkrcjXML+iWbsz/52mjxUiqj4Ye8CvG7XCWJY0shn7slDF8gTjmuZgS1UQ5+MxVY/avVNvhRMbbnpWxwNfKb/3VPyLrBRL2KNlQvieT2xu/MDRTbUCa92dUJcJUxPs//kUuA6pFi53IWseB8nTMf7zCTfDZK5+lXTZicI9vbE2yNBc1SkcLzn8bRuwqNgPhccA== 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=pEOCzEmcQjuzAzkZe5ZzA7HlpuQYhq+CCbuW9jgNdi0=; b=DMsBaFjr8Gh5k1SHVyNTDA4IGF8gFVQAx4UdT8ZONoKBHuNHvfzkpKDQXMSXbQPmuctWFTKqJXWAdkWo/orsqw1Qi1nK9HwO/AXbtY+ir2Z9hS8LzXr1KDWpk7zSH8zjpHaLE1AJfhZ0V+HOxPOqzEMfJ9OWr1B6Pys7rFLn1ErUrM9o/Cwywp1ILJerjtg6QlBjTd6Dnj1a8Z4117m2RVbxbTNH0H8ZQuRfU2Sz+Fc8OBA3kulgJbaduLwBClU8oU9sa2u1otWzuddoiaOFfmEH42lkEh+JZNT8EGn8g+E65/Y7bdgBj59GAUwdnpexVx7uieGPCmXYhsOG5ckULA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) by PAXPR08MB7526.eurprd08.prod.outlook.com (2603:10a6:102:24c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.14; Mon, 19 Oct 2026 09:00:31 +0000 Received: from AM0PR08MB11804.eurprd08.prod.outlook.com ([fe80::bf46:f137:f6d2:5b3a]) by AM0PR08MB11804.eurprd08.prod.outlook.com ([fe80::bf46:f137:f6d2:5b3a%7]) with mapi id 15.21.0546.011; Mon, 19 Oct 2026 09:00:31 +0000 Message-ID: <244f9a36-6ce0-4002-947b-0c772b80d184@virtuozzo.com> Date: Mon, 19 Oct 2026 11:00:30 +0200 User-Agent: Mozilla Thunderbird To: Konstantin Khorenko , Vladimir Riabchun References: <20260920-ovl-use-orig-ve-v1-0-b3e63f6ff80d@virtuozzo.com> <20260920-ovl-use-orig-ve-v1-2-b3e63f6ff80d@virtuozzo.com> <179035911162.3337040.7476455317600827184.b4-review@b4> Content-Language: en-US From: Pavel Tikhomirov In-Reply-To: <179035911162.3337040.7476455317600827184.b4-review@b4> X-ClientProxiedBy: BE1P281CA0197.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:89::10) To AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR08MB11804:EE_|PAXPR08MB7526:EE_ X-MS-Office365-Filtering-Correlation-Id: 33166ce8-73ef-4ea7-8036-08df2dbf6d7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|10070799003|376014|366016|23010399003|1800799024|261009223027099003|10067099003|56012099006|3023799007|6133799003|22082099003|18002099003|4143699003|5023799004; X-Microsoft-Antispam-Message-Info: tQw3/U2FznYL+d9Ye6vZmOvy3H/Jh0FLNaGTgIPkGkoRhptTjKvl1s/H0O0q4a3YyDh7kV8EvoTyjRZP+WMlU3QPBsNZ9X+I/0q3Rq/NU4ReGoQysVXSXz+mrI80g7iX8CXEAx51/cgJSExYXNpCpiA+UP5unFxKhhdIfdayKV/dHep8WTYK42U70/lS7IVKy+Bkbc29awvuu+JlBKKqha0PZojisWniWJlZMZIjwj12oAv+AjBUJ69nvd6oTO4+yInxRbfBYEvbi7kAPCxivcXbRbD4IgqF9P9k0M8Qvnwnz2jZZ/Fj30mg16VJ/Nt7Wy55g8P6+yhMeJGCUxK31JFyg5zFV75w+TPuzxdf+reO+zphgwUaRjiT5SNMSiEuy9TkTn6FNiYqO4zxkyYSqllse8VS9giISxXP4/VEiGtXm3h2qmiyU/4dllF5R6rCdaLGDZkkN6DqbWPssSIhEvbrDUGxyNqXxSxSuZ1X6xzSQIsP6Q/zwrJICyqCz0n9JOOvbpyGrbxsYM8xyBFM5+Jal/fNY9ESSXWtv5MSnfxDTv1mIeBX0XrW+PMM61CqNixtTLbbimYWER/8ucaHDQ7drswNXhAQJvcWasZcodTDUY3UzDTyLWNqN5Q7a7pp X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR08MB11804.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(10070799003)(376014)(366016)(23010399003)(1800799024)(261009223027099003)(10067099003)(56012099006)(3023799007)(6133799003)(22082099003)(18002099003)(4143699003)(5023799004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YmxKUzFCZllzK1JYeVllVW9rZS80TU53RnlyUDNKUVZXVmlaWVNwRkZkejBh?= =?utf-8?B?UXVGYVJDQWZSZXZ6WmVtL3p6aVBBcEp1dEU2eWVvaFRKcFN2RzVPTXhDQ0sv?= =?utf-8?B?bU43RE51NEYzeFp4ZkdvZDJybFNpb20xYlh3WFkycnJrNGZDc2RJNHp1blRL?= =?utf-8?B?SWZYTVFZSnBBSTFzREJUL3dHZHp0dUdzdDMybHBJUXBjejh6VDlRbnlzWjJT?= =?utf-8?B?SDIzbWFDdUR2cm01bUtha2o5RFpPWmY3ZWUrUnRHVGtCK3V4UERkYndSWUs1?= =?utf-8?B?aDlxMmNsbUoveDNEYW5rOExPZVlKRndoTzFjZy9VYncrNWNFTC9WMzlUb3Jm?= =?utf-8?B?TE0zUHVIQVlMdTZsR1hKY3pJNGlDajVudUM1L3ZUWXd4Z3pJSFhhOHNIZDhN?= =?utf-8?B?ME11K0NoTWNxSWdab0FqSnRjcW9EWHg0bVd1Q25hWXlOUzZDMVFienE0Tk44?= =?utf-8?B?ZGhVK2FHcFhTNFJudER0cGFiU201VlZJVjA0M3U1TVBqcHQ2dThaNGUrdWlk?= =?utf-8?B?UXJLZHFTS3ZJS0NlN29ZdkxiUWxMZmFneTNmSi9DSlJRRjFjUzlTMG9uZTBR?= =?utf-8?B?TVh3b0hEL2l1Vlk4YzNVZHRxZWJyVDZUOVZON055dUxHK3gxaGlTRVJlbHhn?= =?utf-8?B?VTlhbXdYd0xNbWlaY0xCZ0plMXFveEJFamRJT2VRdHNhY05kbjVCKzhRN2Nv?= =?utf-8?B?TlJ1MmZIeUFmSjdLUC8xL0NDZnYxS1hrTWZjVlN3MThWN0UrclVXa3JhdDdI?= =?utf-8?B?dnQxdVpYSU55WXN6OHY0MmJnVnVacjY2QWRnRzZma3Jic05HQm9Gb2p1dDhz?= =?utf-8?B?NHMyRklySmVoOVNVL2VvVlY5WFpxN1NscGZUZlNmL2psenNJeUdyNWpFQWJK?= =?utf-8?B?RkpmL3oyY1ZMeDZidTVLZ0dialRLRlVnaENSYk10TytnR2JLVW5RamY4MCtz?= =?utf-8?B?MVhtby9OT3hNOTJWMVZXd0VnTWc4Qy9vNk5HL29zVDg3YS9iTndmZ0tlSHpk?= =?utf-8?B?YWloSDhGS28vUUtTU3hZZXZpa01pZHFNcWZKaVpGUWJLdTJ1bytOYnVHZ2JQ?= =?utf-8?B?RnBhSEQ0d0xxb3lSMzlBNVp4NzZaTjlRNkZkeUZPcDRTbC9nTEQ4ZDNsaFMr?= =?utf-8?B?QUdDSDdXRHFrTW1TRm5kNG9xVC90azNuMFMxSEhZeEtXelVoU01mdnhlbk9h?= =?utf-8?B?Q2xPZUJ0UnYvQlZoSjJhemJxZTFrd21uZzU5Vkl1NGhkR2VRNi9wbitOenRn?= =?utf-8?B?RFlrdHNnMkYwUjMrdHZuSGVLVG5jS2NxVGplcHpPbWtkMjgvZCt3bFVZQVFL?= =?utf-8?B?NnZ5Z00zU2F4YVorVndldE1WTFd6anUxbHh1aS9MYm5kMXhpclVhdWJRSXZL?= =?utf-8?B?bzlRSkJsd2djSnlwd1U1QkhlOU5HMzYzN2owdU5EdEZINHdrU2g3YzM5SHhJ?= =?utf-8?B?SWpLV1dwTjhMRHR4cFp3cTFnbWZLNDdEeXNaY1FGOS9jM1lTNWhUdHZ1T3hT?= =?utf-8?B?OERxOVRCNVQvYWVWV3gwVUVrVFBKZUo2czU2SzVKU1hKb0RUMERiUlFzaU9B?= =?utf-8?B?WkJtYnB4SHJSM1NJeEhvK3gzVFhlaHJXelZxSEFDUVRKejBKYUhibjFDTTdy?= =?utf-8?B?YWUxOUoyK1pKbnd3T28wUjNDS254S041SWo0aUdtVHhhdW5QaXFTekVSQXln?= =?utf-8?B?UlpraGU1YWJkTW9UaFRpbUZJQjI4QVQvdnpSOHdlUU83S3JoY0hRaXZQeWpT?= =?utf-8?B?RlFBQUNLK3cwcHoxcGZxUEI4Y3BtMWt0Y01jSjJ5Z1dtNUxwMnljSVFyaVJK?= =?utf-8?B?YWs4MURzSmdLYXR5Q1VBaUdJMUFaN29MbDlNQ3lzUHFwL212dGZYanVkOGJr?= =?utf-8?B?eUVGeTM4NGQ5ZWxEY211U3oxSHcwcGFrUDhpMk5TSnJzakJEcFBCVXU1V2k4?= =?utf-8?B?bWM3NGo1b2l6aE5VV1pHMFQzRzl5QmFMV0QvcjJDbzdhN2ltcDBLN2lQRjVw?= =?utf-8?B?T3ZDOGJicG1Lb3ZKNzFxRzZ6ZlhhMENRcDE5VUVwazl3TngwZk9qUVlJWjVy?= =?utf-8?B?dEVEakdKc0t2ZElyelVZcTd6MC9yUzg5eDR1K3E4SkVRaWg5TWlHQnZlbXRh?= =?utf-8?B?ZlF6YnVlSzBGOVBMRnJjL3huOHY2TDNtZXdJVTZ5VVIyYjFGYmtXUFNxa3Vj?= =?utf-8?B?MnlaQ3RzNjk5eWkxVDUvU05MdEdMUGtTWnZScGZJSWFQTGJxNUgyZ3Fzb3dw?= =?utf-8?B?dHRWeHY3Y2dXZmdrOWRnUVpvR05WR0J1OWRaaUE5ZkRnazh0Wm5Ec3NpYkZk?= =?utf-8?B?bGhKMWJoUjhEZVd3QzRFdGpJekM1dWtscnFDMkpXZUNOd09ObGJ0MDNpVEtI?= =?utf-8?Q?9CgvIFFSBvmzaoahUkenAnyixNKiswvlLewpzc1KB1G3v?= X-MS-Exchange-AntiSpam-MessageData-1: VJXrTtBIrOPMBIvJ7vlIfFO4zBGG8qHMbos= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33166ce8-73ef-4ea7-8036-08df2dbf6d7f X-MS-Exchange-CrossTenant-AuthSource: AM0PR08MB11804.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2026 09:00:31.0089 (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: Lz/7avxNZbVuVuFjNYRld4L+bRs5oLUBX/z4boWwJhMPFD6mHYKlhf4oerm8bClp5stWi43yGc7MRprba6UO+9zRywbCk1YWNidtIACnPuM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB7526 X-OZ-Fwd: true Cc: devel@openvz.org Subject: Re: [Devel] [PATCH hci-8.1 2/2] ovl: Keep creator VE in overlayfs superblock 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-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org On 9/25/26 19:58, Konstantin Khorenko wrote: >> We observed a crash in overlayfs when checkpointing a container >> with docker running inside: >> >> [ 2300.870181] BUG: kernel NULL pointer dereference, address: 0000000000000005 >> [ 2300.871537] #PF: supervisor read access in kernel mode >> [ 2300.872577] #PF: error_code(0x0000) - not-present page >> [ 2300.873595] PGD 800000010a18f067 P4D 800000010a18f067 PUD 10730c067 PMD 0 >> [ 2300.874900] Oops: Oops: 0000 [#1] SMP PTI >> [ 2300.875742] CPU: 1 UID: 0 PID: 5419 Comm: criu ve: 0 Kdump: loaded Not tainted 6.12.0-211.39.1.16.6.vz10.x86_64 #1 16.6 PREEMPT(voluntary) >> [ 2300.878057] Hardware name: Acronis OpenStack Compute/Virtuozzo, BIOS 1.16.1-1.vz9.2 04/01/2014 >> [ 2300.879684] RIP: 0010:ovl_get_index_name_fh+0x18/0x70 [overlay] >> [ 2300.880859] Code: ... >> [ 2300.884128] RSP: 0018:ffffd32582e0f7c0 EFLAGS: 00010246 >> [ 2300.885153] RAX: 0000000000000010 RBX: 0000000000000000 RCX: ffff8ba4497480a8 >> [ 2300.886480] RDX: ffff8ba45535dc00 RSI: 0000000000000dc0 RDI: 0000000000000000 >> [ 2300.887824] RBP: ffff8ba68f9daa80 R08: ffff8ba4497480a8 R09: 000000000000030e >> [ 2300.889139] R10: 0000000000000000 R11: ffff8ba44862d6d0 R12: ffffd32582e0f800 >> [ 2300.890498] R13: 0000000000000000 R14: ffff8ba497cb0110 R15: ffff8ba517548cc0 >> [ 2300.891838] FS: 00007f5a2f492880(0000) GS:ffff8bab9fc80000(0000) knlGS:0000000000000000 >> [ 2300.893376] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >> [ 2300.894476] CR2: 0000000000000005 CR3: 000000033403a005 CR4: 00000000003726f0 >> [ 2300.895807] Call Trace: >> [ 2300.896397] >> [ 2300.896938] ? show_trace_log_lvl+0x1b0/0x2f0 >> [ 2300.897854] ? show_trace_log_lvl+0x1b0/0x2f0 >> [ 2300.898748] ? ovl_create_index+0x82/0x260 [overlay] >> [ 2300.899766] ? __die_body.cold+0x8/0x12 >> [ 2300.900582] ? page_fault_oops+0x148/0x160 >> [ 2300.901562] ? exc_page_fault+0x7f/0x150 >> [ 2300.902406] ? asm_exc_page_fault+0x26/0x30 >> [ 2300.903298] ? ovl_get_index_name_fh+0x18/0x70 [overlay] >> [ 2300.904435] ovl_create_index+0x82/0x260 [overlay] >> [ 2300.905406] ovl_copy_up_workdir+0x30a/0x330 [overlay] >> [ 2300.906427] ovl_do_copy_up+0x10d/0x2e0 [overlay] >> [ 2300.907387] ovl_copy_up_one+0x456/0x720 [overlay] >> [ 2300.908376] ? xa_load+0x7b/0xb0 >> [ 2300.909090] ? _raw_spin_unlock+0xe/0x30 >> [ 2300.909913] ? list_lru_add+0x11b/0x160 >> [ 2300.910736] ovl_copy_up_flags+0x81/0x110 [overlay] >> [ 2300.911740] ovl_create_object+0x51/0x130 [overlay] >> [ 2300.912719] vfs_mkdir+0x194/0x250 >> [ 2300.913470] do_mkdirat+0x14c/0x180 >> [ 2300.914223] __x64_sys_mkdir+0x46/0x70 >> [ 2300.915019] do_syscall_64+0x7d/0x160 >> [ 2300.915798] ? do_sys_openat2+0x9c/0xe0 >> [ 2300.916672] ? syscall_exit_work+0xf3/0x120 >> [ 2300.917540] ? syscall_exit_to_user_mode+0x32/0x190 >> [ 2300.918518] ? do_syscall_64+0x89/0x160 >> [ 2300.919316] ? syscall_exit_work+0xf3/0x120 >> [ 2300.920181] ? syscall_exit_to_user_mode+0x32/0x190 >> [ 2300.921173] ? do_syscall_64+0x89/0x160 >> [ 2300.921991] ? exc_page_fault+0x7f/0x150 >> [ 2300.922814] entry_SYSCALL_64_after_hwframe+0x76/0x7e >> [ 2300.923823] RIP: 0033:0x7f5a2f8de3eb >> >> The root cause is VE namespace mismatch. Overlayfs was created >> inside CT, so ovl_fill_super stored in-container credentials >> to ofs->creator_cred. >> Those creds are later used in ovl_override_creds to temporarily >> swich creds and perform checks using them. >> >> One of these checks happened in ovl_get_origin_fh/ovl_can_decode_fh. >> On fs creation this check passed because we had container VE >> and container creds, so overlayfs thought that we support >> file handles (ovl_can_decode_fh call in ovl_make_workdir). >> >> When we tried to do something with the overlayfs from host VE, >> ve_capable check was performed with credentials from CT >> and with host VE. >> ovl_get_origin_fh returned unexpected NULL and all exploded. >> >> Store creator VE next to creator creds, so we can perform all >> ve_capable checks with the correct VE. >> >> https://virtuozzo.atlassian.net/browse/VSTOR-142405 >> >> Signed-off-by: Vladimir Riabchun >> >> diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c >> index 4388004a319d0..b7c06ae4beb4c 100644 >> --- a/fs/overlayfs/copy_up.c >> +++ b/fs/overlayfs/copy_up.c >> @@ -478,7 +478,7 @@ struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin) >> * so we can use the overlay.origin xattr to distignuish between a copy >> * up and a pure upper inode. >> */ >> - if (!ovl_can_decode_fh(origin->d_sb)) >> + if (!ovl_can_decode_fh(origin->d_sb, ofs)) >> return NULL; >> >> return ovl_encode_real_fh(ofs, d_inode(origin), false); >> diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c >> index efa2a072aa693..e33debf8b1ed8 100644 >> --- a/fs/overlayfs/namei.c >> +++ b/fs/overlayfs/namei.c >> @@ -166,7 +166,7 @@ struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh, >> struct dentry *real; >> int bytes; >> >> - if (!ve_capable(CAP_DAC_READ_SEARCH)) >> + if (!__ve_capable(ofs->creator_ve, CAP_DAC_READ_SEARCH)) >> return NULL; >> >> /* >> diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h >> index 8577c7884fb92..9c8dd2f9cac62 100644 >> --- a/fs/overlayfs/overlayfs.h >> +++ b/fs/overlayfs/overlayfs.h >> @@ -427,7 +427,7 @@ static inline const struct cred *ovl_creds(struct super_block *sb) >> return OVL_FS(sb)->creator_cred; >> } >> >> -int ovl_can_decode_fh(struct super_block *sb); >> +int ovl_can_decode_fh(struct super_block *sb, struct ovl_fs *ofs); >> struct dentry *ovl_indexdir(struct super_block *sb); >> bool ovl_index_all(struct super_block *sb); >> bool ovl_verify_lower(struct super_block *sb); >> diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h >> index ab78001635e7c..a6ad8b8de48c0 100644 >> --- a/fs/overlayfs/ovl_entry.h >> +++ b/fs/overlayfs/ovl_entry.h >> @@ -77,6 +77,7 @@ struct ovl_fs { >> struct ovl_config config; >> /* creds of process who forced instantiation of super block */ >> const struct cred *creator_cred; >> + struct ve_struct *creator_ve; >> bool tmpfile; >> bool noxattr; >> bool nofh; >> diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c >> index 32c58fcfe52f0..c047f1265b8ef 100644 >> --- a/fs/overlayfs/params.c >> +++ b/fs/overlayfs/params.c >> @@ -8,6 +8,7 @@ >> #include >> #include >> #include >> +#include >> #include "overlayfs.h" >> #include "params.h" >> >> @@ -761,6 +762,8 @@ void ovl_free_fs(struct ovl_fs *ofs) >> kfree(ofs->config.workdir); >> if (ofs->creator_cred) >> put_cred(ofs->creator_cred); >> + if (ofs->creator_ve) >> + put_ve(ofs->creator_ve); >> kfree(ofs); >> } >> >> diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c >> index fb47711c8fb9a..e87b6684ec70f 100644 >> --- a/fs/overlayfs/super.c >> +++ b/fs/overlayfs/super.c >> @@ -18,6 +18,7 @@ >> #include >> #include >> #include >> +#include >> #include "overlayfs.h" >> #include "params.h" >> >> @@ -393,7 +394,7 @@ static int ovl_lower_dir(const char *name, struct path *path, >> * The inodes index feature and NFS export need to encode and decode >> * file handles, so they require that all layers support them. >> */ >> - fh_type = ovl_can_decode_fh(path->dentry->d_sb); >> + fh_type = ovl_can_decode_fh(path->dentry->d_sb, ofs); >> if ((ofs->config.nfs_export || >> (ofs->config.index && ofs->config.upperdir)) && !fh_type) { >> ofs->config.index = false; >> @@ -757,7 +758,7 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs, >> } >> >> /* Check if upper/work fs supports file handles */ >> - fh_type = ovl_can_decode_fh(ofs->workdir->d_sb); >> + fh_type = ovl_can_decode_fh(ofs->workdir->d_sb, ofs); >> if (ofs->config.index && !fh_type) { >> ofs->config.index = false; >> pr_warn("upper fs does not support file handles, falling back to index=off.\n"); >> @@ -1328,6 +1329,8 @@ int ovl_fill_super(struct super_block *sb, struct fs_context *fc) >> >> sb->s_d_op = &ovl_dentry_operations; >> >> + ofs->creator_ve = get_ve(get_exec_env()); >> + > > get_ve() pins the ve_struct, but does not keep the VE running: on CT > stop ve_drop_context() sets ve->init_cred = NULL, so __ve_capable() > falls back to ve0.init_cred, and ns_capable(&init_user_ns, cap) with > the in-CT creator creds is false. The check flips after mount again, > permanently this time, and the same NULL deref in ovl_create_index() > is reachable whenever the sb outlives the VE (host-side bind mount, a > held fd, NFS export). > > After this series both inputs of the check are fixed at mount time > (creator_cred, creator_ve), so its result is a mount-time constant. > Why not compute ve_capable(CAP_DAC_READ_SEARCH) once in > ovl_fill_super() and store a bool in ovl_fs, next to the existing > nofh? That closes the stopped-VE window and makes patch 1, creator_ve > and the get_ve/put_ve pairing unnecessary. > > Draft patch instead of both in thise series: Sounds good. AI suggests also: diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c index 444aeeccb6daf..5a6160f8c18ed 100644 --- a/fs/overlayfs/export.c +++ b/fs/overlayfs/export.c @@ -802,6 +802,14 @@ static struct dentry *ovl_fh_to_dentry(struct super_block *sb, struct fid *fid, unsigned int flags = 0; int err; + /* + * Unlike lookup, this runs with the caller's creds and not under + * creator_cred, so ofs->fh_capable is not enough: the caller has to + * be allowed to decode file handles too. + */ + if (!ve_capable(CAP_DAC_READ_SEARCH)) + return ERR_PTR(-ESTALE); + fh = ovl_fid_to_fh(fid, len, fh_type); err = PTR_ERR(fh); if (IS_ERR(fh)) This path is not under overlay cred override so it should not fallback to fh_capable. AI comment: We didn't need a separate check, because the ve_capable() inside ovl_decode_real_fh() already covered ovl_fh_to_dentry(). Every export decode goes through it: ovl_fh_to_dentry() ovl_upper_fh_to_d() -> ovl_decode_real_fh() /* NULL -> NULL dentry -> ESTALE */ ovl_lower_fh_to_d() -> ovl_check_origin_fh() /* error -> returned at once */ -> ovl_decode_real_fh() That one check meant two different things depending on how it was reached: - Lookup and index paths (ovl_lookup(), ovl_verify_index(), ovl_index_upper()) run under ovl_override_creds(). There it checks the mounter, which is what we now freeze in fh_capable. - Export path (ovl_fh_to_dentry()) never overrides credentials. There the same line checks the caller of open_by_handle_at() or nfsd. > > diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h > --- a/fs/overlayfs/ovl_entry.h > +++ b/fs/overlayfs/ovl_entry.h > @@ -77,6 +77,8 @@ struct ovl_fs { > struct ovl_config config; > /* creds of process who forced instantiation of super block */ > const struct cred *creator_cred; > + /* ve_capable(CAP_DAC_READ_SEARCH) frozen at mount time */ > + bool fh_capable; > bool tmpfile; > bool noxattr; > bool nofh; > diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c > --- a/fs/overlayfs/super.c > +++ b/fs/overlayfs/super.c > @@ -393,7 +393,7 @@ static int ovl_lower_dir(const char *name, struct path *path, > * The inodes index feature and NFS export need to encode and decode > * file handles, so they require that all layers support them. > */ > - fh_type = ovl_can_decode_fh(path->dentry->d_sb); > + fh_type = ovl_can_decode_fh(path->dentry->d_sb, ofs); > if ((ofs->config.nfs_export || > (ofs->config.index && ofs->config.upperdir)) && !fh_type) { > ofs->config.index = false; > @@ -757,7 +757,7 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs, > } > > /* Check if upper/work fs supports file handles */ > - fh_type = ovl_can_decode_fh(ofs->workdir->d_sb); > + fh_type = ovl_can_decode_fh(ofs->workdir->d_sb, ofs); > if (ofs->config.index && !fh_type) { > ofs->config.index = false; > pr_warn("upper fs does not support file handles, falling back to index=off.\n"); > @@ -1328,6 +1328,8 @@ int ovl_fill_super(struct super_block *sb, struct fs_context *fc) > > sb->s_d_op = &ovl_dentry_operations; > > + ofs->fh_capable = ve_capable(CAP_DAC_READ_SEARCH); > + > err = -ENOMEM; > ofs->creator_cred = cred = prepare_creds(); > if (!cred) > diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c > --- a/fs/overlayfs/util.c > +++ b/fs/overlayfs/util.c > @@ -78,9 +78,9 @@ const struct cred *ovl_override_creds(struct super_block *sb) > * Return 1 (FILEID_INO32_GEN) if fs uses the default 32bit inode encoding. > * Return -1 if fs uses a non default encoding with unknown inode size. > */ > -int ovl_can_decode_fh(struct super_block *sb) > +int ovl_can_decode_fh(struct super_block *sb, struct ovl_fs *ofs) > { > - if (!ve_capable(CAP_DAC_READ_SEARCH)) > + if (!ofs->fh_capable) > return 0; > > if (!exportfs_can_decode_fh(sb->s_export_op)) > diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c > --- a/fs/overlayfs/namei.c > +++ b/fs/overlayfs/namei.c > @@ -166,7 +166,7 @@ struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh, > struct dentry *real; > int bytes; > > - if (!ve_capable(CAP_DAC_READ_SEARCH)) > + if (!ofs->fh_capable) > return NULL; > > /* > diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c > --- a/fs/overlayfs/copy_up.c > +++ b/fs/overlayfs/copy_up.c > @@ -478,7 +478,7 @@ struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin) > * so we can use the overlay.origin xattr to distignuish between a copy > * up and a pure upper inode. > */ > - if (!ovl_can_decode_fh(origin->d_sb)) > + if (!ovl_can_decode_fh(origin->d_sb, ofs)) > return NULL; > > return ovl_encode_real_fh(ofs, d_inode(origin), false); > diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h > --- a/fs/overlayfs/overlayfs.h > +++ b/fs/overlayfs/overlayfs.h > @@ -427,7 +427,7 @@ static inline const struct cred *ovl_creds(struct super_block *sb) > return OVL_FS(sb)->creator_cred; > } > > -int ovl_can_decode_fh(struct super_block *sb); > +int ovl_can_decode_fh(struct super_block *sb, struct ovl_fs *ofs); > struct dentry *ovl_indexdir(struct super_block *sb); > bool ovl_index_all(struct super_block *sb); > bool ovl_verify_lower(struct super_block *sb); > -- Best regards, Pavel Tikhomirov Senior Software Developer, Virtuozzo. _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel