From nobody Sat Feb 7 19:41:04 2026 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 E59EB253F13 for ; Tue, 7 Oct 2025 09:39:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759830000; cv=none; b=Z8u+r0rsW77FwgxIQ5fhnDDOLHtikiMg+PXSix93ymCmaQ9A4nBB00gxVQhnuOEQfPAp2wHF29oRtWAgotI9oZZHSbJodQNQbMi1AdJRJchGX1iKVHXmQ7x8aDvFJmxFuTNiovmWMcmwJ1nlWvj6tJNX50H+c97m+CvM/26DQiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759830000; c=relaxed/simple; bh=7N0Fpu+DW2FdFHlxjkDuD/i4liq/xoZUtf6juSwFCIM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=leqo47hcMyHh5JfnlxIn5KMluZ/KsRlEpstFgKeLk5rnOU5A5n5I8kOHScQyzVcvx7CuNbPmAN7KNz8b6eMoT7GZ+7VGbZuZ8MAZcgl+QbMZXwDhiGbQ+Aa3R0cJNa2W1zGE2jQpLGB2O3zoz6jI1Qm0XCa8cR4u4bWudYW7DMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=xCCUwfP4; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="xCCUwfP4" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-3f924ae2a89so4398958f8f.3 for ; Tue, 07 Oct 2025 02:39:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1759829997; x=1760434797; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=M7kCRzDJbTfZJ5zf17A4CJd5pPrUVwju9fZumSQIDms=; b=xCCUwfP46+xcrN++5jaQrrPRzrAKkBB0c31Pl/+QfgOU3uFldV1QB+AH67pk4vJSHf HEYwEEX3r7ocV3s0q7Ua+lBIfFpK7dWYNbXXhJNbGKwB3eFeiNGsBUd6ICyyrx1uhkCX KFAbVouVXQ9GomNb4bIZpUCWhh/jNbG4feARn6/R90fGVxlj7xFzJX1Cx/UEk4VKaq03 x8fChBlYuJ9Sy6IRPqV6mA77v8gL5WgxQ+t4APZL6vV9DLCxn3STAL4as/oBXqkrf7sP nnjkR1vUqPl5o3+fh6Aj/V6h4WnVohiRZ8atfFcg/ATHtrMx9g1bnTOAd5ADZwDHtQ+9 7rFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759829997; x=1760434797; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=M7kCRzDJbTfZJ5zf17A4CJd5pPrUVwju9fZumSQIDms=; b=ilzXnq6qlB9Eh0xlT69Q1ncWk9miDDw5VGgKRkXnsipfjMO4MhdGVCIN+yb/uZ+hSt 1uMalLgtBG0jZS5QxDPOGBdf5t0cBeJ4L06Rm7grlQcJ53wOCe3+yUx3ywmkPhASNKPk Z6/hCB3cei5N2efhz0lMb60vS9380o3I/IGtjrOaZAUU9eKZ1K6kIiWKNuESxJINA8XX tOPf1xglsgHxWLnvAkEzocmM2dsdwItUByXBp7Q8MHE6OTSnL28xi9A6MAagTR2/paz3 uigrNPu+1kDINimGSF1mrnUX+7N4+luVmFBU1vwywre1H2x08Vlg/c/d2UW30DQAslcR TujQ== X-Forwarded-Encrypted: i=1; AJvYcCXPvr/aEbC5da97b8CMDCgsqMV0o3fC/yC6YedJ0ifr0ik0CdUgHEQSnxpPQFoyMWt0dbWMOdk5uRFujeU=@vger.kernel.org X-Gm-Message-State: AOJu0YzKmJy2x1M6QSP8lwfcPUn4lz/w4j9lUy5HP3nCzFvEnxQ7nhgU 9FP7z8yf/xgnEL7WNhF5l0AhTjj2xEwH6bzpQ27M2kYENWD+qjLkpkvLFgjtGtwIPhnKOHRyFj8 6eqFY8rZB8uWQbp7kKw== X-Google-Smtp-Source: AGHT+IFO4CqjO5nPGPXwSJVJiJy5zlzTJ7nJsiT95xswmLvz1roDo3Osf2T/vNW+nd7+XUdjCceEPdKtOI9V2QA= X-Received: from wrbeb16.prod.google.com ([2002:a05:6000:2010:b0:3ec:d7e8:dbf8]) (user=aliceryhl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:310c:b0:425:7f10:e79b with SMTP id ffacd0b85a97d-4257f10eaa1mr3945969f8f.44.1759829997393; Tue, 07 Oct 2025 02:39:57 -0700 (PDT) Date: Tue, 07 Oct 2025 09:39:51 +0000 In-Reply-To: <20251007-binder-freeze-v2-0-5376bd64fb59@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251007-binder-freeze-v2-0-5376bd64fb59@google.com> X-Developer-Key: i=aliceryhl@google.com; a=openpgp; fpr=49F6C1FAA74960F43A5B86A1EE7A392FDE96209F X-Developer-Signature: v=1; a=openpgp-sha256; l=1531; i=aliceryhl@google.com; h=from:subject:message-id; bh=7N0Fpu+DW2FdFHlxjkDuD/i4liq/xoZUtf6juSwFCIM=; b=owEBbQKS/ZANAwAKAQRYvu5YxjlGAcsmYgBo5N/rMBrA3Wxl96WFxVfdz4qD2ZbsReDpeHo9x KTcMvZqgtyJAjMEAAEKAB0WIQSDkqKUTWQHCvFIvbIEWL7uWMY5RgUCaOTf6wAKCRAEWL7uWMY5 RmUYD/4hC4y1PzRnxvjz7/mkes20+s1JYIu5T20U0vpuEKUv4qWrMxF1X0yvEAFMU31hKjvFDx/ 5G/z4fHeSD/h47l9oGUuIK3pButPgcZvRnVdeGM4aZMWSvfSNU9ACUOqsT7n+FRGKY+N9l+/IMm 7nTb6Q69Ek4aio5kvEKWvptHgRydqEwG48xLk8I+9dmNPcbjKX6j5l2RseEl0fi9koWsD4D/E8B HTXTVI2I1MXkhepORIfLb8NOXe+9KCupuDQzr7Vhdnt3l3KQEujP8QcyfJ/aCxxYe4pmdDJ86fw cnC9BHyGtS2a4xpQF2rU3VWvH5nZRZN/tB/LkSm3f/AoZZ6kM5/xzhx+5qYz1+qlHB0Mlh5TeLb tEqotQoLtlt4ulA46wr/H4g5ugDF5KhnlLEGPhC/h87Y3/Eedrqq7Knl0DChHplU3lE2sPjSoxz hCqLb5YbdLCTNtWlWHBaEVOxvB1DRngkODub3TTTun4QTB79hJfVixHgopoth/9UkzoqkUIbQxy 7q6Yi6428zTBfpHa/RSdSCofqANZG3aty0/QDdQvv4dTroMhvzte1mzp3ocBjb/QzCpwdmWxWIs MbUWYCS9+v+fXbhJD/qUMF+YpLcx5gAO6z71PMJesAqGPjAq0b2zwceXtT44U03TmPW7rK/+w4t J6J8D6o+E4LoC5A== X-Mailer: b4 0.14.2 Message-ID: <20251007-binder-freeze-v2-1-5376bd64fb59@google.com> Subject: [PATCH v2 1/3] rust_binder: freeze_notif_done should resend if wrong state From: Alice Ryhl To: Greg Kroah-Hartman Cc: "=?utf-8?q?Arve_Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Alice Ryhl Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Consider the following scenario: 1. A freeze notification is delivered to thread 1. 2. The process becomes frozen or unfrozen. 3. The message for step 2 is delivered to thread 2 and ignored because there is already a pending notification from step 1. 4. Thread 1 acknowledges the notification from step 1. In this case, step 4 should ensure that the message ignored in step 3 is resent as it can now be delivered. Signed-off-by: Alice Ryhl Acked-by: Carlos Llamas --- drivers/android/binder/freeze.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/android/binder/freeze.rs b/drivers/android/binder/free= ze.rs index e68c3c8bc55a203c32261c23915d8c427569e3b0..74bebb8d4d9b24860eed34363ce= 69b1c6df58028 100644 --- a/drivers/android/binder/freeze.rs +++ b/drivers/android/binder/freeze.rs @@ -245,8 +245,9 @@ pub(crate) fn freeze_notif_done(self: &Arc, reade= r: &mut UserSliceReader) ); return Err(EINVAL); } - if freeze.is_clearing { - // Immediately send another FreezeMessage for BR_CLEAR_FRE= EZE_NOTIFICATION_DONE. + let is_frozen =3D freeze.node.owner.inner.lock().is_frozen; + if freeze.is_clearing || freeze.last_is_frozen !=3D Some(is_fr= ozen) { + // Immediately send another FreezeMessage. clear_msg =3D Some(FreezeMessage::init(alloc, cookie)); } freeze.is_pending =3D false; --=20 2.51.0.618.g983fd99d29-goog From nobody Sat Feb 7 19:41:04 2026 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (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 13EC72D77F5 for ; Tue, 7 Oct 2025 09:39:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759830001; cv=none; b=OuBphTQJOaW+Py3lBtifvP3rF6x0D9tlk6dkN6k2SVKJzkKBCV8orzyOqJ4whoUOHKpwMQCKO8PkFVvYMPsZ2Chnz5G5aj0EXPdijGYoFn/CgRL+FFnUKOhUNx6FqXD9xtAvzxchMLF6BSFnPMtKmFMxiJzPYAWJoQ6lrf0w+lw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759830001; c=relaxed/simple; bh=QpvyhwnXAfXkQ7I1kL3n8PvNh/8XJMhS30c4xnByIew=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=E+iyfoBhz4yIrk1tik8yOGvip4w3LQ6NlKPGuPHMFkNo33zAoRQ4K7bBXEyj5OG5poyopwu6ateJQAa88VfIan6kd2T+ixcRsaD63/5frsGDcerkqgem89QDXg2rcRaJEeI8S4SQZDL6Rj0tDzRVRQqqnCeQMHnoLPd/J7D1vfw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=nUUet7J8; arc=none smtp.client-ip=209.85.128.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nUUet7J8" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-46eee58d405so9037455e9.1 for ; Tue, 07 Oct 2025 02:39:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1759829998; x=1760434798; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=PD7m4V3LcOsNmzAyutP1ZogMCH/P0pzhxL44mJuhTQw=; b=nUUet7J8OtS/DJfgbNKbRvQVB+TX8w2pMTp5m4dlIC0L4ICoFDq1EruwVybVMoatKo m8b6onxuwzhM1SOmHG+kX+MVp1MVq+RrbsU+hv0RCzYrFZjZ++0ZHEU+bafM8+2S3A0x ya1ezS6yR09gZHWJloSFtehBslro4pSIs7NYWH+DdcKL1rF0WQZjWCrKN6JzNN5rpcdK nbiNYmXuzBOqWWI+rsWAg4TKdyGf5geP0CqWIq8/CCa7XBst16jOs3WXvqaOsdjE0IIb ke8hChgvgMIFwZLpPxyc5zGxAR6iPjjy0FvT+DK+zzEnzyFZqPgg71TRmSyW2yTACom6 u4Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759829998; x=1760434798; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PD7m4V3LcOsNmzAyutP1ZogMCH/P0pzhxL44mJuhTQw=; b=ID59DmMJQcCqg1ZV8HZZTOE5FP0PeoO/RJIEGQjdySsg/YXyz0qhjcYYiiCWam5uL0 asfJcWbWMrG/pwrixKDjF5jq2MUg5yq7juo1f0tK10ugFFS6WBafD94vzWdkneYiGmc6 5Qh1QdSMsloTTJb9SLBQF/djWduJzoNuxLRNTJsg5Gvsw61IdSVjnY7gKfaRyvcpMSYO CvVJsgmMjBFhg8gDzBBdc/IVGF1MqkZhYPvzSExpSaUdgNBHsPAIUrPnVz5ZNhrHnjRd PI6mIWRA0DVQvxFOxH/O5UlFLyJNIeeIaQgXVWyparnSnF8L8VJXiB1WxHRYg2p/NfFz l/Ow== X-Forwarded-Encrypted: i=1; AJvYcCXDc93idHBpHZxBszpmH5XX6QXMC1fgP2lk6U1tZ8JB+Zdi9OXF4ovjb8fqIugzreUjD5jLKViBEJcO6SA=@vger.kernel.org X-Gm-Message-State: AOJu0YzchCQcR8SG2j0k3enxudlPX6zMnnHiatjD1UDq465VsQQqlbv7 kmmNIIUsluxxsYckD+0B0TinIvwDUmFC3owYBDCb4nIWP9MpUUwQzbh3dT3mKoO13aR1xIFAisU bVIeNfLK1AouKGW1AFw== X-Google-Smtp-Source: AGHT+IGDQ5871GzAA2FmZnN+u4l+4HJ9kTGxv68wBTIylL9+aSmjekfu0EbApFKz4Nn+FYrGWBHEa6nrVKiiKq8= X-Received: from wmbh4.prod.google.com ([2002:a05:600c:a104:b0:45f:2306:167]) (user=aliceryhl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:83cf:b0:46e:4705:4958 with SMTP id 5b1f17b1804b1-46e7114e8a1mr118843605e9.30.1759829998566; Tue, 07 Oct 2025 02:39:58 -0700 (PDT) Date: Tue, 07 Oct 2025 09:39:52 +0000 In-Reply-To: <20251007-binder-freeze-v2-0-5376bd64fb59@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251007-binder-freeze-v2-0-5376bd64fb59@google.com> X-Developer-Key: i=aliceryhl@google.com; a=openpgp; fpr=49F6C1FAA74960F43A5B86A1EE7A392FDE96209F X-Developer-Signature: v=1; a=openpgp-sha256; l=2076; i=aliceryhl@google.com; h=from:subject:message-id; bh=QpvyhwnXAfXkQ7I1kL3n8PvNh/8XJMhS30c4xnByIew=; b=owEBbQKS/ZANAwAKAQRYvu5YxjlGAcsmYgBo5N/rNt03RWB2Xg09BXFWbrbXDEWxbg7kX8p6O 1UoGk4r3iqJAjMEAAEKAB0WIQSDkqKUTWQHCvFIvbIEWL7uWMY5RgUCaOTf6wAKCRAEWL7uWMY5 RhKyEAC1Hu9FC1oIoPydREz9xjJ6EAq7i/IviL25a6BcUQSIg3kHeA3BOSDobvMsYNF3d5cuSqF Q2bngrPga6jL9KVMpHMeZu/BSAivHucuI7XjeqiOxmRBlQoknuUc/m2IJgi4w6ZqgSBD5qU4tsk dJ4QnxlutHAQtVjabot9JXJNNOHRibzP4M2RkPJDheL00ukcpFV7lVqDQck6RS+T9O2Cv4k9WVF mW5N7+U4NpVs3vyfisXzip/Sh04RMQXTHpXy0/QCj8rNcOWA+oDT+LpylxFX6Z3mFFpbjarkYDT f7wXpfJlUwymUOZgBXTWws1K3JxcA8gN2swARnUHjSDZLcSBY3Od2wEqrEwgBSvqJTdVKkzeJPC 4DNccfXKSvBmpzrolHLiy48mS/OfoGHeQomxwP9AqaPefy4OjmY+rucYkub2xY4sJVQYTULjD7L R/xuh7uAUw8o1On5XPMNmVOA7APpg2ifk+xJXZtoBgxg5BG+u9i4G7uadv8klKXVSh9jG1ORaKK 3swZTABCHK0y9UWmm7S5N7OYdD8MrANJdxWm1FMpHUcool+zwseUF58k+HyZ6jrk7v4YZtnVWFi RB8BFp1cwHxP90qrsDql1r4Mqgmp6p5ltXOR+AfvNlykP1Mq35EOjgiWzhr/wYoHip27C8G/1bt kVBp9GwLD/mDaAA== X-Mailer: b4 0.14.2 Message-ID: <20251007-binder-freeze-v2-2-5376bd64fb59@google.com> Subject: [PATCH v2 2/3] rust_binder: don't delete FreezeListener if there are pending duplicates From: Alice Ryhl To: Greg Kroah-Hartman Cc: "=?utf-8?q?Arve_Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Alice Ryhl Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When userspace issues commands to a freeze listener, it identifies it using a cookie. Normally this cookie uniquely identifies a freeze listener, but when userspace clears a listener with the intent of deleting it, it's allowed to "regret" clearing it and create a new freeze listener for the same node using the same cookie. (IMO this was an API mistake, but userspace relies on it.) Currently if the active freeze listener gets fully deleted while there are still pending duplicates, then the code incorrectly deletes the pending duplicates too. To fix this, do not delete the entry if there are still pending duplicates. Since the current data structure requires a main freeze listener, we convert one pending duplicate into the primary listener in this scenario. Signed-off-by: Alice Ryhl Acked-by: Carlos Llamas --- drivers/android/binder/freeze.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/android/binder/freeze.rs b/drivers/android/binder/free= ze.rs index 74bebb8d4d9b24860eed34363ce69b1c6df58028..e304aceca7f31c15444cf67bb13= 488cd144345e6 100644 --- a/drivers/android/binder/freeze.rs +++ b/drivers/android/binder/freeze.rs @@ -106,7 +106,16 @@ fn do_work( return Ok(true); } if freeze.is_clearing { - _removed_listener =3D freeze_entry.remove_node(); + kernel::warn_on!(freeze.num_cleared_duplicates !=3D 0); + if freeze.num_pending_duplicates > 0 { + // The primary freeze listener was deleted, so convert a p= ending duplicate back + // into the primary one. + freeze.num_pending_duplicates -=3D 1; + freeze.is_pending =3D true; + freeze.is_clearing =3D true; + } else { + _removed_listener =3D freeze_entry.remove_node(); + } drop(node_refs); writer.write_code(BR_CLEAR_FREEZE_NOTIFICATION_DONE)?; writer.write_payload(&self.cookie.0)?; --=20 2.51.0.618.g983fd99d29-goog From nobody Sat Feb 7 19:41:04 2026 Received: from mail-ed1-f73.google.com (mail-ed1-f73.google.com [209.85.208.73]) (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 7F6E32D7DE9 for ; Tue, 7 Oct 2025 09:40:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759830004; cv=none; b=Zl5fSrHABHSHSV6IWn0ZUDVDzmihgsqWjUr02E16BadnN02yfCfwJxEtDcvkeKg9aT5Xl4lQMgz9KJtwCKdd26nOIGQ4GQUvxnShvQJlUn8TEnJiCs+R2ulc8xwOZXbgFlt0JDTCpFkyXBpHmUYFfWLftjngl0LBEqFEnKpOP0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759830004; c=relaxed/simple; bh=wdbJ05BZTStYhJongSuOJ1jxeXUODoRyJelh9iG99eQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UL891NBZCp2/XQ8IxGeb1sW6vXNr8LHun9cVSW4vbqgtNjOyrZVB90Vau1ZY388WlXDNI9YhId1NFkQbtbfgG10os5spdnHXApv+nuFWmwRRj1otwwd0R3K+b+fbrM9qdJKz0ePDjVSVSx4+a8+bH2PHWYte3xqGzgzD3VeJXDg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=JJbNK7wx; arc=none smtp.client-ip=209.85.208.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--aliceryhl.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="JJbNK7wx" Received: by mail-ed1-f73.google.com with SMTP id 4fb4d7f45d1cf-639b879e1faso1428198a12.0 for ; Tue, 07 Oct 2025 02:40:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1759830000; x=1760434800; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=hS/HO3oIj9CsJ2+yda/U2TQDchHwBdMSLa/BS6MgVuI=; b=JJbNK7wxjQtE70lDWbGsaaQvo44TJJtq5gPzTPwv6yY7ldM4xfUjyuF67e4wU8zYtH hI/ltTV55mZ5buSp1lDCH2udUt4rCf3NS8K+GmkQKrSOqDAfVBtjwWPMkHV8h11eHitv 4j6yWxGzBnnUVTDdHGDbdw6twoC0mUTLWKECkEh2ntLmlxFFMx8ceTVIUJfXpqKBJstp FnGgro93Ep+RT+TuhARRdE4HjoDRbCDcLUlWznuxXhhQfcrTAvWWaK8gjlwFsfS6ViE6 ZSNDqS/QTNzHYuSVsIXPXGNula89s35kQNDDLuQouYx06Qul7JuSHs2oGVyQl1I/D9xb ceKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759830000; x=1760434800; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hS/HO3oIj9CsJ2+yda/U2TQDchHwBdMSLa/BS6MgVuI=; b=sBPzUwlz6VHn+rn97XGw0m/f3qppbjN8FH5WYjK9Et8OSonK3QbCJnIhfBDfCi0l2i glf+wD9q2yjTu0yWKeIOeQZx3frg8eCHJToIHumitSS+5tC3VXEuCf/4fLiGtPc9fKpB xVt/YTVS/xRZXnkPdo+jhFfd5MeaTp9Z0PtViFILAJ+ZxeNK+jpbX0JUyKMo1zgHh4YQ PnIoo+iTqNSWEAWpStViZztgrGJ01gZlKUxLawOg+oF7P8yMCmyPbfYhIMwypeJJzxKJ dsslATX0snYp/7ump7uyKa1kycptJddKxQLkU6fZszgZrbw98wkwEH7RGMsdijmwGFpr pKKQ== X-Forwarded-Encrypted: i=1; AJvYcCXe7lV0cXsOo4FUoqn8r0bBmIlpSNP2DGDZzhjMluZDqYf8SEunhiWZivAfivECficj6GcOXt51NqjGd00=@vger.kernel.org X-Gm-Message-State: AOJu0YwIwvi0ZW4hmW114Dksv8B0zvayVJMoi3RaFktW2XwaSi72z6FO lTN2iGy1doKxoXDdWyfJQmm/kA56JoVC/j3vfpl9QMrYM51UZcrt9EvJr5y0gQvc6d7mdc8G3uO cMIZbNT6UKOzQYQ+m8Q== X-Google-Smtp-Source: AGHT+IFUm6CVMf4M6thjgwo80R/yZkT69buZd62jJH8NnU3M/qf3KbPbTMONXGp53zdLJ5fTL/sS5O6HFZv/Y9I= X-Received: from edra16.prod.google.com ([2002:aa7:d910:0:b0:634:4a04:b8ff]) (user=aliceryhl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:1ecc:b0:61c:db49:aec0 with SMTP id 4fb4d7f45d1cf-639baf1bbc5mr3200437a12.5.1759829999724; Tue, 07 Oct 2025 02:39:59 -0700 (PDT) Date: Tue, 07 Oct 2025 09:39:53 +0000 In-Reply-To: <20251007-binder-freeze-v2-0-5376bd64fb59@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251007-binder-freeze-v2-0-5376bd64fb59@google.com> X-Developer-Key: i=aliceryhl@google.com; a=openpgp; fpr=49F6C1FAA74960F43A5B86A1EE7A392FDE96209F X-Developer-Signature: v=1; a=openpgp-sha256; l=8162; i=aliceryhl@google.com; h=from:subject:message-id; bh=wdbJ05BZTStYhJongSuOJ1jxeXUODoRyJelh9iG99eQ=; b=owEBbQKS/ZANAwAKAQRYvu5YxjlGAcsmYgBo5N/r8Ok87S1Nl3CTrlWaPq8znlNJ71/fN69za FJ3iRbyBoKJAjMEAAEKAB0WIQSDkqKUTWQHCvFIvbIEWL7uWMY5RgUCaOTf6wAKCRAEWL7uWMY5 Rlx3D/9p4CPhqeLRPvy0jrZnoqqkQNs8pWFn6zY5aZ5IL5cXTMUHSfTqjMp5+kwsxXC5yFvp6NH d6NArekmLArWzU81hQDisWaiCd9Mu01nYijDrFHhuZFduaGnbse9lnKXjc1MbJeXOwr0dXHGXv/ xMa8k01rojEY84Rqu3aWmTY48j+f5/FadempunwF7u2rfmS/kygXldCx6/qpNYM6ERdmcOpjk38 dPvK7YS+eqbLrJyL20cHTTtr37mnorMl88nFgjtQI34bagSc8qAcr8XTyNkZ1RcrJhDDECfOnyH tvztda8u3qvVNXGEJ9y88dZ3VRw2TWjXUT4GoHUawIcqF28yOrR1z+YnvexRe8TjCfMqnWlM3h8 NSv9GZzSoZBI/39AFE7WZCge1iBSbzu+PePQ2pYgoVBFFqJmLLe8jFrqkSnxMAAUNhX63LSrp+d kaWd07e4vFaft4zXJ6r0+DDN7wswa9lN4L39VUCDw+FcPegZaRNioDSNnYfjEk3SeJFM6LwCiQK X31V5kLv8WMQq/K7kEZRaTDyGsxr3AulKCiGzFhE8+erDWNxAfxcyhmq0Z66qh1HZrkS4jsYyxH rdtTJ94ldLrQSYSJTmAAj0rQi3YzqGAjH1BD4+Qdoq17u8micQo5PBNwv2toDtlW2zkF3Mer6Xy mhqCbf8ZN4nfGyw== X-Mailer: b4 0.14.2 Message-ID: <20251007-binder-freeze-v2-3-5376bd64fb59@google.com> Subject: [PATCH v2 3/3] rust_binder: report freeze notification only when fully frozen From: Alice Ryhl To: Greg Kroah-Hartman Cc: "=?utf-8?q?Arve_Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Alice Ryhl Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Binder only sends out freeze notifications when ioctl_freeze() completes and the process has become fully frozen. However, if a freeze notification is registered during the freeze operation, then it registers an initial state of 'frozen'. This is a problem because if the freeze operation fails, then the listener is not told about that state change, leading to lost updates. Signed-off-by: Alice Ryhl Acked-by: Carlos Llamas --- This is also an issue in C Binder. A fix for that will be sent separately. --- drivers/android/binder/freeze.rs | 4 +-- drivers/android/binder/process.rs | 46 ++++++++++++++++++++++++++++---= ---- drivers/android/binder/transaction.rs | 6 ++--- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/drivers/android/binder/freeze.rs b/drivers/android/binder/free= ze.rs index e304aceca7f31c15444cf67bb13488cd144345e6..220de35ae85ac8de2af71712901= 1e0ace0677b7d 100644 --- a/drivers/android/binder/freeze.rs +++ b/drivers/android/binder/freeze.rs @@ -121,7 +121,7 @@ fn do_work( writer.write_payload(&self.cookie.0)?; Ok(true) } else { - let is_frozen =3D freeze.node.owner.inner.lock().is_frozen; + let is_frozen =3D freeze.node.owner.inner.lock().is_frozen.is_= fully_frozen(); if freeze.last_is_frozen =3D=3D Some(is_frozen) { return Ok(true); } @@ -254,7 +254,7 @@ pub(crate) fn freeze_notif_done(self: &Arc, reade= r: &mut UserSliceReader) ); return Err(EINVAL); } - let is_frozen =3D freeze.node.owner.inner.lock().is_frozen; + let is_frozen =3D freeze.node.owner.inner.lock().is_frozen.is_= fully_frozen(); if freeze.is_clearing || freeze.last_is_frozen !=3D Some(is_fr= ozen) { // Immediately send another FreezeMessage. clear_msg =3D Some(FreezeMessage::init(alloc, cookie)); diff --git a/drivers/android/binder/process.rs b/drivers/android/binder/pro= cess.rs index f13a747e784c84a0fb09cbf47442712106eba07c..2da9344397506a3f6d6b13411c4= 5d5ded92d6db1 100644 --- a/drivers/android/binder/process.rs +++ b/drivers/android/binder/process.rs @@ -72,6 +72,33 @@ fn new(address: usize, size: usize) -> Self { const PROC_DEFER_FLUSH: u8 =3D 1; const PROC_DEFER_RELEASE: u8 =3D 2; =20 +#[derive(Copy, Clone)] +pub(crate) enum IsFrozen { + Yes, + No, + InProgress, +} + +impl IsFrozen { + /// Whether incoming transactions should be rejected due to freeze. + pub(crate) fn is_frozen(self) -> bool { + match self { + IsFrozen::Yes =3D> true, + IsFrozen::No =3D> false, + IsFrozen::InProgress =3D> true, + } + } + + /// Whether freeze notifications consider this process frozen. + pub(crate) fn is_fully_frozen(self) -> bool { + match self { + IsFrozen::Yes =3D> true, + IsFrozen::No =3D> false, + IsFrozen::InProgress =3D> false, + } + } +} + /// The fields of `Process` protected by the spinlock. pub(crate) struct ProcessInner { is_manager: bool, @@ -98,7 +125,7 @@ pub(crate) struct ProcessInner { /// are woken up. outstanding_txns: u32, /// Process is frozen and unable to service binder transactions. - pub(crate) is_frozen: bool, + pub(crate) is_frozen: IsFrozen, /// Process received sync transactions since last frozen. pub(crate) sync_recv: bool, /// Process received async transactions since last frozen. @@ -124,7 +151,7 @@ fn new() -> Self { started_thread_count: 0, defer_work: 0, outstanding_txns: 0, - is_frozen: false, + is_frozen: IsFrozen::No, sync_recv: false, async_recv: false, binderfs_file: None, @@ -1260,7 +1287,7 @@ fn deferred_release(self: Arc) { let is_manager =3D { let mut inner =3D self.inner.lock(); inner.is_dead =3D true; - inner.is_frozen =3D false; + inner.is_frozen =3D IsFrozen::No; inner.sync_recv =3D false; inner.async_recv =3D false; inner.is_manager @@ -1371,7 +1398,7 @@ pub(crate) fn drop_outstanding_txn(&self) { return; } inner.outstanding_txns -=3D 1; - inner.is_frozen && inner.outstanding_txns =3D=3D 0 + inner.is_frozen.is_frozen() && inner.outstanding_txns =3D=3D 0 }; =20 if wake { @@ -1385,7 +1412,7 @@ pub(crate) fn ioctl_freeze(&self, info: &BinderFreeze= Info) -> Result { let mut inner =3D self.inner.lock(); inner.sync_recv =3D false; inner.async_recv =3D false; - inner.is_frozen =3D false; + inner.is_frozen =3D IsFrozen::No; drop(inner); msgs.send_messages(); return Ok(()); @@ -1394,7 +1421,7 @@ pub(crate) fn ioctl_freeze(&self, info: &BinderFreeze= Info) -> Result { let mut inner =3D self.inner.lock(); inner.sync_recv =3D false; inner.async_recv =3D false; - inner.is_frozen =3D true; + inner.is_frozen =3D IsFrozen::InProgress; =20 if info.timeout_ms > 0 { let mut jiffies =3D kernel::time::msecs_to_jiffies(info.timeou= t_ms); @@ -1408,7 +1435,7 @@ pub(crate) fn ioctl_freeze(&self, info: &BinderFreeze= Info) -> Result { .wait_interruptible_timeout(&mut inner, jiffies) { CondVarTimeoutResult::Signal { .. } =3D> { - inner.is_frozen =3D false; + inner.is_frozen =3D IsFrozen::No; return Err(ERESTARTSYS); } CondVarTimeoutResult::Woken { jiffies: remaining } =3D= > { @@ -1422,17 +1449,18 @@ pub(crate) fn ioctl_freeze(&self, info: &BinderFree= zeInfo) -> Result { } =20 if inner.txns_pending_locked() { - inner.is_frozen =3D false; + inner.is_frozen =3D IsFrozen::No; Err(EAGAIN) } else { drop(inner); match self.prepare_freeze_messages() { Ok(batch) =3D> { + self.inner.lock().is_frozen =3D IsFrozen::Yes; batch.send_messages(); Ok(()) } Err(kernel::alloc::AllocError) =3D> { - self.inner.lock().is_frozen =3D false; + self.inner.lock().is_frozen =3D IsFrozen::No; Err(ENOMEM) } } diff --git a/drivers/android/binder/transaction.rs b/drivers/android/binder= /transaction.rs index 02512175d6229535373f2d3e543ba8c91ecd72f0..4bd3c0e417eb93d5d62d9c20daa= dde1fb0e4990f 100644 --- a/drivers/android/binder/transaction.rs +++ b/drivers/android/binder/transaction.rs @@ -249,7 +249,7 @@ pub(crate) fn submit(self: DLArc) -> BinderResult= { =20 if oneway { if let Some(target_node) =3D self.target_node.clone() { - if process_inner.is_frozen { + if process_inner.is_frozen.is_frozen() { process_inner.async_recv =3D true; if self.flags & TF_UPDATE_TXN !=3D 0 { if let Some(t_outdated) =3D @@ -270,7 +270,7 @@ pub(crate) fn submit(self: DLArc) -> BinderResult= { } } =20 - if process_inner.is_frozen { + if process_inner.is_frozen.is_frozen() { return Err(BinderError::new_frozen_oneway()); } else { return Ok(()); @@ -280,7 +280,7 @@ pub(crate) fn submit(self: DLArc) -> BinderResult= { } } =20 - if process_inner.is_frozen { + if process_inner.is_frozen.is_frozen() { process_inner.sync_recv =3D true; return Err(BinderError::new_frozen()); } --=20 2.51.0.618.g983fd99d29-goog