From nobody Tue Dec 16 02:58:40 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.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 0751F25392D for ; Fri, 25 Jul 2025 18:38:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468706; cv=none; b=KUbaFzGARQD2mV+HQIcIsrs81xh8qVRu+T3+Wf2yhUUous6YOKCmH/iSCwuEyk+Db3sCuwtcal4pi6fczpmSSx5TqXFtsmRF814M0MwomjsyomVdyQJESXaioyHIXiAP3yr6GKcVt0x/LO0Dayv89xHTRzxVJKSRfC3lKo1Iqcw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468706; c=relaxed/simple; bh=pgcoFaEO5e2jWlUnn8djk+glagmUEPUIlqDIRVPO+QQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FLHuvceugV6wci0RqukcIozhBrTEz0ayfJcuhFE3U5vE1KwgqrwFlL9bdK5+jgcSFavpPLDjngRvddpS2f+xUAslAcfNRyhyTzwUGMXx20HtulLgEVqKQkh1d1hzQRzASpFyaQmHZxt7QLU38G9vIted3iQtvGwLzNuWabOXZxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--cmllamas.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CgvU5fAw; arc=none smtp.client-ip=209.85.216.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--cmllamas.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CgvU5fAw" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3132e7266d3so2502068a91.2 for ; Fri, 25 Jul 2025 11:38:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1753468704; x=1754073504; 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=07ZTFzAwI7AoDMGWdPj2CS/hPyS57ZZsGkQWvuCqmTo=; b=CgvU5fAwfjRcvz0BPU1HvnSzIvc56PwI0DU4ddUQp/ndrGBSELGGRcZZdG+C/sUZYN URERAQlJ16u5JX8akzafM1wirXk9rEc8YEB2Uy3nT1Dao26d3bvXCJTetv1rZs1nb4sG yOBu0RZB9cuQ3L4Gymns9NVXHmjqP3cdkNXywABSoDgh9HqR/CdpUPDnhBSySDjf7CWu hXkfqXiG3ICQNSnPWxY1BWx4L2kfFs+TOKGgCkNQCd/ac+xRPPV5MBqUmcp5jUyIfFN5 0COLUF7Wbq+6RLPldtNPqXtTo57co1jd2qqwSU+mAOxasSzPtl00BWeccoGeg+uvuDnQ aetQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753468704; x=1754073504; 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=07ZTFzAwI7AoDMGWdPj2CS/hPyS57ZZsGkQWvuCqmTo=; b=F8P6zGw6MfBKIAhEKT6DSxmXz8D1OUgzKEIlfaMJYjFAgu+S/BBEY+Umj8w7PS7D2y 2GPeCzNZmcbD5+g8HMApCvqCjkl+fR7k2OziaFZUN2s8NNH4C4eBHb7JjJTalG9lNtep peaCGotnffvC1nncUSkP64q4vtWLJ9wn7eKqX5Il6doAzAfMT/MAiJy14QT7a63XbLlL 4dvnuOvCbfNojjgPueqIFTZpLfcEkaFH2Gta8wSjeGZ3ItkNdPEQ5NTSxzwYVikgYp+T fIZqMuZlWdUEV08zN6gGmbBdw0snEFzSJSn41z5P4/vFnUHSChGs+9G21ko579HHWSk6 92gw== X-Forwarded-Encrypted: i=1; AJvYcCV9TajqfSSsxNykhWrydrh+sMSq4N4A0HwVfo68bGoWmcd3JEQpUNz/5Wu1IaYeuDFDvuMeCx5gaCKHce4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywf9LvO5ZRTshJWQVRbm6xkoXVzJ4ap4uUCs3oTTSv84E2Zg3aB dgHlBZrnuZG/gsTjZ6LcY/iLVXYEORvMwV2cUiZNoYG1YNPsg5vyfUE92wDtwARY4ofxE6kNn4g PR13zQMS0H0Eghg== X-Google-Smtp-Source: AGHT+IFGPDK3olJm2hcTg+BT/dsjXGWEuaJNtDdOkf1WEpLux5tDqz4FjCMsdW1oD94A0R5TYrvirmglOL9/zg== X-Received: from pjbsw11.prod.google.com ([2002:a17:90b:2c8b:b0:31c:2fe4:33bd]) (user=cmllamas job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:d40e:b0:313:1e9d:404b with SMTP id 98e67ed59e1d1-31e7783b3c0mr4746407a91.2.1753468704305; Fri, 25 Jul 2025 11:38:24 -0700 (PDT) Date: Fri, 25 Jul 2025 18:37:44 +0000 In-Reply-To: <20250725183811.409580-1-cmllamas@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250725183811.409580-1-cmllamas@google.com> X-Mailer: git-send-email 2.50.1.470.g6ba607880d-goog Message-ID: <20250725183811.409580-2-cmllamas@google.com> Subject: [PATCH v19 1/5] binder: pre-allocate binder_transaction From: Carlos Llamas To: Alice Ryhl , Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan Cc: Tiffany Yang , John Stultz , Shai Barack , "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" , kernel-team@android.com, linux-kernel@vger.kernel.org, Jakub Kicinski Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the allocation of 'struct binder_transaction' to the beginning of the binder_transaction() function, along with the initialization of all the members that are known at that time. This minor refactoring helps to consolidate the usage of transaction information at later points. This patch is in preparation for binder's generic netlink implementation and no functional changes are intended. Signed-off-by: Carlos Llamas --- drivers/android/binder.c | 64 +++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 262334851aad..6bb1c9076951 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3042,6 +3042,30 @@ static void binder_transaction(struct binder_proc *p= roc, binder_set_extended_error(&thread->ee, t_debug_id, BR_OK, 0); binder_inner_proc_unlock(proc); =20 + t =3D kzalloc(sizeof(*t), GFP_KERNEL); + if (!t) { + binder_txn_error("%d:%d cannot allocate transaction\n", + thread->pid, proc->pid); + return_error =3D BR_FAILED_REPLY; + return_error_param =3D -ENOMEM; + return_error_line =3D __LINE__; + goto err_alloc_t_failed; + } + INIT_LIST_HEAD(&t->fd_fixups); + binder_stats_created(BINDER_STAT_TRANSACTION); + spin_lock_init(&t->lock); + t->debug_id =3D t_debug_id; + t->start_time =3D t_start_time; + t->from_pid =3D proc->pid; + t->from_tid =3D thread->pid; + t->sender_euid =3D task_euid(proc->tsk); + t->code =3D tr->code; + t->flags =3D tr->flags; + t->priority =3D task_nice(current); + t->work.type =3D BINDER_WORK_TRANSACTION; + if (!reply && !(tr->flags & TF_ONE_WAY)) + t->from =3D thread; + if (reply) { binder_inner_proc_lock(proc); in_reply_to =3D thread->transaction_stack; @@ -3228,24 +3252,13 @@ static void binder_transaction(struct binder_proc *= proc, } binder_inner_proc_unlock(proc); } + + t->to_proc =3D target_proc; + t->to_thread =3D target_thread; if (target_thread) e->to_thread =3D target_thread->pid; e->to_proc =3D target_proc->pid; =20 - /* TODO: reuse incoming transaction for reply */ - t =3D kzalloc(sizeof(*t), GFP_KERNEL); - if (t =3D=3D NULL) { - binder_txn_error("%d:%d cannot allocate transaction\n", - thread->pid, proc->pid); - return_error =3D BR_FAILED_REPLY; - return_error_param =3D -ENOMEM; - return_error_line =3D __LINE__; - goto err_alloc_t_failed; - } - INIT_LIST_HEAD(&t->fd_fixups); - binder_stats_created(BINDER_STAT_TRANSACTION); - spin_lock_init(&t->lock); - tcomplete =3D kzalloc(sizeof(*tcomplete), GFP_KERNEL); if (tcomplete =3D=3D NULL) { binder_txn_error("%d:%d cannot allocate work for transaction\n", @@ -3257,9 +3270,6 @@ static void binder_transaction(struct binder_proc *pr= oc, } binder_stats_created(BINDER_STAT_TRANSACTION_COMPLETE); =20 - t->debug_id =3D t_debug_id; - t->start_time =3D t_start_time; - if (reply) binder_debug(BINDER_DEBUG_TRANSACTION, "%d:%d BC_REPLY %d -> %d:%d, data size %lld-%lld-%lld\n", @@ -3275,19 +3285,6 @@ static void binder_transaction(struct binder_proc *p= roc, (u64)tr->data_size, (u64)tr->offsets_size, (u64)extra_buffers_size); =20 - if (!reply && !(tr->flags & TF_ONE_WAY)) - t->from =3D thread; - else - t->from =3D NULL; - t->from_pid =3D proc->pid; - t->from_tid =3D thread->pid; - t->sender_euid =3D task_euid(proc->tsk); - t->to_proc =3D target_proc; - t->to_thread =3D target_thread; - t->code =3D tr->code; - t->flags =3D tr->flags; - t->priority =3D task_nice(current); - if (target_node && target_node->txn_security_ctx) { u32 secid; size_t added_size; @@ -3684,7 +3681,6 @@ static void binder_transaction(struct binder_proc *pr= oc, tcomplete->type =3D BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT; else tcomplete->type =3D BINDER_WORK_TRANSACTION_COMPLETE; - t->work.type =3D BINDER_WORK_TRANSACTION; =20 if (reply) { binder_enqueue_thread_work(thread, tcomplete); @@ -3783,9 +3779,6 @@ static void binder_transaction(struct binder_proc *pr= oc, err_alloc_tcomplete_failed: if (trace_binder_txn_latency_free_enabled()) binder_txn_latency_free(t); - kfree(t); - binder_stats_deleted(BINDER_STAT_TRANSACTION); -err_alloc_t_failed: err_bad_todo_list: err_bad_call_stack: err_empty_call_stack: @@ -3795,6 +3788,9 @@ static void binder_transaction(struct binder_proc *pr= oc, binder_dec_node(target_node, 1, 0); binder_dec_node_tmpref(target_node); } + kfree(t); + binder_stats_deleted(BINDER_STAT_TRANSACTION); +err_alloc_t_failed: =20 binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, "%d:%d transaction %s to %d:%d failed %d/%d/%d, code %u size %lld-%= lld line %d\n", --=20 2.50.1.470.g6ba607880d-goog From nobody Tue Dec 16 02:58:40 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 E25E22550CA for ; Fri, 25 Jul 2025 18:38:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468708; cv=none; b=g2AO6cQYsh4xrUHlK42mY9cq7F8zds9i1jJfdLC50anx0ng1/BfdtrILh3lfNE6imGlYfHaqtuROk4H0gYLH+jhKxkFwN9P1C1GibHzRfFr7xb89QlXF5/RSKyaSfOush3VSF1ZZqrThjKH635hBk9e1Qk8j+mRQ76hfFpGdNnU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468708; c=relaxed/simple; bh=EIkXJlJ7/tVrwsE5890JqYG99zH0rcdBwoFWoNtENeM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UZsyz5d2fV+yy49rx1gA/Ww9qEYgkCxOI7MJL/N2BfHpH1J9WzKaA3lTVQrC/Fmopg02FxPllvs35gFVwbLh2V07yqssU7J2Qqsjk4oVK+c4UVhSiPCw+pfnl47QUpveNo52tMq8uY8pual7aMsQlEUoMt6UJI9uMIhOp5xdhTs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--cmllamas.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=jcAfgE1n; arc=none smtp.client-ip=209.85.214.201 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--cmllamas.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="jcAfgE1n" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-234906c5e29so29795125ad.0 for ; Fri, 25 Jul 2025 11:38:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1753468706; x=1754073506; 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=WtfOw8me2fehz6S9vL0y0tL4JPXzL4OPlqHFwldn0qA=; b=jcAfgE1nOiMmGKo26v3KiPVk/3kmO+6dQrh1Kas0zedJGhTHRaywTQiLemsmZTBFV2 e/X6sOOv89FJZ9fpIvMbBnYoIdqHWn8NshGSm6S8UDVW5KnG7f5W7CnbW//iXtlne8Hb W5epnguTKnv+09fIYiiKTHb7NCnJx5NmFNonelU/FSgIWyAVncHKAtijdcLL0RLlT4J+ OjSh4b3YnV5TZXbkylkHqhDaVwuX+yEBT2/mrdsuIS7Se8VMUAHjanNPZuGo/mzwEG6g Q66sXzVGUxP/4yA5oi7qhNtEXbvYtV5ElDJ6MgGoZmt+HsjURqjh0g83+BgSuY8wn2VS J1gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753468706; x=1754073506; 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=WtfOw8me2fehz6S9vL0y0tL4JPXzL4OPlqHFwldn0qA=; b=kUelYlYdNqGyB9ZUBV3zS7fMc8EfwN9NxJ8TacMax6KbLVvsSZF4MsdRAnOglIxuMO sUxJsdJTrkSTZMPCTLIsO21nfmGtWX8dnQJkza9TW804fBeZyoFUsLtGNM/iCA9H0Q/d KwtVLle6tpDg09yaOlgsras+UUU2B5ty4bbli+5ZEZxYo7scxYqvXsHF2XAtjeDvFmid zbHlzssfBB62qsKp7PhSupkIcuDpCgJ4c4HCAhOL+3T4cp7Z6buFJ5YLsvb25sl9xf7e G73NNQkwLpdcwoRIr8fTp20XxbCcDBAI+Ua8IZjCGAcuIOL/JPDal7wlQgiy8ZDmTnvk AoPw== X-Forwarded-Encrypted: i=1; AJvYcCUB01KzcXny0l1BsPWE4C5Q313fx9JvsykILHpyomRdKMZi7aA0j3UhjFvlYuWGJVaM49VTGiL0FxyMaeg=@vger.kernel.org X-Gm-Message-State: AOJu0Ywy08ZK+c1gvZzFboy69bYppIA8IKuFbK5/vE/doxisOwOU2/Lr Z5r6mwwff7K8XUq3CoR6iLh8hj/6fPqOrWliZsT6VjwUGVr1hObad2FHmIDkRS0ppyoKjNBOZzT BtObTfZceg+QUlw== X-Google-Smtp-Source: AGHT+IG1rCtczBqr+lq8W7k1f3zjP1ilx/RuyK0T6pY2mAVoYZTMNCcgASMw4XdxgNw+luYRa06N53JN8bDlxA== X-Received: from pja16.prod.google.com ([2002:a17:90b:5490:b0:311:1a09:11ff]) (user=cmllamas job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f70b:b0:235:27b6:a891 with SMTP id d9443c01a7336-23fb30ad041mr42070095ad.28.1753468706298; Fri, 25 Jul 2025 11:38:26 -0700 (PDT) Date: Fri, 25 Jul 2025 18:37:45 +0000 In-Reply-To: <20250725183811.409580-1-cmllamas@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250725183811.409580-1-cmllamas@google.com> X-Mailer: git-send-email 2.50.1.470.g6ba607880d-goog Message-ID: <20250725183811.409580-3-cmllamas@google.com> Subject: [PATCH v19 2/5] binder: add t->is_async and t->is_reply From: Carlos Llamas To: Alice Ryhl , Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan Cc: Tiffany Yang , John Stultz , Shai Barack , "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" , kernel-team@android.com, linux-kernel@vger.kernel.org, Jakub Kicinski Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the t->need_reply flag with the more descriptive t->is_async and and t->is_reply flags. The 'need_reply' flag was only used for debugging purposes and the new flags can be used to distinguish between the type of transactions too: sync, async and reply. For now, only update the logging in print_binder_transaction_ilocked(). However, the new flags can be used in the future to replace the current patterns and improve readability. e.g.: - if (!reply && !(tr->flags & TF_ONE_WAY)) + if (t->is_async) This patch is in preparation for binder's generic netlink implementation and no functional changes are intended. Signed-off-by: Carlos Llamas --- drivers/android/binder.c | 7 ++++--- drivers/android/binder_internal.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 6bb1c9076951..95aa1fae53e2 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3063,6 +3063,8 @@ static void binder_transaction(struct binder_proc *pr= oc, t->flags =3D tr->flags; t->priority =3D task_nice(current); t->work.type =3D BINDER_WORK_TRANSACTION; + t->is_async =3D !reply && (tr->flags & TF_ONE_WAY); + t->is_reply =3D reply; if (!reply && !(tr->flags & TF_ONE_WAY)) t->from =3D thread; =20 @@ -3708,7 +3710,6 @@ static void binder_transaction(struct binder_proc *pr= oc, * the target replies (or there is an error). */ binder_enqueue_deferred_thread_work_ilocked(thread, tcomplete); - t->need_reply =3D 1; t->from_parent =3D thread->transaction_stack; thread->transaction_stack =3D t; binder_inner_proc_unlock(proc); @@ -6328,13 +6329,13 @@ static void print_binder_transaction_ilocked(struct= seq_file *m, spin_lock(&t->lock); to_proc =3D t->to_proc; seq_printf(m, - "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d elapsed = %lldms", + "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld a%d r%d elap= sed %lldms", prefix, t->debug_id, t, t->from_pid, t->from_tid, to_proc ? to_proc->pid : 0, t->to_thread ? t->to_thread->pid : 0, - t->code, t->flags, t->priority, t->need_reply, + t->code, t->flags, t->priority, t->is_async, t->is_reply, ktime_ms_delta(current_time, t->start_time)); spin_unlock(&t->lock); =20 diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_int= ernal.h index b5d3014fb4dc..1b69bba2c816 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -539,8 +539,8 @@ struct binder_transaction { struct binder_proc *to_proc; struct binder_thread *to_thread; struct binder_transaction *to_parent; - unsigned need_reply:1; - /* unsigned is_dead:1; */ /* not used at the moment */ + unsigned is_async:1; + unsigned is_reply:1; =20 struct binder_buffer *buffer; unsigned int code; --=20 2.50.1.470.g6ba607880d-goog From nobody Tue Dec 16 02:58:40 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 7C286246BA1 for ; Fri, 25 Jul 2025 18:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468725; cv=none; b=EPJ6es2UL3Zy8twtDvjZgiqCJADDckGyPUzC4qvqLcW68ddvmbxCtOZ5MBCZN0Esfi3FubF2f6UMC7YY1YAr+2VFGlLDQs8hK7wEEfO5egqrNwnfkKtYIaiMiURA8Ykl3CnnYF8XtDEq7oAoLpTTifvvnJzV41IrN1fhw4DRQ0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468725; c=relaxed/simple; bh=ZeGfMMRhTnAG2ctNVuCX1noxNGJYbnkcz1g3/yd2XdU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=eiQTaYXGnnPBvY5CXnG26YHcwEBhhLaKYVuJwaVUX2QtnjQP+kzpYTrRGuk09U+Gfnry+K3iWnL1Hr57GYWj+de4fX3oyAXxgm3sjBeKZU/TTo3K9IVIa5AJfSRV8l9ygmjaGgTLEl1hwwucPQgQWgMwhW2ytLANItLZLy//CFU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--cmllamas.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zcn4GCaG; arc=none smtp.client-ip=209.85.214.202 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--cmllamas.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zcn4GCaG" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-23fba8fd56bso2665095ad.2 for ; Fri, 25 Jul 2025 11:38:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1753468723; x=1754073523; 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=hERtp2g6Pc7QoTZ98mMyXxU41JG0va0Re9zNA1XThII=; b=zcn4GCaGT2kLhYWeca0zbOccYioV/CxH+cfRs9RPQPvp9jdoNxSQqPsPXp7fFuVunr xfuunE32gq3tTVkc4KhiX2gGoxH6AEAqif0M6yHs4kfdA3SdgZglAxMv0d9gqQKJl0Al pcTKLD0yHHULukaDJpUGII52RFHuE6yQ+cAztXficfHemKlvUoH9Dp9/ny7nXM29Yq27 QWBNqJ4+oM1ersI4wf7k0bfbWyaRwHTcfgvO18icxIXYvJXK0r1Orb6oaRAAgHS6De5n zYquv4oQfMfFDvZyhKwvApOKjkKgA/rP0l1tNQsW+iLprzNV39ONK9lJjBJWCvVzyHSg 4o5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753468723; x=1754073523; 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=hERtp2g6Pc7QoTZ98mMyXxU41JG0va0Re9zNA1XThII=; b=vmUMhrXeVEAr4n73nxv6xtzTocU+nFvFBPi5ctosHcL4TCU6NR2dWiZHp8JQsOpCrG xMT0p/aexeaQUWJdM8DWtud4avZcWDgokQZMi9RlhXJKa2VIROUe1lrfNQpDUdkdHtKT 3g7vJ4fH9Or5agK8WXBCYaY4Rhtr74MsB6gpv0RkldiJmNb0NjpXzzUIn/9rpyjZaNpn xwRouVnBgi9ddlfPJwZMd4G6yRUMb8a2j8mM6HXxOiOCK/wYtHkeaXBFlCYH4MBKoGu1 pcVgj5z4MN5w+VIDk/zfFIgKAhCNCKv4U3HLPoRVvg3C0JtlwtEQ7biozoSir6YrGnZm w2Ow== X-Forwarded-Encrypted: i=1; AJvYcCX9piEAuPmj5a96Ka54d5DDYIoZsBw4VLhpvzF1ch7vDAWrm8PGdIZxZdOHK5nkFd1X+0zkqky17GKMTK0=@vger.kernel.org X-Gm-Message-State: AOJu0Yy5BSsbuXGmpRwBNMAkEpbQJpricpPsHKxf5GSNFcJ2t4HlTQFT gwdNbHmWWW6htHmp1hYD/7gIgvdriUX85vvvdIXzPzQ7slMRLqC7y7Sp/bdZIbqhtNPeZaoNqOl r7Hu3ETni2Hyr0Q== X-Google-Smtp-Source: AGHT+IElnQ3ltmUEMUOrnqr+/5aFfilQzhfxMYT2GQzuCKhfrb3hO0WPIinsgr69dSU9OKlubrsJp7mniL69pw== X-Received: from plht16.prod.google.com ([2002:a17:903:2f10:b0:23e:3914:f342]) (user=cmllamas job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:490b:b0:234:d7c5:a0f6 with SMTP id d9443c01a7336-23fb30aaf67mr34769985ad.31.1753468722686; Fri, 25 Jul 2025 11:38:42 -0700 (PDT) Date: Fri, 25 Jul 2025 18:37:46 +0000 In-Reply-To: <20250725183811.409580-1-cmllamas@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250725183811.409580-1-cmllamas@google.com> X-Mailer: git-send-email 2.50.1.470.g6ba607880d-goog Message-ID: <20250725183811.409580-4-cmllamas@google.com> Subject: [PATCH v19 3/5] binder: introduce transaction reports via netlink From: Carlos Llamas To: Alice Ryhl , Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Donald Hunter , Li Li Cc: Tiffany Yang , John Stultz , Shai Barack , "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" , kernel-team@android.com, linux-kernel@vger.kernel.org, "open list:NETWORKING [GENERAL]" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Li Li Introduce a generic netlink multicast event to report binder transaction failures to userspace. This allows subscribers to monitor these events and take appropriate actions, such as stopping a misbehaving application that is spamming a service with huge amount of transactions. The multicast event contains full details of the failed transactions, including the sender/target PIDs, payload size and specific error code. This interface is defined using a YAML spec, from which the UAPI and kernel headers and source are auto-generated. Signed-off-by: Li Li Signed-off-by: Carlos Llamas --- Documentation/netlink/specs/binder.yaml | 96 +++++++++++++++++++++ MAINTAINERS | 1 + drivers/android/Kconfig | 1 + drivers/android/Makefile | 2 +- drivers/android/binder.c | 85 +++++++++++++++++- drivers/android/binder_netlink.c | 32 +++++++ drivers/android/binder_netlink.h | 21 +++++ include/uapi/linux/android/binder_netlink.h | 37 ++++++++ 8 files changed, 270 insertions(+), 5 deletions(-) create mode 100644 Documentation/netlink/specs/binder.yaml create mode 100644 drivers/android/binder_netlink.c create mode 100644 drivers/android/binder_netlink.h create mode 100644 include/uapi/linux/android/binder_netlink.h diff --git a/Documentation/netlink/specs/binder.yaml b/Documentation/netlin= k/specs/binder.yaml new file mode 100644 index 000000000000..a2e54aa42448 --- /dev/null +++ b/Documentation/netlink/specs/binder.yaml @@ -0,0 +1,96 @@ +# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Cla= use) +# +# Copyright 2025 Google LLC +# +--- +name: binder +protocol: genetlink +uapi-header: linux/android/binder_netlink.h +doc: Binder interface over generic netlink + +attribute-sets: + - + name: report + doc: | + Attributes included within a transaction failure report. The elements + correspond directly with the specific transaction that failed, along + with the error returned to the sender e.g. BR_DEAD_REPLY. + + attributes: + - + name: error + type: u32 + doc: The enum binder_driver_return_protocol returned to the sender. + - + name: context + type: string + doc: The binder context where the transaction occurred. + - + name: from_pid + type: u32 + doc: The PID of the sender process. + - + name: from_tid + type: u32 + doc: The TID of the sender thread. + - + name: to_pid + type: u32 + doc: | + The PID of the recipient process. This attribute may not be pres= ent + if the target could not be determined. + - + name: to_tid + type: u32 + doc: | + The TID of the recipient thread. This attribute may not be prese= nt + if the target could not be determined. + - + name: is_reply + type: flag + doc: When present, indicates the failed transaction is a reply. + - + name: flags + type: u32 + doc: The bitmask of enum transaction_flags from the transaction. + - + name: code + type: u32 + doc: The application-defined code from the transaction. + - + name: data_size + type: u32 + doc: The transaction payload size in bytes. + +operations: + list: + - + name: report + doc: | + A multicast event sent to userspace subscribers to notify them abo= ut + binder transaction failures. The generated report provides the full + details of the specific transaction that failed. The intention is = for + programs to monitor these events and react to the failures as need= ed. + + attribute-set: report + mcgrp: report + event: + attributes: + - error + - context + - from_pid + - from_tid + - to_pid + - to_tid + - is_reply + - flags + - code + - data_size + +kernel-family: + headers: ["binder_internal.h"] + +mcast-groups: + list: + - + name: report diff --git a/MAINTAINERS b/MAINTAINERS index f8c8f682edf6..df8f6b31f2f8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1769,6 +1769,7 @@ M: Suren Baghdasaryan L: linux-kernel@vger.kernel.org S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git +F: Documentation/netlink/specs/binder.yaml F: drivers/android/ =20 ANDROID GOLDFISH PIC DRIVER diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig index 5b3b8041f827..75af3cf472c8 100644 --- a/drivers/android/Kconfig +++ b/drivers/android/Kconfig @@ -4,6 +4,7 @@ menu "Android" config ANDROID_BINDER_IPC bool "Android Binder IPC Driver" depends on MMU + depends on NET default n help Binder is used in Android for both communication between processes, diff --git a/drivers/android/Makefile b/drivers/android/Makefile index c5d47be0276c..f422f91e026b 100644 --- a/drivers/android/Makefile +++ b/drivers/android/Makefile @@ -2,5 +2,5 @@ ccflags-y +=3D -I$(src) # needed for trace events =20 obj-$(CONFIG_ANDROID_BINDERFS) +=3D binderfs.o -obj-$(CONFIG_ANDROID_BINDER_IPC) +=3D binder.o binder_alloc.o +obj-$(CONFIG_ANDROID_BINDER_IPC) +=3D binder.o binder_alloc.o binder_netli= nk.o obj-$(CONFIG_ANDROID_BINDER_ALLOC_KUNIT_TEST) +=3D tests/ diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 95aa1fae53e2..0d37eca514f9 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -74,6 +74,7 @@ =20 #include =20 +#include "binder_netlink.h" #include "binder_internal.h" #include "binder_trace.h" =20 @@ -2993,6 +2994,67 @@ static void binder_set_txn_from_error(struct binder_= transaction *t, int id, binder_thread_dec_tmpref(from); } =20 +/** + * binder_netlink_report() - report a transaction failure via netlink + * @proc: the binder proc sending the transaction + * @t: the binder transaction that failed + * @data_size: the user provided data size for the transaction + * @error: enum binder_driver_return_protocol returned to sender + */ +static void binder_netlink_report(struct binder_proc *proc, + struct binder_transaction *t, + u32 data_size, + u32 error) +{ + const char *context =3D proc->context->name; + struct sk_buff *skb; + void *hdr; + + if (!genl_has_listeners(&binder_nl_family, &init_net, + BINDER_NLGRP_REPORT)) + return; + + skb =3D genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL); + if (!skb) + return; + + hdr =3D genlmsg_put(skb, 0, 0, &binder_nl_family, 0, BINDER_CMD_REPORT); + if (!hdr) + goto free_skb; + + if (nla_put_u32(skb, BINDER_A_REPORT_ERROR, error) || + nla_put_string(skb, BINDER_A_REPORT_CONTEXT, context) || + nla_put_u32(skb, BINDER_A_REPORT_FROM_PID, t->from_pid) || + nla_put_u32(skb, BINDER_A_REPORT_FROM_TID, t->from_tid)) + goto cancel_skb; + + if (t->to_proc && + nla_put_u32(skb, BINDER_A_REPORT_TO_PID, t->to_proc->pid)) + goto cancel_skb; + + if (t->to_thread && + nla_put_u32(skb, BINDER_A_REPORT_TO_TID, t->to_thread->pid)) + goto cancel_skb; + + if (t->is_reply && nla_put_flag(skb, BINDER_A_REPORT_IS_REPLY)) + goto cancel_skb; + + if (nla_put_u32(skb, BINDER_A_REPORT_FLAGS, t->flags) || + nla_put_u32(skb, BINDER_A_REPORT_CODE, t->code) || + nla_put_u32(skb, BINDER_A_REPORT_DATA_SIZE, data_size)) + goto cancel_skb; + + genlmsg_end(skb, hdr); + genlmsg_multicast(&binder_nl_family, skb, 0, BINDER_NLGRP_REPORT, + GFP_KERNEL); + return; + +cancel_skb: + genlmsg_cancel(skb, hdr); +free_skb: + nlmsg_free(skb); +} + static void binder_transaction(struct binder_proc *proc, struct binder_thread *thread, struct binder_transaction_data *tr, int reply, @@ -3679,10 +3741,13 @@ static void binder_transaction(struct binder_proc *= proc, return_error_line =3D __LINE__; goto err_copy_data_failed; } - if (t->buffer->oneway_spam_suspect) + if (t->buffer->oneway_spam_suspect) { tcomplete->type =3D BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT; - else + binder_netlink_report(proc, t, tr->data_size, + BR_ONEWAY_SPAM_SUSPECT); + } else { tcomplete->type =3D BINDER_WORK_TRANSACTION_COMPLETE; + } =20 if (reply) { binder_enqueue_thread_work(thread, tcomplete); @@ -3730,8 +3795,11 @@ static void binder_transaction(struct binder_proc *p= roc, * process and is put in a pending queue, waiting for the target * process to be unfrozen. */ - if (return_error =3D=3D BR_TRANSACTION_PENDING_FROZEN) + if (return_error =3D=3D BR_TRANSACTION_PENDING_FROZEN) { tcomplete->type =3D BINDER_WORK_TRANSACTION_PENDING; + binder_netlink_report(proc, t, tr->data_size, + return_error); + } binder_enqueue_thread_work(thread, tcomplete); if (return_error && return_error !=3D BR_TRANSACTION_PENDING_FROZEN) @@ -3789,6 +3857,8 @@ static void binder_transaction(struct binder_proc *pr= oc, binder_dec_node(target_node, 1, 0); binder_dec_node_tmpref(target_node); } + + binder_netlink_report(proc, t, tr->data_size, return_error); kfree(t); binder_stats_deleted(BINDER_STAT_TRANSACTION); err_alloc_t_failed: @@ -7067,12 +7137,19 @@ static int __init binder_init(void) } } =20 - ret =3D init_binderfs(); + ret =3D genl_register_family(&binder_nl_family); if (ret) goto err_init_binder_device_failed; =20 + ret =3D init_binderfs(); + if (ret) + goto err_init_binderfs_failed; + return ret; =20 +err_init_binderfs_failed: + genl_unregister_family(&binder_nl_family); + err_init_binder_device_failed: hlist_for_each_entry_safe(device, tmp, &binder_devices, hlist) { misc_deregister(&device->miscdev); diff --git a/drivers/android/binder_netlink.c b/drivers/android/binder_netl= ink.c new file mode 100644 index 000000000000..f62fbca3143c --- /dev/null +++ b/drivers/android/binder_netlink.c @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Cl= ause) +/* Do not edit directly, auto-generated from: */ +/* Documentation/netlink/specs/binder.yaml */ +/* YNL-GEN kernel source */ + +#include +#include + +#include "binder_netlink.h" + +#include +#include + +/* Ops table for binder */ +static const struct genl_split_ops binder_nl_ops[] =3D { +}; + +static const struct genl_multicast_group binder_nl_mcgrps[] =3D { + [BINDER_NLGRP_REPORT] =3D { "report", }, +}; + +struct genl_family binder_nl_family __ro_after_init =3D { + .name =3D BINDER_FAMILY_NAME, + .version =3D BINDER_FAMILY_VERSION, + .netnsok =3D true, + .parallel_ops =3D true, + .module =3D THIS_MODULE, + .split_ops =3D binder_nl_ops, + .n_split_ops =3D ARRAY_SIZE(binder_nl_ops), + .mcgrps =3D binder_nl_mcgrps, + .n_mcgrps =3D ARRAY_SIZE(binder_nl_mcgrps), +}; diff --git a/drivers/android/binder_netlink.h b/drivers/android/binder_netl= ink.h new file mode 100644 index 000000000000..f78b8ec54c53 --- /dev/null +++ b/drivers/android/binder_netlink.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Cl= ause) */ +/* Do not edit directly, auto-generated from: */ +/* Documentation/netlink/specs/binder.yaml */ +/* YNL-GEN kernel header */ + +#ifndef _LINUX_BINDER_GEN_H +#define _LINUX_BINDER_GEN_H + +#include +#include + +#include +#include + +enum { + BINDER_NLGRP_REPORT, +}; + +extern struct genl_family binder_nl_family; + +#endif /* _LINUX_BINDER_GEN_H */ diff --git a/include/uapi/linux/android/binder_netlink.h b/include/uapi/lin= ux/android/binder_netlink.h new file mode 100644 index 000000000000..b218f96d6668 --- /dev/null +++ b/include/uapi/linux/android/binder_netlink.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Cl= ause) */ +/* Do not edit directly, auto-generated from: */ +/* Documentation/netlink/specs/binder.yaml */ +/* YNL-GEN uapi header */ + +#ifndef _UAPI_LINUX_ANDROID_BINDER_NETLINK_H +#define _UAPI_LINUX_ANDROID_BINDER_NETLINK_H + +#define BINDER_FAMILY_NAME "binder" +#define BINDER_FAMILY_VERSION 1 + +enum { + BINDER_A_REPORT_ERROR =3D 1, + BINDER_A_REPORT_CONTEXT, + BINDER_A_REPORT_FROM_PID, + BINDER_A_REPORT_FROM_TID, + BINDER_A_REPORT_TO_PID, + BINDER_A_REPORT_TO_TID, + BINDER_A_REPORT_IS_REPLY, + BINDER_A_REPORT_FLAGS, + BINDER_A_REPORT_CODE, + BINDER_A_REPORT_DATA_SIZE, + + __BINDER_A_REPORT_MAX, + BINDER_A_REPORT_MAX =3D (__BINDER_A_REPORT_MAX - 1) +}; + +enum { + BINDER_CMD_REPORT =3D 1, + + __BINDER_CMD_MAX, + BINDER_CMD_MAX =3D (__BINDER_CMD_MAX - 1) +}; + +#define BINDER_MCGRP_REPORT "report" + +#endif /* _UAPI_LINUX_ANDROID_BINDER_NETLINK_H */ --=20 2.50.1.470.g6ba607880d-goog From nobody Tue Dec 16 02:58:40 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 8E1ED2522B4 for ; Fri, 25 Jul 2025 18:38:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468732; cv=none; b=gfKwGQ5+HG3Woht1nOrclniZqQzC5+wJ7yj6VtU/DkMC5g2CVDWA9hA6oZ6dE1Hirm5MNCHHfaATWeYjMZ8H6dEQ4KoJFEk0D2XxG+dJRPbeT6d3FwB6dzPbFocdwlh7QNan2qDcXE98e2aDOWcXbGvhFQJJlWs/0u85FbXU4xo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468732; c=relaxed/simple; bh=w3B6eMOHBjLahJirDSZ+qk4aNUA7eTY19kZ8xkUuHVM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Gmlz4R6+l5gOweFVS9/lghr4ZnQzG8FANB+O5I2JpiejL3w3YomcZwF+yTHxAvK8GKKBhAqeGrfKgtVBdf6WxjWzOVXuNRu/ubXn2CiswIXhmHlw2wCEtaygRPXelmHQAyUPRO7A2ImfAKTKMLKNDxGuxXON/T49d0mnupzG/Lg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--cmllamas.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=bo7pXPfT; arc=none smtp.client-ip=209.85.215.202 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--cmllamas.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="bo7pXPfT" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b34abbcdcf3so1801895a12.1 for ; Fri, 25 Jul 2025 11:38:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1753468731; x=1754073531; 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=0tolIyg+onFM/Vs+iMbCZXFo1uDxs6ZbvglnTYfZXx4=; b=bo7pXPfTobvcrzBD3cgapZj5+D3Wngc1hLfOycdqLMGC/ZxLFvuxcm6txF2Y381sVv XMBNk2jqL9Jj7ah+LP9BUksnUTVHVmdxFzxRmhX98try20g6P+s2wb0wEqEzq22EQJ0+ ReqcW6Ub6NqGSP2m7LP3HgpdLLqwS9BwKep3CbJ7wWwA0H3slUaZzYg+So6lxIUCawbP mX4/TiMvdG+g0B1LQdt/c1Ee4hGowyuE8bhLWT4NYFociJeJqWTbFB3A1FnZVwAlKb1l G7Eyv1EYgBeYcRRBV6ecS0yNYsQUXN3kheGBbMYTstGu0n6SrW1xNxUSJsTwhv1LryIq cifQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753468731; x=1754073531; 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=0tolIyg+onFM/Vs+iMbCZXFo1uDxs6ZbvglnTYfZXx4=; b=t41jKl23+bm5F7qaOz6EhlmL/ArzrqVGrPGhjdtiIblPZw6ed8x3jV8Q7J4JYe6u73 lTd9ZnhLqCi9xZ//7VXNmbY0N+v4FFXDD1lKxBnqtP7K8g7WGboGPYJZTr6AnGUeICvH lHOODRzY+mFQjaF27GziLfO/OuxQw37x8NKW0sxLlZNAEhjQXwYpEB1NpAesZEanFpRZ 1b3EMA2fh54/uXIZh2x/wmP/f4QX/q691McjBXp/X6jeP0Lk3j0ySe7XjBJhjZ2KkTEW ja/1JMqQQ7flkByaD4ikn7LxghoKrub1SgmdxDGfQB1jlDLtFxlJi6T1opES470Ry06c xVpA== X-Forwarded-Encrypted: i=1; AJvYcCU+t11g73Z80yTtURDh8VQ4pnNiB4Jd8L3S1hvdpl/sOQlf2zbs2QGV17oWeUAHwW81KVJ4VN21lb9+GBg=@vger.kernel.org X-Gm-Message-State: AOJu0YwUnhyi808VKVU4YtJvOUbiYip8an6MaRBUQOtFcbrTDavLE/DC LCC+9XZ6cz5uX206HdU895m7XgBLd8Q1NafFaQX7l3ey3CKPiZU0sJ2su/+LZNrNk+bkLR8Zx4G 1okt8ED31e/ckrg== X-Google-Smtp-Source: AGHT+IFQW/i8kOUdRjsXpgwamCzbOi/bLorIQ5DSxgTzYw6hRRyy4AJJJQkz2Dq9WZFz5qrLnV3cEr6OV1P+8g== X-Received: from pga13.prod.google.com ([2002:a05:6a02:4f8d:b0:b3b:cf3d:91f]) (user=cmllamas job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:2445:b0:232:36e3:9a4e with SMTP id adf61e73a8af0-23d701f8204mr5451980637.40.1753468730810; Fri, 25 Jul 2025 11:38:50 -0700 (PDT) Date: Fri, 25 Jul 2025 18:37:47 +0000 In-Reply-To: <20250725183811.409580-1-cmllamas@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250725183811.409580-1-cmllamas@google.com> X-Mailer: git-send-email 2.50.1.470.g6ba607880d-goog Message-ID: <20250725183811.409580-5-cmllamas@google.com> Subject: [PATCH v19 4/5] binder: add transaction_report feature entry From: Carlos Llamas To: Alice Ryhl , Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan , Shuah Khan , Yu-Ting Tseng , Li Li , Ba Jing Cc: Tiffany Yang , John Stultz , Shai Barack , "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" , kernel-team@android.com, linux-kernel@vger.kernel.org, Jakub Kicinski , "open list:KERNEL SELFTEST FRAMEWORK" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Li Li Add "transaction_report" to the binderfs feature list, to help userspace determine if the "BINDER_CMD_REPORT" generic netlink api is supported by the binder driver. Signed-off-by: Li Li Signed-off-by: Carlos Llamas --- drivers/android/binderfs.c | 8 ++++++++ .../selftests/filesystems/binderfs/binderfs_test.c | 1 + 2 files changed, 9 insertions(+) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index 4f827152d18e..f74a7e380261 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -59,6 +59,7 @@ struct binder_features { bool oneway_spam_detection; bool extended_error; bool freeze_notification; + bool transaction_report; }; =20 static const struct constant_table binderfs_param_stats[] =3D { @@ -76,6 +77,7 @@ static struct binder_features binder_features =3D { .oneway_spam_detection =3D true, .extended_error =3D true, .freeze_notification =3D true, + .transaction_report =3D true, }; =20 static inline struct binderfs_info *BINDERFS_SB(const struct super_block *= sb) @@ -616,6 +618,12 @@ static int init_binder_features(struct super_block *sb) if (IS_ERR(dentry)) return PTR_ERR(dentry); =20 + dentry =3D binderfs_create_file(dir, "transaction_report", + &binder_features_fops, + &binder_features.transaction_report); + if (IS_ERR(dentry)) + return PTR_ERR(dentry); + return 0; } =20 diff --git a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c b= /tools/testing/selftests/filesystems/binderfs/binderfs_test.c index 81db85a5cc16..39a68078a79b 100644 --- a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c +++ b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c @@ -65,6 +65,7 @@ static int __do_binderfs_test(struct __test_metadata *_me= tadata) "oneway_spam_detection", "extended_error", "freeze_notification", + "transaction_report", }; =20 change_mountns(_metadata); --=20 2.50.1.470.g6ba607880d-goog From nobody Tue Dec 16 02:58:40 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (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 9A5B1257AD1 for ; Fri, 25 Jul 2025 18:38:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468736; cv=none; b=QNAzzL1KsIDcxUFL30oHsjP4afaTrJarCmC8hFMaKU43ZwKhYE6VkjXfwg1wos921VsIomYwU1eH737ho3GOu/h3Ia4bdtWmEJ/TdpgbDcW5umlA+lRtTlflyRHF9asfmaMNRpRYUvVlb8U/B+mRYRpXeqRzdK+MAYHNs4gCdeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753468736; c=relaxed/simple; bh=HNdw2Y2WCnhZqIPQ+M+4zVLBT3PzyW7Ihk8KCE6gAxo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rfgXhJuC8dNydpYreaqBXd5Pz5xSS5Vrh0zvtEW9h8K+Za43rO9/+GLlC6Rq56h5ufzASVF/uEP+cHlLZq3RTAvqQA+pf8B9hHVNOvxu615vaI4/E8xUYjSrwnLcyLSiAp4qpozlxtJzBTAKvbsyHgYuLwMG3s/SnWy19TnXzsQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--cmllamas.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gdnHZJoe; arc=none smtp.client-ip=209.85.215.201 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--cmllamas.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gdnHZJoe" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b2fa1a84566so1977566a12.1 for ; Fri, 25 Jul 2025 11:38:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1753468733; x=1754073533; 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=BtHJWM2gXUsv6xzq7C6P5vZ0vTx2NB+Xsxgc7a7A5cA=; b=gdnHZJoesypWylctChe9EPLBCzsFtbH8dKVQyz8KKzzhmSmFKrKW1eIzlAmq9Sflx9 RSh3T8V4sVMTiXuDqhK6d8HUOSAqE8/7BXK14Uy4A5CvbIuImoma4ZPo0BTVsOLfey7g z0+LqPzwq4w15rUYwUdMAkXoqv5fg3Os5jyuDp9wp1h4jAcZVZ/fTdYT36po+5ZI5XpX xPALA2Hvuh+9Ly2OUjNWQdxYbm0j1h69IHpa/fzLWCs/7S8Md89/OLF3PIJaVY5Y5Er8 ynYFnpzoPrx9kwAKHiRtNYFv28uzUlzcAJ3F+I4YMoOHlPDScW4FyEN9HmrvD8ALxTTS jMzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753468733; x=1754073533; 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=BtHJWM2gXUsv6xzq7C6P5vZ0vTx2NB+Xsxgc7a7A5cA=; b=B6JDJNpeFOD9IP1UcKjpC7Yme/PU9ZtLACfjyjg47zdLgPHYRHGuKFcpe3UkBUvVGX Kh/1NEL0oVKU6clE2HW9lj4D8bKeoleHB99qskFm1Bxovs9VDoUS28ZhDgZbqc+A/zuB SAOCi+iyzH+3S1Zdy+C18WHHs97Rbtc3b2ta2VSfqDAjjwcvG8NncZRCiiAasjl3krTm FhPfHqhB2gKvBv5JO7DrE2Ld8Ls48rZfS5cfFO3p+Dy+EgrsLHWwUYZXeUbUKVSL/WMc pPivrg6kA4/uoBImzbf2+5euue59eCIiqce6MDplpt+EJx2YT476+3UGaGjJbzm2kd4n z9hg== X-Forwarded-Encrypted: i=1; AJvYcCWyvy2KFpIkPVOsYYPFYTPDmc2UgpJ6+M6KGRCYS3Ayu3x3SuW0Jrv7bL8Dz/oHWE1Egxef1/uxzTQPD4M=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4wesv/z/gXw4GrveiNxzn/lUZoQWMiZqh8nUYnIQfVBqQ7yIw Jdx/o2DPRH6Val9RJTn574Z63qPBcRKuCabJ1EWDULkacashwJPVFnG+fs7fNdltbuIGvWz8VyK Yd9d0DAiGRzoqkg== X-Google-Smtp-Source: AGHT+IHehI44CPZIxqVRMYAOdwAyVvBYGJhn1tV9DCg+jG+3LDBGdiqqf60J1xPbMKfHKRoH4sberB1zlyk2rg== X-Received: from plbmm6.prod.google.com ([2002:a17:903:a06:b0:236:9738:9180]) (user=cmllamas job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:234c:b0:237:f7f8:7453 with SMTP id d9443c01a7336-23fb313a5d9mr48044665ad.51.1753468732937; Fri, 25 Jul 2025 11:38:52 -0700 (PDT) Date: Fri, 25 Jul 2025 18:37:48 +0000 In-Reply-To: <20250725183811.409580-1-cmllamas@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250725183811.409580-1-cmllamas@google.com> X-Mailer: git-send-email 2.50.1.470.g6ba607880d-goog Message-ID: <20250725183811.409580-6-cmllamas@google.com> Subject: [PATCH v19 5/5] binder: add tracepoint for netlink reports From: Carlos Llamas To: Alice Ryhl , Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Carlos Llamas , Suren Baghdasaryan Cc: Tiffany Yang , John Stultz , Shai Barack , "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" , kernel-team@android.com, linux-kernel@vger.kernel.org, Jakub Kicinski Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a tracepoint to capture the same details that are being sent through the generic netlink interface during transaction failures. This provides a useful debugging tool to observe the events independently from the netlink listeners. Signed-off-by: Carlos Llamas --- drivers/android/binder.c | 2 ++ drivers/android/binder_trace.h | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 0d37eca514f9..695c1631703b 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3014,6 +3014,8 @@ static void binder_netlink_report(struct binder_proc = *proc, BINDER_NLGRP_REPORT)) return; =20 + trace_binder_netlink_report(context, t, data_size, error); + skb =3D genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL); if (!skb) return; diff --git a/drivers/android/binder_trace.h b/drivers/android/binder_trace.h index 97a78e5623db..fa5eb61cf580 100644 --- a/drivers/android/binder_trace.h +++ b/drivers/android/binder_trace.h @@ -402,6 +402,43 @@ TRACE_EVENT(binder_return, "unknown") ); =20 +TRACE_EVENT(binder_netlink_report, + TP_PROTO(const char *context, + struct binder_transaction *t, + u32 data_size, + u32 error), + TP_ARGS(context, t, data_size, error), + TP_STRUCT__entry( + __field(const char *, context) + __field(u32, error) + __field(int, from_pid) + __field(int, from_tid) + __field(int, to_pid) + __field(int, to_tid) + __field(bool, is_reply) + __field(unsigned int, flags) + __field(unsigned int, code) + __field(size_t, data_size) + ), + TP_fast_assign( + __entry->context =3D context; + __entry->error =3D error; + __entry->from_pid =3D t->from_pid; + __entry->from_tid =3D t->from_tid; + __entry->to_pid =3D t->to_proc ? t->to_proc->pid : 0; + __entry->to_tid =3D t->to_thread ? t->to_thread->pid : 0; + __entry->is_reply =3D t->is_reply; + __entry->flags =3D t->flags; + __entry->code =3D t->code; + __entry->data_size =3D data_size; + ), + TP_printk("from %d:%d to %d:%d context=3D%s error=3D%d is_reply=3D%d flag= s=3D0x%x code=3D0x%x size=3D%zu", + __entry->from_pid, __entry->from_tid, + __entry->to_pid, __entry->to_tid, + __entry->context, __entry->error, __entry->is_reply, + __entry->flags, __entry->code, __entry->data_size) +); + #endif /* _BINDER_TRACE_H */ =20 #undef TRACE_INCLUDE_PATH --=20 2.50.1.470.g6ba607880d-goog