From nobody Sat Jun 13 18:13:24 2026 Received: from mail-yw1-f171.google.com (mail-yw1-f171.google.com [209.85.128.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01A5A221DAE for ; Wed, 6 May 2026 04:32:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778041937; cv=none; b=aHAXntenXRE8lPx2xOUPPX6byaUkPwZi43y3hNqOHu3D/D8PMmftfOlJtC//60D25B/azkiGwcfM2JrUpdOO5NgblOHrDcoLRdBoL2Dnp+1YmVc6FDHsOtSzzxPZDBaU93FKYQyVdr4rlHiKnAKE+ZHpyRYhXP8JbYc6dEAZK6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778041937; c=relaxed/simple; bh=Ig3b6ApHyjKcgSwRW4zZUD79m8ad3QEyXLno+AsOJ08=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aIRnA+o8k+UOzNS4x2AhODSNlwXsjI81A80js3omo2km5fI+y7maLemhUaYsGw4IdJ3J8GyC7XPhyUqi7PZpQeogmC6mQbXA/MvKgQgD99zq/lVLaepk5zYZSR2E7g6jXOAET2STnyLaCXcrvQs+HF9IHPU16sEFuRztld0e2Nk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=Sqs78pZY; arc=none smtp.client-ip=209.85.128.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="Sqs78pZY" Received: by mail-yw1-f171.google.com with SMTP id 00721157ae682-7bb0d18c7f9so59001657b3.0 for ; Tue, 05 May 2026 21:32:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1778041935; x=1778646735; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=FySBmUFQUiatNJVHzTI9ybaQ2WEfq3D0Yr8fH3Kbiuo=; b=Sqs78pZYDy8m5EXRYdOecJkAnlXaKxIFkrJ6ZKfwu43ZcFePtLWJtGdFbY8HVOV99y UfqehEBJp9u6tDFimY+8JDfFJUSpIdrXU6vfyC/n5PpF6QoEtk0xIm1QkH8Rz7Q/hklz 5T40F0eoAie5/qlJk8TlTh38iKsjJyujXwSILB0F3NYWwvNkSmdqrPAhdiT6oi/JTTAq c6U/dPK2Ch95z2mvc4wRgk13QCV9A0slCr6cEisHIvOCxkIJq1TlFThaXZVy1a1kGzCB eLNf87CbmDt6DypFdFAm7E+RkdBSwSyWMQTLIQjPGKoGi4eFsjvhj8ofO90pqVfOII2v 6a2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778041935; x=1778646735; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=FySBmUFQUiatNJVHzTI9ybaQ2WEfq3D0Yr8fH3Kbiuo=; b=QnoWGxvUKmDxCZ82xmtXj2GTAHo5no1FOg0FaYJ7lbpNYx2hpFHNueo04QU+ZGJO0k IB3mK+Nh1hrm3wEykgj0KnhRTQVCaWgwCXBQFp+1E30VF6WfZUwVI9yW5/VqT/F3Nnh5 jVpsz7nxaTW1v5yWh0F+ZCzB91/7r9wJatl+1QGxTORs24wgU+0ZST05YrgQhbj8oCIu FnTT+7AeY3ONj9VB1BmpBgDUBtEAmZkd8EpQPYmSoHbDzN20fXpNnoOWMZ5TOaQbxc3v C4t8cZngJ9ZAGlw/1DuzzzcaR1ZcpvQWVbMNoXaLWlI68KRhL6TXADNXL1d+lQCVO1Es XscA== X-Forwarded-Encrypted: i=1; AFNElJ9vylp2MOUb+8XDZFNz6ib/rZlgrrVp2+0DjdvowYq7OBCB9UYuFpqcdggF8gAVng1x+NcV66QusXHcc2M=@vger.kernel.org X-Gm-Message-State: AOJu0YxzsES0Qrw1xiWd99nREBlfm0fgHmWEk7Nt/CP/sIe3uJ0wC9Ab GGcM7qJLjqd7r4wO7beY3wGXZtKIS6usKNxdSSg/R/qQs+gcj20I4mryql/OjXPGb1E= X-Gm-Gg: AeBDieselWsTN/Xh07qeV2XZXlq6j1PmhcrXbf98u045Aq3FxJ1QxfgxK9WXB40rBVD Ll+fXKDYx8oWzJJoPtj6TGKi0wEG9YDnVI4YxCkylGoQ1vfu7JlzDCT09VeMFl3Ka9uiOs/BWLX s5gkI9JgCBgvdg1mSWk1ufsJvOxKWxr+iZ5fORu09YO11+TR2TSVpElT3KXI7fguI+B4zghh60Q rYZJIu/R3ZAakOIPiz0891G/Sedkgp1qsENmU2Q7+wPOIOl0WtyZdFwLB16C+unl6O4Nue6oBaR MtpDGYPav3XMezTqKM4Yg1sWAZT9s4eHCToGI8CZmpvOdKdq6At5sxXvJIPnY1RQKHt5OZdhTwC dlkN/L90bXwRQsjvcq8Vi/6yxY2xgA+MG+65iHZgYmKbOl1kUn2jBvm8LYrCT06hNZc+Rv38sw8 oyj90oEv2gBB56qO+VdIM1UCYEmKz7ovqMg5a3VcRXjjuZIFWXWUBJgM4zThGpLE0uv4Ifwoyjf LW+jhlERG0Htckn32dM/NKibaifOkUdRjKqtqXtufR3e+xbcJyjQAE8ycHT X-Received: by 2002:a05:690c:4481:b0:7bd:7039:f2e8 with SMTP id 00721157ae682-7bdf5ece5c7mr23917107b3.42.1778041935058; Tue, 05 May 2026 21:32:15 -0700 (PDT) Received: from soleen.c.googlers.com.com (57.233.150.34.bc.googleusercontent.com. [34.150.233.57]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd66838851sm73436997b3.23.2026.05.05.21.32.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 21:32:14 -0700 (PDT) From: Pasha Tatashin To: rppt@kernel.org, sourabhjain@linux.ibm.com, jbouron@amazon.com, akpm@linux-foundation.org, bhe@redhat.com, linux-kernel@vger.kernel.org, dan.carpenter@linaro.org, liaoyuanhong@vivo.com, pasha.tatashin@soleen.com, rafael.j.wysocki@intel.com, piliu@redhat.com, kexec@lists.infradead.org, pratyush@kernel.org, graf@amazon.com, mario.limonciello@amd.com Subject: [PATCH v1 1/3] liveupdate: skip serialization for context-preserving kexec Date: Wed, 6 May 2026 00:32:02 -0400 Message-ID: <20260506043200.2025677-6-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog In-Reply-To: <20260506043200.2025677-5-pasha.tatashin@soleen.com> References: <20260506043200.2025677-5-pasha.tatashin@soleen.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1054; i=pasha.tatashin@soleen.com; h=from:subject; bh=Ig3b6ApHyjKcgSwRW4zZUD79m8ad3QEyXLno+AsOJ08=; b=owEBbQKS/ZANAwAKAbt3KEzbc3reAcsmYgBp+sRCF1pdq1gFDZPkEGvvAeskFeVYoUE/Q4WrZ PyB3kKaDfuJAjMEAAEKAB0WIQRBMaqT7LRvGvB/NmK7dyhM23N63gUCafrEQgAKCRC7dyhM23N6 3ubeD/9Hz+RdPTeGlmA9KZ49hnSWoEtrawYss52P4vEvfyFRCX8MPLb2eHGK39xuKeEmGcGRWUT siS4z4LJhIKxkgUKCitBE/XgtOvmPvIVXM7w6SAiSpcKEdtckzhgBtRN+7glKK3epqQeRjRH0j7 HQr59wG8dDI3ycZckRAtARme0YBgtJ/eXvf+j/LfIub7iQ81S/hQlM+Y/BgqTQnWKTHXOmt0T/8 9L3Uki7/38VyPjqWozWKcmwdN3b2ycdqgLj8tP4XSPT8b9pnAKT+E2ksQdVidGuZgNInSwU3lsI Ya9bPeKPuM7Y4/3gwbpOuORfmmYDMEbO0bI/vwgRH2duMTIpn6N2nA/BMSM4OMPKNuZAFjPjn8t 4P4+cgLF7Djwq1nr6XCgqf0CQXBreSYzLnRtrmcbA3ze9b1ZpW8veLgNicP6RWsZzdJ77UO7rUk VkjcEaKSa9e6dsNtP1iYipLYjn24I0jdhjkzKXKCYfqXIOQ77Aa7BzuoehLP81WBzy8eDkQhYcx 7wNn39kFLKsXNvdz01i/KqZwfYn5nLT4hAAoEo8mc1EnVaMewPNhm48WZpyRw+etcJbIjqDGNDc b8KpFMtq6X3o9ffSyfoqqQ7r9MaDeYXA/2Dxg/KpckFNOkdwpF6JovK4Sxlkt5ZYdnOwclebK6n yM3XZc7k9veuBgw== X-Developer-Key: i=pasha.tatashin@soleen.com; a=openpgp; fpr=CAAAB722DD22A081F0D49F35633A6A993D43B569 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A preserve_context kexec returns to the current kernel, which is unrelated to live update where the state is passed to the next kernel. Skip liveupdate_reboot() in this case to avoid serialization and prevent sessions from being left in a frozen state upon return. Fixes: db8bed8082dc ("kexec: call liveupdate_reboot() before kexec") Reported-by: Oskar Gerlicz Kowalczuk Signed-off-by: Pasha Tatashin Reviewed-by: Pratyush Yadav (Google) --- kernel/kexec_core.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c index a43d2da0fe3e..dc770b9a6d05 100644 --- a/kernel/kexec_core.c +++ b/kernel/kexec_core.c @@ -1146,9 +1146,11 @@ int kernel_kexec(void) goto Unlock; } =20 - error =3D liveupdate_reboot(); - if (error) - goto Unlock; + if (!kexec_image->preserve_context) { + error =3D liveupdate_reboot(); + if (error) + goto Unlock; + } =20 #ifdef CONFIG_KEXEC_JUMP if (kexec_image->preserve_context) { --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 18:13:24 2026 Received: from mail-yx1-f44.google.com (mail-yx1-f44.google.com [74.125.224.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C3DA2ED154 for ; Wed, 6 May 2026 04:32:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778041938; cv=none; b=jWHWoXMWrUY55fSIJ4bTBqzhWopwqHrECPUPulb9RBwnQnU3mvspPf6kawBvsAnxWg62FsE1xhWZyV4lEhIbDMCCLKXHGdCqGox1liQeFE7vZ3q/g9+H70hPV8jEZDTnd6I+4wdiws+9LPyxIuXxZVZmYGtvfLV8Gp49DUDlofg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778041938; c=relaxed/simple; bh=l0gSXiU5M1hfOsQ+wzvUx7Ms+ibod+xggU7I0Nuz44Q=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SCS/v8S5hga4AbUp518ZBIv4d5gdR0vDsWBU7diNbYyzYOBpfp1E4XGIxb8DF9dMqE4Pxn0m1YTsocuBuB7ltXOIfoLVlPvghSzUMWXOk9aSovYEbTXqJyljW6VG1QN4GHOKQKY+lof8pGRSitK5R3YbG8HoYeLiJ7jfpZnjff4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=jJKwSA2H; arc=none smtp.client-ip=74.125.224.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="jJKwSA2H" Received: by mail-yx1-f44.google.com with SMTP id 956f58d0204a3-65c305f381eso5037745d50.3 for ; Tue, 05 May 2026 21:32:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1778041936; x=1778646736; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=mX4Zs/joSWAsH/8RYZkV3cPKu95fU/AtYiaXzPcWqwY=; b=jJKwSA2H1sGrvpw1fDLW2KHVuX3CEiA4L4cVI8f5FV3GnETiKwR8KVXFCFIZlx3Hom siLHwnvjZTst2TVjfIc7CL44qxr2yBjIt7x10TLsFA90oX+N7PT8fGVdcixK0WHAdRGs rCxoNBGzoJP1wFXrYKKu7ZuBCUz1VLYq0u5guCI2S+BxBU0M0TmXtci+CaltZmK1ZoE3 MfVOSV69dG1TN9klNhcdZE7r6JL3vF1F9YDtvBYeLIA5bkWOtCVJySYpA9lfyskfAQ9g RaqvKunPXMmr4nynzYGEr04b8Rwin6w51aJydpB2LNXYkGHg77qZf3z7u7Wxawzk0o4J 6K7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778041936; x=1778646736; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mX4Zs/joSWAsH/8RYZkV3cPKu95fU/AtYiaXzPcWqwY=; b=Hl7NPn5CtVvpTGpUqVIBSpDcRbguuVV43w9L6Fj9ZNq10p4qHR4rMsfVNGWrC4WIV1 hm2TQyj3qLUBtgV5wyYW3z/RwsBmxyLk2/4KWJlf3RPQmo667tRKCU8vCHvHmIxZVAa8 HyUbQJEGLGa7MyThajkSFng4eyhUruAnRrado06BmSoMKelhDJbZf+w/ofi5YucsH8pZ 0Hks7roE6oRUEArn+uM3S85TvMjwM4UzZEW9r8tuoNZTcp/OZG0qL0QtP7InfWymP2UW h/ccJPwUqhVqDFqZMPl//Th0JwpANNH9js5ERlfCgY4sYNJqvzdhl327BVd3eK4otwCY zGIA== X-Forwarded-Encrypted: i=1; AFNElJ+KdScpHyVlP+5B3qfTwG6vq78jFjwWkmTyDvm/4e6WC+JgVQi6ick2H+dhyu3JAg7Qc+UoDqH1OH1pQVA=@vger.kernel.org X-Gm-Message-State: AOJu0YwGl1CvS5U5mx3Koilb4vKQ3QIcvTIapHA4aKomUNf682/SMh+H 2vsP4GItePMqjy7udvs7RemJHpDI1G1wL9tE63a4ozXmMUf4cWQD9Fjkn8rMLa4GQ14= X-Gm-Gg: AeBDietRAaBGZCx5zyiAGsWiOPTnYBliFeNqaETmjzJdDv/jPkV77Mxca+NOzctGUNT hOoxl1qD6lTpSGqIUXTU4IHv6boO2XZf26IXdBXmKdM70k4ZE6BXQleijk96LdkaACuydgvpYvm PSpWt7EVqfsCe0mbNt/DQiCIwY/vZF9hPhXLiEQqtfi2qjRGzY6ZC0wuzMW/fjzEiLn8ZwXDVdi 6sT67Vk5exoPTYmHZR8MF7DnSpij1w/UnlLidod+cFzVajpYlTKd0j87Rx7LpJwM4o3UeX4Q7VK bj+YxAP5dxLPwF0OUyeUi8zcBK+wPguAkppygpmIZbuWrs2J4bRXQSCUr7xaNm2Z7Noc8Ld5iaS ET/VjS08UstGxwfQ3A8ms+ILkBZd6tzIgPXpqZOHMZ0UCZMgZi1zhcuYmefHzYaZH5Tp2CCUvSY UF7NF5tlWvy9haAEKEdQFkXF6wDLghhOdsr75O8EZkbABx8lvFkNFskgn9hd78YxYGkA8s+32bz R260MyPvlqZTEVAT2q+ihOvJ8zHLvq7ABsaq2RcvxIRdn0rXC54HpUNwvHw X-Received: by 2002:a05:690c:e3cd:b0:7b2:64f4:a2dc with SMTP id 00721157ae682-7bdf5d8bc3dmr22771077b3.9.1778041936127; Tue, 05 May 2026 21:32:16 -0700 (PDT) Received: from soleen.c.googlers.com.com (57.233.150.34.bc.googleusercontent.com. [34.150.233.57]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd66838851sm73436997b3.23.2026.05.05.21.32.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 21:32:15 -0700 (PDT) From: Pasha Tatashin To: rppt@kernel.org, sourabhjain@linux.ibm.com, jbouron@amazon.com, akpm@linux-foundation.org, bhe@redhat.com, linux-kernel@vger.kernel.org, dan.carpenter@linaro.org, liaoyuanhong@vivo.com, pasha.tatashin@soleen.com, rafael.j.wysocki@intel.com, piliu@redhat.com, kexec@lists.infradead.org, pratyush@kernel.org, graf@amazon.com, mario.limonciello@amd.com Subject: [PATCH v1 2/3] liveupdate: block outgoing session mutations during serialization Date: Wed, 6 May 2026 00:32:03 -0400 Message-ID: <20260506043200.2025677-7-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog In-Reply-To: <20260506043200.2025677-5-pasha.tatashin@soleen.com> References: <20260506043200.2025677-5-pasha.tatashin@soleen.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2595; i=pasha.tatashin@soleen.com; h=from:subject; bh=l0gSXiU5M1hfOsQ+wzvUx7Ms+ibod+xggU7I0Nuz44Q=; b=owEBbQKS/ZANAwAKAbt3KEzbc3reAcsmYgBp+sRE6odvPXHaskiJ46m8gh/j1aNvm2YvrE8io p2X+l73ryOJAjMEAAEKAB0WIQRBMaqT7LRvGvB/NmK7dyhM23N63gUCafrERAAKCRC7dyhM23N6 3iUvD/0ad8HdsH1gkdD8M/yqzD9ubhSoZa7QXOnVEdq4OleQzi+CTIuhX7FG1lMzS/EYicRJi4L KxJt821+vCsno4d2gS4BNqud2JlamG3+4EoyEbdOuNILun8+YTmKBktEzQs7fn3kgyZXiabCBJG K+Ke1tzJS+MFMjtg+VLemW1KWRNRvxifRwC6vuDWVVo4ZpWxPEZUuqqNc3T2GcsSa+qrljW8E/u exwk7B7hmmWo4g+9gwCBoMDLava30Gbvx3+3V9rLOTDzO+qoyNEnL1BIODbG+HrXmxfyXV4cGTl bvkCxzfNPZWP75O21pbW6txIxvO6u4AUTBrH7SLbwWtTCJ8Qk5nVEDvOkY+xw9w+Lh5LHNquxC/ OeTLGnEXELG3m4vBVIzPPY7GL9i4aFGf2UeDSMebuAY9mPbl+4ZfY3K2sHcMGeZaSoiQFFxLZEq Gez3J7t17wqyNQXbCM39xUsi9HC+5kpmSAiWilMp0RqMAVQNrbyv+g7h1JObDqGw05IkZnFUFku ciB80RowKhKlz021GKqb1c+GD4WY9YsjRJLU3WLl7nUcOPy5T71W6BiKzMsSSYysEh8aYgpGT1i 1WTKAcEK6ahYrB9DUFU0scdj0SfEAhZwmpjLFBTChZV0z8ySeRRmyKSw62LMDZK//EnlUzWxvgC riC+C93Wa2nXMBw== X-Developer-Key: i=pasha.tatashin@soleen.com; a=openpgp; fpr=CAAAB722DD22A081F0D49F35633A6A993D43B569 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce a 'rebooting' flag in the session header to ensure that once serialization has started, no new outgoing session mutations (creations or file preservations) can occur. Fixes: 0153094d03df ("liveupdate: luo_session: add sessions support") Reported-by: Oskar Gerlicz Kowalczuk Signed-off-by: Pasha Tatashin --- kernel/liveupdate/luo_session.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_sessio= n.c index a3327a28fc1f..996adc995514 100644 --- a/kernel/liveupdate/luo_session.c +++ b/kernel/liveupdate/luo_session.c @@ -84,6 +84,7 @@ * @header_ser: The header data of serialization array. * @ser: The serialized session data (an array of * `struct luo_session_ser`). + * @rebooting: Indicates that the session list is being serialized. * @active: Set to true when first initialized. If previous kernel did= not * send session data, active stays false for incoming. */ @@ -93,6 +94,7 @@ struct luo_session_header { struct rw_semaphore rwsem; struct luo_session_header_ser *header_ser; struct luo_session_ser *ser; + bool rebooting; bool active; }; =20 @@ -147,6 +149,9 @@ static int luo_session_insert(struct luo_session_header= *sh, =20 guard(rwsem_write)(&sh->rwsem); =20 + if (sh->rebooting) + return -EBUSY; + /* * For outgoing we should make sure there is room in serialization array * for new session. @@ -230,10 +235,15 @@ static int luo_session_release(struct inode *inodep, = struct file *filep) static int luo_session_preserve_fd(struct luo_session *session, struct luo_ucmd *ucmd) { + struct luo_session_header *sh =3D &luo_session_global.outgoing; struct liveupdate_session_preserve_fd *argp =3D ucmd->cmd; int err; =20 guard(mutex)(&session->mutex); + + if (READ_ONCE(sh->rebooting)) + return -EBUSY; + err =3D luo_preserve_file(&session->file_set, argp->token, argp->fd); if (err) return err; @@ -584,6 +594,8 @@ int luo_session_serialize(void) int err; =20 guard(rwsem_write)(&sh->rwsem); + + sh->rebooting =3D true; list_for_each_entry(session, &sh->list, list) { err =3D luo_session_freeze_one(session, &sh->ser[i]); if (err) @@ -598,6 +610,7 @@ int luo_session_serialize(void) return 0; =20 err_undo: + sh->rebooting =3D false; list_for_each_entry_continue_reverse(session, &sh->list, list) { i--; luo_session_unfreeze_one(session, &sh->ser[i]); --=20 2.54.0.545.g6539524ca2-goog From nobody Sat Jun 13 18:13:24 2026 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E8962F4A18 for ; Wed, 6 May 2026 04:32:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778041940; cv=none; b=dVIkIi+8AP9AAefa+jlt9KSslRESkVUC3Qv4geyERlqsbNPoCD4Sv3xcNWtgori6i0Yu/F5RupHGCGhZQDFQ1Z4slQg2FdljPcKzz38CBSYUA/CIHJIzo6fgPZ6LlPS3p3ZPxoYfLXUEHkhoIJ2gZA1K56/oV1B/vQ767JHWsVY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778041940; c=relaxed/simple; bh=m3ncrz+QJtlelk6UUVAGf06T0j6JaVYUB5b14TMx1hw=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=glZmTf4mGySJ2c5ACC/edVamRZes5uNsmKwsYP6LoZjYSvAqVm0/w1sJRtsCpIufDaVG8cX85nEnxwiSqgc2YjN+4pv1YVslSKvjMwAYNlSNZ7HZJMbyJKW2rwWIoG1Uhokc1Os88/HVfJgKHx9rtI7ZOBgJo5vioidP9Iq8010= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=KaQ48rke; arc=none smtp.client-ip=209.85.128.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="KaQ48rke" Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-7b37d84a6b3so62570577b3.2 for ; Tue, 05 May 2026 21:32:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1778041938; x=1778646738; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=AbOrubX+8qToIxR95hVSpUzrx6LpH8VO3i3UASQK7G8=; b=KaQ48rkeptFmJDjWTCh3GI4xn10Mv/F8kp72Yc2ICPsbvu16PZXSGCPg/wxEMfGPI+ vKoKBbRneESRh2SZeeJo2gXJSUm3bzQh523vNibQrLOjaB75t4L357XEeKOzDwf3UJK1 sfabz6BDn92ZXnXLmwQ3kGE/Qb2cpkVMdLBr0Miuz80Pg0EdaUL6qPUncNmpRmcMQHmL AeQ3ChdjdfSitFGo+cWaUzl9Zu8AuvvHTrg1tnwP6154K9PJ7DeC/K9OberbXlJIohfs ATnRkKDxlRTqZ0AIm5Glu5ZKsTBvqQt9Z+hjrfswFFPCLX1hRl4ah8f+cHyEEjIRFo2P o8LA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778041938; x=1778646738; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=AbOrubX+8qToIxR95hVSpUzrx6LpH8VO3i3UASQK7G8=; b=cOdyJBEOYXxnqyHHv/R5JaGk3g4P4C0+BAMYaV5Eeun7y65AzGDATGC9oH6I/2xmQK 8YULxdqRd3HIxrSOP8wJuAloPXm8JyW7OeXZDdtFwL8xUZNF2sbhD+kziT2iQsvV6g8D p7vTfTP+tAkDEWSg2HBuIK9HCwOCBFiYT2lGkpj+mczQrvvKja2HMPllLUBIjIdYCJws 2hqo8x+eJovW7YcORnJtiTPGyhQaGtgbgoIg1OCBnBGKBDgv7pJh53IuBoCD68J5vfxh hN+wHw5XtQctUIal6BzqKQYReGfH+rWcxT31hIvRrpMYd1MeoK988cyOGTA4qXzZEK8k SdTw== X-Forwarded-Encrypted: i=1; AFNElJ9WPxlqC+YQ07467JlrS8eepqKuCSwnMbCP4M3DwR9QTPqha2v3L8jbXlfAbQLix9Uk6lSDqzRBfx+XXT4=@vger.kernel.org X-Gm-Message-State: AOJu0YxZA66RrJv3B4PbMjqquIyxvF2WGmjkfVr5LIr/E/b9iW19+V+A nBSbO3foJZ+J1RiySJeXnzb9HeNIyWzwNR8yUsKcNkqP0icLqh7m4wQL/vrWS+KvLCU= X-Gm-Gg: AeBDieskTNNfvYp/Q4qBxD5oYb8KAyMwbgbY9cYFNdR02xqa+S5RgqshP/KxqZTXTIj AutMqoF1EtC3qMKqLqfu1fQXM+7igwkv0sQnWY+sjJT/BmOJ0JHklxjjRBh/7qCZcJ3CGqrwpbO i7+V9VOTL07hBNk2DbSgvAM2YLRJoU5RzI1gT+4aFPrPLpydpMicVL5ASm8yLocffnEYMEdr5vk bwHJ8tr5vbnUn4JfGOASVhyNH8XltagkODs/k+S38Mx74bgzYSxQ4SpyU0cw3caavDOR5AnR6fF 1t3PaiEOZsrwz0QF1T1XHjhRQetBIl98ELy5VWzCE1Vx1vy0aO+OqVgCh85DMjqWtydW5jRUfi0 z59H73xn17+lmuVc82k/+pvKOwfvdiQiRXsZ3rAYhvqOA3fdtPfVP6yMY4UL6YBBdO6G1TGccnY WGNqQgB4GUdivuBYZwYJ6UHXajfdtGWjMFwasoPa/TGI2BTyNp9D0BpwrSQgHJDurlMEwFxSomy DBYxEpCMyRALKECg68JhbNFB1tOvadTASeDZNBPWokdjq/jWW+aI6ShyYnK X-Received: by 2002:a05:690c:6a12:b0:7b8:3b51:c9b2 with SMTP id 00721157ae682-7bdf5e6576amr22480287b3.23.1778041938016; Tue, 05 May 2026 21:32:18 -0700 (PDT) Received: from soleen.c.googlers.com.com (57.233.150.34.bc.googleusercontent.com. [34.150.233.57]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd66838851sm73436997b3.23.2026.05.05.21.32.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 21:32:17 -0700 (PDT) From: Pasha Tatashin To: rppt@kernel.org, sourabhjain@linux.ibm.com, jbouron@amazon.com, akpm@linux-foundation.org, bhe@redhat.com, linux-kernel@vger.kernel.org, dan.carpenter@linaro.org, liaoyuanhong@vivo.com, pasha.tatashin@soleen.com, rafael.j.wysocki@intel.com, piliu@redhat.com, kexec@lists.infradead.org, pratyush@kernel.org, graf@amazon.com, mario.limonciello@amd.com Subject: [PATCH v1 3/3] liveupdate: pin sessions and handle inactive ones during serialization Date: Wed, 6 May 2026 00:32:04 -0400 Message-ID: <20260506043200.2025677-8-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog In-Reply-To: <20260506043200.2025677-5-pasha.tatashin@soleen.com> References: <20260506043200.2025677-5-pasha.tatashin@soleen.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5898; i=pasha.tatashin@soleen.com; h=from:subject; bh=m3ncrz+QJtlelk6UUVAGf06T0j6JaVYUB5b14TMx1hw=; b=owEBbQKS/ZANAwAKAbt3KEzbc3reAcsmYgBp+sRF0XIRouY2KDmLg449O5cM3kLqeGkw8kfjW d9DITOBCYCJAjMEAAEKAB0WIQRBMaqT7LRvGvB/NmK7dyhM23N63gUCafrERQAKCRC7dyhM23N6 3mzuD/94Mf2kTQ81mL2Y7UYTByYy1rabHB1QORO5v2SRSxV7L8LyhVboQ3dbpgHlRLRIaCRE/YC U3mJsu7KpQ8q+LwE73WXqxr5xBfw387770nG9NW2pKqFZ9bLckEEzwGwW9gNN3Cl+7P/xYX67Mw HtD4H3TtkDl2NhW0S8e2nwUtGLMBY0PtEdNda21qJOkIEEW8qJ5AMfMZPFnriN0dLtxJTqviKKi MXORfrcJyqqFKlaka8NIce2PMLEe2gO+ymMbe+mEQ1NSDdRhEmNDxO27j5sJUc0XRsU0z2rNdJs OL0Ly25pYYuoYbUIxB0FYhSItLNRZeKmndnQsYjVLgQEs9+v3P6u8R5GJYA9lCbPYqOo3vcmIvU EX6l7cz2MTcmN9q/mElKTCnHIK9FAb467sGvL77IPCKxYxggApbuRshNsItR3aE/19sIlTUkyF/ mNyId/wiMc6ih2BnTm4l755m3e/c3UsKWwuWljmBNUyWbOqvqa0hFR9d8M8tHXVH6qG2Vsg9Gez Gzl+wRkOStTWGEogA/p0dO8YXexDaD1R2P7Nenu2CPxKaZfIwpRfVWYhE9mDsFQSNDhclwGiewX DkleHYYUCoLSVAoFaTg76/Z4nu47UAM4D9wk/Yj4lctz2Aqyt6z4jvC4Om7ecg3nOuYQS1XaGel rNa3T+I8mSSyGhg== X-Developer-Key: i=pasha.tatashin@soleen.com; a=openpgp; fpr=CAAAB722DD22A081F0D49F35633A6A993D43B569 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" During the reboot() syscall, user processes are still running concurrently. Even though the system is actively serializing LUO sessions and will not return to userspace unless liveupdate_reboot() fails, it is still possible for a user process to close a preserved LUO session. This creates a race condition where a session could be destroyed while it is being serialized. To fix this, we must ensure that we only preserve sessions that are not closed at the time of serialization. Take a reference to the session's struct file for all outgoing sessions to pin them during this process. Handle inactive sessions (where get_file_active() fails) by cleaning them up and removing them from the outgoing list during the pinning phase. This ensures serialization can safely proceed with the remaining active sessions. Fixes: 0153094d03df ("liveupdate: luo_session: add sessions support") Reported-by: Oskar Gerlicz Kowalczuk Signed-off-by: Pasha Tatashin --- kernel/liveupdate/luo_internal.h | 1 + kernel/liveupdate/luo_session.c | 77 +++++++++++++++++++++++++++++--- 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/kernel/liveupdate/luo_internal.h b/kernel/liveupdate/luo_inter= nal.h index 875844d7a41d..1124bab6e0de 100644 --- a/kernel/liveupdate/luo_internal.h +++ b/kernel/liveupdate/luo_internal.h @@ -73,6 +73,7 @@ struct luo_session { struct luo_session_ser *ser; struct list_head list; bool retrieved; + struct file *file; struct luo_file_set file_set; struct mutex mutex; }; diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_sessio= n.c index 996adc995514..b344b64bbced 100644 --- a/kernel/liveupdate/luo_session.c +++ b/kernel/liveupdate/luo_session.c @@ -177,12 +177,27 @@ static int luo_session_insert(struct luo_session_head= er *sh, return 0; } =20 +static void __luo_session_remove(struct luo_session_header *sh, + struct luo_session *session) +{ + lockdep_assert_held_write(&sh->rwsem); + if (!list_empty(&session->list)) { + list_del_init(&session->list); + sh->count--; + } +} + +static void luo_session_unpreserve_files(struct luo_session *session) +{ + scoped_guard(mutex, &session->mutex) + luo_file_unpreserve_files(&session->file_set); +} + static void luo_session_remove(struct luo_session_header *sh, struct luo_session *session) { - guard(rwsem_write)(&sh->rwsem); - list_del(&session->list); - sh->count--; + scoped_guard(rwsem_write, &sh->rwsem) + __luo_session_remove(sh, session); } =20 static int luo_session_finish_one(struct luo_session *session) @@ -217,12 +232,13 @@ static int luo_session_release(struct inode *inodep, = struct file *filep) if (err) { pr_warn("Unable to finish session [%s] on release\n", session->name); + scoped_guard(mutex, &session->mutex) + session->file =3D NULL; return err; } sh =3D &luo_session_global.incoming; } else { - scoped_guard(mutex, &session->mutex) - luo_file_unpreserve_files(&session->file_set); + luo_session_unpreserve_files(session); sh =3D &luo_session_global.outgoing; } =20 @@ -380,16 +396,65 @@ static int luo_session_getfile(struct luo_session *se= ssion, struct file **filep) struct file *file; =20 lockdep_assert_held(&session->mutex); + + /* serialization may evict partially initialized session */ + if (list_empty(&session->list)) + return -EBUSY; + snprintf(name_buf, sizeof(name_buf), "[luo_session] %s", session->name); file =3D anon_inode_getfile(name_buf, &luo_session_fops, session, O_RDWR); if (IS_ERR(file)) return PTR_ERR(file); =20 + session->file =3D file; *filep =3D file; =20 return 0; } =20 +/** + * luo_session_get_all_outgoing - Pins all active outgoing sessions. + * + * This function iterates through all sessions in the outgoing list and + * attempts to pin their associated file descriptors. If a session's file + * is no longer active (refcount 0), the session is cleaned up and removed. + * + * Note: Successfully pinned files have their reference count increased. + * These references are intentionally leaked in the current kernel upon + * successful live update, as the system will transition to a new kernel + * image which will reclaim all memory. In case of failure, they are + * released in luo_session_put_all_outgoing(). + */ +static void luo_session_get_all_outgoing(void) +{ + struct luo_session_header *sh =3D &luo_session_global.outgoing; + struct luo_session *session, *tmp; + + lockdep_assert_held_write(&sh->rwsem); + list_for_each_entry_safe(session, tmp, &sh->list, list) { + guard(mutex)(&session->mutex); + if (!session->file) { + __luo_session_remove(sh, session); + } else if (!get_file_active(&session->file)) { + luo_session_unpreserve_files(session); + __luo_session_remove(sh, session); + } + } +} + +static void luo_session_put_all_outgoing(void) +{ + struct luo_session_header *sh =3D &luo_session_global.outgoing; + struct luo_session *session; + + lockdep_assert_held_write(&sh->rwsem); + list_for_each_entry(session, &sh->list, list) { + guard(mutex)(&session->mutex); + if (session->file) + fput(session->file); + } +} + int luo_session_create(const char *name, struct file **filep) { struct luo_session *session; @@ -596,6 +661,7 @@ int luo_session_serialize(void) guard(rwsem_write)(&sh->rwsem); =20 sh->rebooting =3D true; + luo_session_get_all_outgoing(); list_for_each_entry(session, &sh->list, list) { err =3D luo_session_freeze_one(session, &sh->ser[i]); if (err) @@ -616,6 +682,7 @@ int luo_session_serialize(void) luo_session_unfreeze_one(session, &sh->ser[i]); memset(sh->ser[i].name, 0, sizeof(sh->ser[i].name)); } + luo_session_put_all_outgoing(); =20 return err; } --=20 2.54.0.545.g6539524ca2-goog