From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from PA4PR08MB7620.eurprd08.prod.outlook.com (2603:10a6:102:261::8) by PAXPR08MB6942.eurprd08.prod.outlook.com with HTTPS; Wed, 16 Sep 2026 14:38:43 +0000 Received: from AM0P309CA0006.EURP309.PROD.OUTLOOK.COM (2603:10a6:20b:28f::13) by PA4PR08MB7620.eurprd08.prod.outlook.com (2603:10a6:102:261::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.8; Wed, 16 Sep 2026 14:38:37 +0000 Received: from AMS1EPF0000008F.eurprd05.prod.outlook.com (2603:10a6:20b:28f:cafe::af) by AM0P309CA0006.outlook.office365.com (2603:10a6:20b:28f::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.6 via Frontend Transport; Wed, 16 Sep 2026 14:38:37 +0000 Authentication-Results: spf=softfail (sender IP is 99.81.216.78) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org;compauth=pass reason=100 Received-SPF: SoftFail (protection.outlook.com: domain of transitioning openvz.org discourages use of 99.81.216.78 as permitted sender) Received: from nat.eu.perception-point.io (99.81.216.78) by AMS1EPF0000008F.mail.protection.outlook.com (10.167.242.86) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.7 via Frontend Transport; Wed, 16 Sep 2026 14:38:36 +0000 X-PERCEPTION-POINT-VERDICT: CLN X-PERCEPTION-POINT-SPF: X-PERCEPTION-POINT-SPAM: PASS X-PERCEPTION-POINT-SENDER-IP: 2a00:1450:4864:31::11 X-PP-Forefront-Antispam-Report: CIP:2a00:1450:4864:31::11;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm2-x11.google.com;PTR:mail-wm2-x11.google.com;CAT:NONE;SFS:(13230040)(82310400026)(6059299003)(2092899012)(3072899012)(12012899012)(43022699015)(5063699009)(10067099003)(19002099009)(5023799004)(57112099003)(55112099003)(22082099003)(18002099003)(16102099003);DIR:INB; Received: from DUZPR08CU001.outbound.protection.outlook.com (mail-duzpr08cu00100.outbound.protection.outlook.com [40.93.64.64]) by inbound-smtp.eu-west-1.amazonaws.com with SMTP id 57lrfk1lof8c0ha3jg3qf02c4f15suonk9ivbio1; Wed, 16 Sep 2026 14:38:28 +0000 (UTC) X-SES-Spam-Verdict: PASS X-SES-Virus-Verdict: PASS Received-SPF: softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.64.64 as permitted sender) client-ip=40.93.64.64; envelope-from=den@openvz.org; helo=DUZPR08CU001.outbound.protection.outlook.com; Authentication-Results-Original: amazonses.com; spf=softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.64.64 as permitted sender) client-ip=40.93.64.64; envelope-from=den@openvz.org; helo=DUZPR08CU001.outbound.protection.outlook.com; dkim=pass header.i=@openvz.org; dmarc=pass header.from=openvz.org; X-SES-RECEIPT: AEFBQUFBQUFBQUFFaDBucFVWVWlDYUhVUGJyWWNWTnhybWVvVk5ha1M2ZTc3NlhCNTZMcjdZalN1d0hSMGNPd001OUg0cHN6NDMzNFJodXpZNndoWlpmSkY0MzVzU1IrT254QWh6dU5zYVBYeVAzZ2JSUUEzUWxzcHVlcUpQei9jTHhzZG5JUXkxTkRDZW90TjRsVkRqU0RDNkp5MC9pcVJHMXl6bnArTDN6Y1ZHK0Naamx0R3lrcTRGdlUzYThtOGpoaFVuU2NUL2tEN2E5K25YQW9sR1BDWjVjRTFVNkptYzVYa0JpQ0xVSUo4VWpOSWprWkN4bVJ3TzY5WExxdmxuSldnWkVnMWx2VUxMRTRPanA5dUh1RC96Mm9yeXlvYWFCSnMvMXRBNG0vTWhMYjBSb0JyNGc9PQ== X-SES-DKIM-SIGNATURE: a=rsa-sha256; q=dns/txt; b=s3Fja77xOqukxPWFDJb+sAAMYWxwtFmUmHL7W5iiFVKK/hUDef4o1aDX4ShFuRpKxFWOOlej12YXNnber8kinkNtTXtbyT7bKDo+oUujDzUQs4cvHCXCUWGHgYRzYNliLuKG1kFtnQKg/euPRc7IJ/exJX7QY0pSltmNSsIosCY=; c=relaxed/simple; s=shh3fegwg5fppqsuzphvschd53n6ihuv; d=amazonses.com; t=1789569509; v=1; bh=FzX7ZE8gMHGM9faIHnkVBcK4VWrHEt03Agccv8L4DnA=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-Version:Content-Type:X-SES-RECEIPT; Received: from PAYP264CA0004.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:11e::9) by AM0PR08MB5377.eurprd08.prod.outlook.com (2603:10a6:208:181::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.9; Wed, 16 Sep 2026 14:38:24 +0000 Received: from ZR1PEPF0000E6B7.eurprd07.prod.outlook.com (2603:10a6:102:11e:cafe::84) by PAYP264CA0004.outlook.office365.com (2603:10a6:102:11e::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.11 via Frontend Transport; Wed, 16 Sep 2026 14:38:23 +0000 Authentication-Results-Original: spf=pass (sender IP is 2a00:1450:4864:31::11) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org;compauth=pass reason=100 Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:31::11 as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:31::11; helo=mail-wm2-x11.google.com; pr=C Received: from mail-wm2-x11.google.com (2a00:1450:4864:31::11) by ZR1PEPF0000E6B7.mail.protection.outlook.com (2603:10a6:918::146) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.7 via Frontend Transport; Wed, 16 Sep 2026 14:38:22 +0000 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49e721b5503so11310475e9.0 for ; Wed, 16 Sep 2026 07:38:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1789569501; x=1790174301; darn=virtuozzo.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Y2lF1XEjsonKYH9QLMkGE+ncZgNwfd8rTeSMtZhC/1w=; b=eV7OZc83YysPsd+OjmzYnS6krpPiMhIYm0Fdubta56OzLI6zABksX2wXx60Ab+sl3z sD5oFxJUHHDWwvcW/PSK0YWxEZet+ebOJpJ09Pca2VHvaPgGkS7rgrXGY8EUgTQU42UD 2JHycUxLjB5s1hcxsrXZamBu0+sVKDTIUb5mU/ELWD01IxHdwX9VuCA4sbR6Ym5N9/SK WeN8N2u4R6yCYH8WVa+opbZL6XptrxVpH15upIlTABH08lEv9xrgGvP/yni9fRgYd1v7 0DkfJfQAb2qveBKCFzgnh7Z42yXReV6NMXye5+UFtR56+MsserER6HOzkBmArmwmcHDO 9yUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789569501; x=1790174301; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Y2lF1XEjsonKYH9QLMkGE+ncZgNwfd8rTeSMtZhC/1w=; b=yifMF+pEPC9tsUTZNXSs1KsNQLYisCXtBJ6LWaYX4vrVxART4BjHRyX1psa3AY/Mtg T2GMamS8Q3Cs05P4AYN8n/IEVqNwlVAtoU3iOGwaPKiSsokYTOuX5EJZxHDPnHN4IO7B Z02bVGVGtiEehmXDGJfA6VTUGun9vGDAIc9FfmqK+GY+5EXjYLgVJdmlzWhw0pei1Ckj yhQechrf7UEHzjAOOKsB1biYmPYvu5ppj0jjZ+Ph0Quj90KZIRi+FCMETwzfvxxu0Fxm MNlZUL3UwCUTFkZcpdwGLvPFk9vL7jRJWQa7Tv/Y/cE0H1WAKQ7fVAW5q70X9rhplkKu 1b6Q== X-Gm-Message-State: AFuF++l7zh70voDcv51TUavfraAtswao1zzkuKbYU+uXu4ItAkvivrzB GqQYSh9bgApzFZde7mZPmQWsHtmpoHuXYdXeHtOTSGkUcrr/Yifv+FCQj7uVmgLliTuW1H32sJl j+Y+7CfU= X-Gm-Gg: AYBFou19MoOqgqgUPkcxCsfMWfggLsd+Txc1IYKvAjRtY7EmNS8dBG+RSdIsReUgo1B TGpcca5L2fPub9vXinJjBaDfAhMuvnRf/zM22/E//a3HfdmrRePL/wVo1j2/+X8IkRsdvvTeD4v aDP7fz1TSkUg8wKHGER8Nm7GE4kgQ/HZ+CbO25FiCZi0/05hSh6SbPjFN7sEMXr+VoxJRwOqpmN nNq0dkEqs4lQkhRwtHZhjezSVvW6pRsQOYGWCVhPZVPq4esSlEYEt39S9wSNjZt4bTUY5UMxXQj II4SdZ5eSZ51tnGFZEYvlk1tgDu4UuwIxQw4voTYdeFOk9vYoHNiAJGj67iXtVUAuzfzIu55ApO HayTBw7zv50mPm3m9/diMw7jAhqFO4/Kpv3E6JZM69Ve3al/EjVCIc9UgsmZXvQKr1xgkJavUVD zaQ8dgIuOUOK1ERqhBNyhGCtSxin+uHNTo4sKKk8NAoKEX9kaTx7Kgk1yzsSuxONBqM2j/uoZDF biM6B0= X-Received: by 2002:a05:600c:1f83:b0:49c:c96a:d36b with SMTP id 5b1f17b1804b1-49eb7306966mr33143285e9.12.1789569501480; Wed, 16 Sep 2026 07:38:21 -0700 (PDT) Return-Path: den@openvz.org Received: from athena.sw.ru ([2a06:5b06:b600:300:f56f:c51e:c53f:b1ce]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49e83aeae01sm87991275e9.6.2026.09.16.07.38.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 07:38:20 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.0 1/2] migration/cpr: lock the saved fds #VSTOR-145529 Date: Wed, 16 Sep 2026 16:38:15 +0200 Message-ID: <20260916143816.1712971-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260916143816.1712971-1-den@openvz.org> References: <20260916143816.1712971-1-den@openvz.org> Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 1 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:1 X-MS-TrafficTypeDiagnostic: ZR1PEPF0000E6B7:EE_|AM0PR08MB5377:EE_|AMS1EPF0000008F:EE_|PA4PR08MB7620:EE_|PAXPR08MB6942:EE_ X-MS-Office365-Filtering-Correlation-Id: a6f16588-066a-4a36-ced9-08df14003144 X-MS-Exchange-AtpMessageProperties: SA|SL X-PERCEPTION-POINT-CUSTOM: vzpp X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|82310400026|6059299003|2092899012|3072899012|12012899012|43022699015|5063699009|10067099003|19002099009|5023799004|57112099003|55112099003|22082099003|18002099003|16102099003; X-Microsoft-Antispam-Message-Info-Original: =?us-ascii?Q?Plb7gFx01HDvDdPAG+7zjy+VXlLfpM4RW7ggDCYL6iQUKWE7u1QU0unIDtic?= =?us-ascii?Q?mhuct4tDLcpaMsW9E4TpzWKxskND4KVbxYNsY5DXsj88AvT1eYM0ONnYB7ix?= =?us-ascii?Q?1ojxWyx1NiWO20xU1xmWb2LWxvJRvPD+jdJZXZbpT4XCH7mR1LTKuS5IUHWz?= =?us-ascii?Q?XsTs0GEsDN/wseqqdKVxh6qtuE1e1R1JWLHipk6toGN/ZT92s7jXt8z33h1y?= =?us-ascii?Q?Bghhr76XaYRruxTo5koUWyRbbRch08zjFEWapjPoDPepWptsteAloiQYsW2W?= =?us-ascii?Q?hgNTWN6G5qZUKrZQ3GZy+R/S7DQEnUjoMjcAiJajr120sHLTpALEcr86wkLb?= =?us-ascii?Q?gQ6QI/MwgYbN861s2Av+Mk6Dgqxlc1NcMZ7GgRnUd4TmkPOhKCHbMqTNNBxp?= =?us-ascii?Q?AWeV5hjsW4GYFiAQchRYtdRzwY/soZoBKmDXK1fWk05mgSEALl3ZnvjIXSRk?= =?us-ascii?Q?LAc2njHcXcQrghp0/R8ZTflHmKP9ctaSH6M1RtNiSgOEMpRp+KSIYjdlfV5D?= =?us-ascii?Q?GTR1MTtKGKn5XqIDcfNWB2c9AS9ICjnp5juBuVZ6HSKVhMowDk30yUiD//uK?= =?us-ascii?Q?x0b7wmKWsY68dx9PJARvJFCjvJpGF9T9k5J7IhAf9Bi+iu0o3EDJxjG/I2fN?= =?us-ascii?Q?HH5zNuOncGpkVz008NBWjaj/iU31L3LhRqw/wyDUetMjvyVxLVUFbEuPvBiz?= =?us-ascii?Q?1ohhb45izv5JYySO1TDnyuEsJHeUoONWsl5BfFi6Ifp7xvscEfbL4E0XK6GR?= =?us-ascii?Q?s0PmG/1RKBw0qzrvSVV7tYHf8CDWNlRszyVy2o18ul6rG9Q3MW6/9CHKFpbD?= =?us-ascii?Q?RASAQcA2eyMFyEk1KqW/jYP550Wz1FyPJF/nsU/o/VE+/O4HsCCSBugOLOr8?= =?us-ascii?Q?O5Sy+FEnmr68jr+VaOygPu0p+yyd0v/w0oAv56elycyH5japZRXTPN+d4juQ?= =?us-ascii?Q?RcttAO6mPsCtM/l2lcWF53alKctG+eRdAFvMlXf5fvMOJa2GjWCP+KGkzTmw?= =?us-ascii?Q?fLcFNd1+eFQLTCM55+6jjyCdOvGDIOtpKseAW7zyet43Vbw1k3ZFF0Kz9twa?= =?us-ascii?Q?xe0vyOCRfY23ZZSvAbtDNJIxaBD4z9tFBkyIi/TBbPahaLpcZi5jZk5848xD?= =?us-ascii?Q?yxa91swJP2glcrSDTYY/AGSEzqKgyQnIlZYnFA6+VoptvzwxpIUuhrW0wKg+?= =?us-ascii?Q?p28G156rXLKXM6eMQKWr7Mkd7/ZJZdxAnNH1dZQ80qA/aXjiEPxVAweqhMPQ?= =?us-ascii?Q?cp/2ICuWtc8xAvml3GAY0f03NGCOf1fG3Gq4QAzJAnUINwzQWsj2WWAq4pB7?= =?us-ascii?Q?8QKiwOcROpfTHE4WP9JvfKtqA9UGoD1dDfS1PyTmg/88dNuBRPI42cronnYw?= =?us-ascii?Q?vugYhXzm+L9fmZmZqAou6pgDQl9IBD770TGMH5hBZF8UHS78r2O8mbu8j8Mi?= =?us-ascii?Q?TpmGcYKRfAkAUGMZSizuv7A9hq81ucrFpj+MG5g9ejjKF8CQIjrIR/Qy1TPT?= =?us-ascii?Q?XwOumVf3B5l9wjumV8DyaLdkJONqB4w6fX99heYEgy7VpcBJ692AYOSUnMlX?= =?us-ascii?Q?YDISJOi6Cpf7AlWohWuZFzYDzM/pwqYen8KUZzANEBROX/EcuQKAN5wtIsS/?= =?us-ascii?Q?sfpgzlT/Js+9MU+BVoLpCPXqdY/irNU+YvAR8GBRxIcmiNoyapgqS9GB4/Ya?= =?us-ascii?Q?orN+oQMC0u3Wt1W7uiAXvJPZ1T3PLvw71oVzgky7uBpAYKhoSmZguruqh04A?= =?us-ascii?Q?AZOmw8VDC7/C8QW7rEW2Zzb1j50sSYYCWr45Ud4Y+rjD4FU1N8VsrBx3R48+?= =?us-ascii?Q?4QPvUBlcry1iE/3qUteyZqIQDz8zEbMeEGodJGMJZA5Wakom2PUcomPXxa9x?= =?us-ascii?Q?gXtggbOOa5Xv75GREQnUG3AviPKuSzvA3iAKpmxn4jMtTv2chiDgoYJQbUu+?= =?us-ascii?Q?IkjliusXOaoK8KdqFA+PHrV9iUkIjODeP6yePAdw6c0II9OJCvrkGzQTcrXf?= =?us-ascii?Q?yF0KXHjczvUB8TXM4mWeZtBiWNqWyPijd+n+IwgGyk8l4/7Q4mp8L6XDz9YN?= =?us-ascii?Q?blMZSL/pzj5eGTmajmyz2H5vZpqmC5orgqSfDOqgKz078SGwKK3gK8Rm8gQy?= =?us-ascii?Q?Djq9PkhfXs77kEF7WZJVPgBBMn8CgQrHhVdBVlbt+di9mYJOvQ7TAwgkfzKk?= =?us-ascii?Q?orgcu/EpDBzu3cJK?= X-Forefront-Antispam-Report-Untrusted: CIP:2a00:1450:4864:31::11;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm2-x11.google.com;PTR:mail-wm2-x11.google.com;CAT:NONE;SFS:(13230040)(82310400026)(6059299003)(2092899012)(3072899012)(12012899012)(43022699015)(5063699009)(10067099003)(19002099009)(5023799004)(57112099003)(55112099003)(22082099003)(18002099003)(16102099003);DIR:INB; X-Auto-Response-Suppress: DR, OOF, AutoReply X-Exchange-RoutingPolicyChecked: TV6+iPvIhga3qAlt0E8D/Bw43qOKf2wySfW5V4r8i+KIj6KMgkOPWxIMtnTB0CFnob9JQKjYGGpJC7xq84Rn8sIK7tlcr91osumUDW6lFHPrDqyH5NP//oO38OUbzbPicFMS62pOwHHMI1YmlG9wpgeYWgtZW0ncRfq2HZzArAJrOhRx6xYpgKutRlaeNpOUzH7ZuTSDG6YbXF1m5ktnTq3jzZKDphVKQ3QxBn7L2qv+oBkR8qU6G75c/fNBKJTjIFav7J8wQHMlVM7+wUmbayQq44+FNV2CFfGJZ6tl04dWpMjUBUhh2TMsFHSaQRkYQ4IKJyi7sgNnVgc/K5CtrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5377 X-MS-Exchange-Organization-ExpirationStartTime: 16 Sep 2026 14:38:36.9048 (UTC) X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000 X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit X-MS-Exchange-Organization-Network-Message-Id: a6f16588-066a-4a36-ced9-08df14003144 X-MS-Exchange-Organization-MessageDirectionality: Incoming X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS1EPF0000008F.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Exchange-Organization-AuthSource: AMS1EPF0000008F.eurprd05.prod.outlook.com X-MS-Exchange-Organization-AuthAs: Anonymous X-MS-Office365-Filtering-Correlation-Id-Prvs: a35bdc8b-9c7e-47fa-e943-08df14002883 X-MS-Exchange-Organization-SCL: -1 X-Microsoft-Antispam: BCL:0;ARA:13230040|3072899012|12012899012|43022699015|6059299003|35042699022|2092899012|82310400026|5133699003|5023799004|5063699009|19002099009|55112099003|22082099003|57112099003|16102099003|18003699003|10067099003; X-Forefront-Antispam-Report: CIP:99.81.216.78;CTRY:IE;LANG:en;SCL:-1;SRV:;IPV:CAL;SFV:SKN;H:nat.eu.perception-point.io;PTR:nat2.eu.perception-point.io;CAT:NONE;SFS:(13230040)(3072899012)(12012899012)(43022699015)(6059299003)(35042699022)(2092899012)(82310400026)(5133699003)(5023799004)(5063699009)(19002099009)(55112099003)(22082099003)(57112099003)(16102099003)(18003699003)(10067099003);DIR:INB; X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2026 14:38:36.4324 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a6f16588-066a-4a36-ced9-08df14003144 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: AMS1EPF0000008F.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB7620 X-MS-Exchange-Transport-EndToEndLatency: 00:00:06.8436257 X-MS-Exchange-Processed-By-BccFoldering: 15.21.0451.004 Content-Type: text/plain X-Microsoft-Antispam-Mailbox-Delivery: ucf:0;jmr:0;auth:0;dest:I;ENG:(910005)(944506478)(944626604)(920097)(930201)(20251009189)(140003); X-Microsoft-Antispam-Message-Info: =?iso-8859-1?Q?at9ionfuJD8MfkzCumN8W4TKYOhGankxvqh5447haOf2Zi/jfKln9lnMBK?= =?iso-8859-1?Q?MFKo7U3fSO8XxpVE21AIuO/s7WAkG1w5OppyFLtrtZS3YFo04MEOFGoQjB?= =?iso-8859-1?Q?mtJXauObkV0DbWfabGyx9vniRYZOANxrm7li4xXe5G5re9FENj+qmQvtXV?= =?iso-8859-1?Q?EOtH41YKoHB66Nxvkotf6LPRK4JmF7eWdq38pn5pmm3jdeiFWW2ffdngGN?= =?iso-8859-1?Q?e5C5ADJt7hC8N7Pc7WJaADYVUIC8Ra8Y14d/wymwyh0j7JInczQO+9X8zt?= =?iso-8859-1?Q?zoh9o/QV+gwtxYYRR6+AuXRHsqs/cnakck+6X+bTCswxvMNSihtp0OEyD+?= =?iso-8859-1?Q?QflncGplR0i2jK60W9C1py+hr5ToxXyk3aGELH2yaOynbUWFxWWwbPhJdd?= =?iso-8859-1?Q?qPCy0feK3y8m3UjycsUdZ4s/N8N2uF2yBextDnZHaeSv8vXWQCoU/l19NN?= =?iso-8859-1?Q?LWJnd3ALoc7BwHVKk/LSZ0DPIm0LiTdjLdWrhoCDt1wtyiUJeUyA55Acp9?= =?iso-8859-1?Q?4O6QrnxwGHKBCn2pALZjIp3IRkCgJ3+T1/ZTZeU3M1tsde0YkbyeivCShz?= =?iso-8859-1?Q?Zc5ewUp5cEkZnbqYHYcKoOqE/nD86sy1+GlfSCy95IfWC0UH3zOJeBHdq7?= =?iso-8859-1?Q?oAJ4egdQfZAn1EZxeUvi8w30RCniu1pEovQNPqqrLP+J1vnxg+u/H6zfVk?= =?iso-8859-1?Q?rwjKOIjUZOnOfBt1HXxkLzpg2ctLphBPytv6zj5Wa4iUXFNPaoYGc415f8?= =?iso-8859-1?Q?9iGztRZfTEznt0jrJTWGk2Lvnw0yHb7Mu/Pgqd3zY37d5ED5MCUFXl0QLN?= =?iso-8859-1?Q?A/I4MhbLyK+BDcL5/GyKV9huyhJlci4BGwZpptr+A+/cM1OraUOPvS1d/W?= =?iso-8859-1?Q?hg8BWY3rzXfa/tHIYSOwahVlsYsEcHTXxIrIIRm2/ZoLaDt819+vG915Cp?= =?iso-8859-1?Q?MKFdu0GwtTr2/uRSLvBROH+0I+OROvONsp74SiUHoVPtVAcW+scnqG2s4c?= =?iso-8859-1?Q?artPy6RzBTBA5xyuIkFgG8HSE2RC3H7OFeHbaf1Mtr6LCgzC8KBvihrFDg?= =?iso-8859-1?Q?nqustvPors6MBoloys379yU20sZ5ZfvTxk1lP3Ig5yXF94FXwPnbQ9fZLA?= =?iso-8859-1?Q?g9yRK3aRFmEaTpnXzYwCxrdjBX1SFvHWEH4YVWsYnBytcly88npbEW6Bk6?= =?iso-8859-1?Q?lgkStnaXG2LaPQRSL2CIOUb+otyYuep8NUoxaFLd2Lor8IE5gKHIxBBj3A?= =?iso-8859-1?Q?vsryXhzT0lbTotHdOp9FxPXyUKCSaqbti6eb/xLrZ2pStx0M93XadgO4NE?= =?iso-8859-1?Q?h1tQRD7SHx8rkU7rFNz7gsVN3ixJ9cujyrL0cSuGy9DisKyBjvpSzTulD4?= =?iso-8859-1?Q?56PVuQZza9syWk7sUzPXS2HHQC+B12tVDLqYFAJE4+zK467058YIPnx0OW?= =?iso-8859-1?Q?i5Is7klgc4qb4NwzA0tXLbPze9UXB+49i/Me5aLs/8+YTuxWg80KsSk6zR?= =?iso-8859-1?Q?i5J+H76+iowL4iWz8rwdw6zRInYGCPwWyRWOZJsQM+DdvTyEPCA4V493Og?= =?iso-8859-1?Q?krTFIs9rrwUzVcL6JE1mQqDyUf/EAkmNU5yVihiQYsrD2Pw+MKQy533Ywa?= =?iso-8859-1?Q?DkTaM4QvIUKBxaJauIUr/VyX3xcr7/ha7GZRHhrn8qdgkSj0kdKb9WhLIm?= =?iso-8859-1?Q?Y4LPc43ScoEU0quowuPRS1nrLBDKyOBMYLfpcgUWHUC9ssOBfNrWn8Y48H?= =?iso-8859-1?Q?vttU/bE4616CpIyVJsAtFS0HgSB7mPtgrz67GgGKfzcxyfR8sm/Q4vUQPY?= =?iso-8859-1?Q?cNHHCt38SxUvXFAvm2CoiGy1yaouQSS/JGJ8EOwRHGb+oI/fCPLMyVrqo4?= =?iso-8859-1?Q?ESPZy8BaXdQm0Yf5vwF/c84XvVlkBKc4Wk23N6mOdFiVXiwgSv822X/9lu?= =?iso-8859-1?Q?ozmrtmZBxj2XcGAsWpgu5KT8upjh+tpvX/Rq8cok0KZdZkWhvLurQxNtv4?= =?iso-8859-1?Q?c6kD07wBVlM2JbjhiE4Qlv2nBz4GJBDuIXVof3ZFNh7Q5WBAM1whLEwMbb?= =?iso-8859-1?Q?nCIGWHyyZpQtWDLAxaNNI0SX+Tc0f/x/mFtLY64XJfH7ZqakAC47AutFJn?= =?iso-8859-1?Q?HndYURWfgAI3aX6s2xQUcMwGYBFqX+L+gJEFMg+2y3Hla0H/knpyHicRz2?= =?iso-8859-1?Q?+3aompBsXgx/QVxYOuqBg0oyFBdQjEI6qpzxMiD4Gu3QmXQrWnBvYguNmo?= =?iso-8859-1?Q?aoaK3/5tIN/4739UdBsO/XZzmtDTmHtN67uNAnUfGcWILvVUD0mjUJSha/?= =?iso-8859-1?Q?FVbQmUBQ2euqeBTpanZIzs7qHhXxokcwvsNvr31qALxzdTvW4moQX+ab0/?= =?iso-8859-1?Q?nJO1mtG5SHCuGoCpOSVxBhcQw3bwxIkcQAhQyU8cJW+Mf1JG/WQhLZpWCl?= =?iso-8859-1?Q?Xj+4DLR+rOmxzR/nsFEhpTWiB3w56Tusbar8s5rSDsrevLjP9WpFUfGJx9?= =?iso-8859-1?Q?KOG7NOjpuBR0WK7lmDx+FzvOZ8Z0HTptTo9TUpkiIGeiCcu5sZktB+QkaL?= =?iso-8859-1?Q?hlb2hLfgemWEUPZjz8nCcouJId6aKb97WLpFto0pYwv7M08nvoNsA5l+tO?= =?iso-8859-1?Q?cP1YSsCX1YPnhf4rs3tbUWmNJWSDOaBPCFOtJRKCnspy1HZI9J7yWk/RQ0?= =?iso-8859-1?Q?gFA8v5puD1iqLsDX9tD1h3GcV9TpY8e/irh1qxnsfCTnuwjERP8=3D?= MIME-Version: 1.0 List-Id: From: Denis V. Lunev The cpr state is a process wide registry of the resources that have to survive an exec. Entries are added and dropped from realize and teardown paths all over the tree, and a caller has no way to tell which thread the next caller will run in. The state carries no serialization of its own. It is safe today only because its callers happen to hold the BQL, and that is a property of where those callers live rather than anything the interface promises or checks. A caller that is correct within its own subsystem can therefore break this one from a distance: two that overlap corrupt the registry, and the next lookup walks an entry that has already been freed. Give the state a lock of its own instead of relying on that. Entries move when a device is realized, when a resource is handed over, and when a migration starts, so none of this is on a hot path and an uncontended mutex costs nothing. Take the lock in every fd accessor and across the save and load walks. Holding it over the walk callbacks is safe because none of them comes back through this interface. State that is not reached through these accessors, such as the VFIO device list that hw/vfio manipulates directly, stays outside it. Signed-off-by: Denis V. Lunev --- migration/cpr.c | 60 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/migration/cpr.c b/migration/cpr.c index f218e6a66d6..78cf430e386 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -9,6 +9,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "qemu/lockable.h" #include "hw/vfio/vfio-device.h" #include "migration/cpr.h" #include "migration/misc.h" @@ -33,6 +34,14 @@ CprState cpr_state; +/* Callers are spread across the tree and need not share a thread. */ +static QemuMutex cpr_state_lock; + +static void __attribute__((constructor)) cpr_state_lock_init(void) +{ + qemu_mutex_init(&cpr_state_lock); +} + /****************************************************************************/ typedef struct CprFd { @@ -107,10 +116,22 @@ static CprFd *find_fd(CprFdList *head, const char *name, int id) return NULL; } -void cpr_delete_fd(const char *name, int id) +static int do_cpr_find_fd(const char *name, int id) { CprFd *elem = find_fd(&cpr_state.fds, name, id); - int fd = elem ? elem->fd : -1; + + return elem ? elem->fd : -1; +} + +void cpr_delete_fd(const char *name, int id) +{ + CprFd *elem; + int fd; + + QEMU_LOCK_GUARD(&cpr_state_lock); + + elem = find_fd(&cpr_state.fds, name, id); + fd = elem ? elem->fd : -1; if (elem) { QLIST_REMOVE(elem, next); @@ -125,6 +146,8 @@ void cpr_delete_fd_all(const char *name) { CprFd *elem, *next_elem; + QEMU_LOCK_GUARD(&cpr_state_lock); + QLIST_FOREACH_SAFE(elem, &cpr_state.fds, next, next_elem) { if (!strcmp(elem->name, name)) { QLIST_REMOVE(elem, next); @@ -136,18 +159,22 @@ void cpr_delete_fd_all(const char *name) int cpr_find_fd(const char *name, int id) { - CprFd *elem = find_fd(&cpr_state.fds, name, id); - int fd = elem ? elem->fd : -1; + int fd; + + QEMU_LOCK_GUARD(&cpr_state_lock); + fd = do_cpr_find_fd(name, id); trace_cpr_find_fd(name, id, fd); return fd; } void cpr_save_fd(const char *name, int id, int fd) { - CprFd *elem = find_fd(&cpr_state.fds, name, id); - int old_fd = elem ? elem->fd : -1; + int old_fd; + + QEMU_LOCK_GUARD(&cpr_state_lock); + old_fd = do_cpr_find_fd(name, id); if (old_fd < 0) { do_cpr_save_fd(name, id, fd); } else if (old_fd != fd) { @@ -161,12 +188,17 @@ void cpr_save_fd(const char *name, int id, int fd) int cpr_open_fd(const char *path, int flags, const char *name, int id, Error **errp) { - int fd = cpr_find_fd(name, id); + int fd; + + QEMU_LOCK_GUARD(&cpr_state_lock); + + fd = do_cpr_find_fd(name, id); + trace_cpr_find_fd(name, id, fd); if (fd < 0) { fd = qemu_open(path, flags, errp); if (fd >= 0) { - cpr_save_fd(name, id, fd); + do_cpr_save_fd(name, id, fd); } } return fd; @@ -176,6 +208,8 @@ bool cpr_walk_fd(cpr_walk_fd_cb cb) { CprFd *elem; + QEMU_LOCK_GUARD(&cpr_state_lock); + QLIST_FOREACH(elem, &cpr_state.fds, next) { g_assert(elem->fd >= 0); if (!cb(elem->fd)) { @@ -527,7 +561,9 @@ bool cpr_state_save(MigrationChannel *channel, Error **errp) qemu_put_be32(f, QEMU_CPR_FILE_MAGIC); qemu_put_be32(f, QEMU_CPR_FILE_VERSION); - ret = vmstate_save_state(f, &vmstate_cpr_state, &cpr_state, 0, errp); + WITH_QEMU_LOCK_GUARD(&cpr_state_lock) { + ret = vmstate_save_state(f, &vmstate_cpr_state, &cpr_state, 0, errp); + } if (ret) { qemu_fclose(f); return false; @@ -561,6 +597,8 @@ static void cpr_prune_closed_fds(void) { CprFd *elem, *next; + QEMU_LOCK_GUARD(&cpr_state_lock); + QLIST_FOREACH_SAFE(elem, &cpr_state.fds, next, next) { if (fcntl(elem->fd, F_GETFD) < 0 && errno == EBADF) { trace_cpr_prune_closed_fd(elem->name, elem->id, elem->fd); @@ -611,7 +649,9 @@ int cpr_state_load(MigrationChannel *channel, Error **errp) return -ENOTSUP; } - ret = vmstate_load_state(f, &vmstate_cpr_state, &cpr_state, 1, errp); + WITH_QEMU_LOCK_GUARD(&cpr_state_lock) { + ret = vmstate_load_state(f, &vmstate_cpr_state, &cpr_state, 1, errp); + } if (ret) { qemu_fclose(f); return ret; -- 2.53.0