From nobody Mon Jun 15 10:12:43 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7BA1AC4332F for ; Fri, 29 Apr 2022 23:57:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381883AbiD3AAZ (ORCPT ); Fri, 29 Apr 2022 20:00:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1381895AbiD3AAY (ORCPT ); Fri, 29 Apr 2022 20:00:24 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4CBF73DDD5 for ; Fri, 29 Apr 2022 16:56:54 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id w3-20020a17090ac98300b001b8b914e91aso4742614pjt.0 for ; Fri, 29 Apr 2022 16:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=xFhTGH9QeJ5qiB/zXRnDTivkTaz87eqIQdVVal+AQIE=; b=jsTFJVAZ4rGCpZ4ReIt8zBt6uWxZBtjqmkI/o/IJC9aS5dGeOFyznv/dB2oUdWWTEx htv3+XKz3FWRL5ut86hgRwU+3xBqQI/LSj0kcYgZ+hSwTkxrmBJ7cSOsar3iBwmcGGmM vgjqOkvrqOYb+zcWQwfxyMZI8OkfXRBqmS4cKRdN7EcmOw+HEaO+sz+Pm5H0BWj8uFp2 +qNwoB+xwjEjqcH7WS1eZLzijKiEEbBiMkK7NKvNnbqjy+++1kA/sgYAedlCcRMTuyvR qV+zG6n79jP6ZjxTGZoM2uk5cs0E/dujv6nH0wo3qmTaFVL9YBytG81ZTK/QBFdmxS+0 R7PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=xFhTGH9QeJ5qiB/zXRnDTivkTaz87eqIQdVVal+AQIE=; b=Gn8XzXSPg1Tvp0D4DVt2i93F5bgLmxe5gcwXWNreABO6XPVPr23aP/u6ltwKUXjtmU o4cm0WygDe4U4r6LQ3swbDog6OuS5312K365Xoz/FMsS537uTDB7z48mFMskDxImwRYK jDd79wKJ8sKF1vy9PufxR9aIhre3/DFCve6qyQr8Bsiq4Bqk23b7ZXkcEpU9XMFTTLIG LwumgEp5v++KX1CIUddAuVHCDr2VDf1EoHpGO7M3unh1Svo6getUM+2qjRS+BvYsOLGS 6zDApDGbO++b31V8oyw9GiA3eY893p7RkxXbxPhuf4W11CUowE3gluwfxgIQTnYRQPIF V35A== X-Gm-Message-State: AOAM532TLfQQeruWqkRta1NdijpTeR/VWx+Z1uTXKbrvflbxTkF//MhB jGLZGDUisbLL6D1sukmSWj2INlJ3l2GBXg== X-Google-Smtp-Source: ABdhPJxryxQ/W5f0mnRCA3VXeYsHPAOW3KmhV77eCRQVRyQ7xJ2vWAUFMEAVfxyiYM+pYR8BJB0aKpps/mGfzw== X-Received: from zllamas.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:4c]) (user=cmllamas job=sendgmr) by 2002:a17:902:f70a:b0:153:88c7:774 with SMTP id h10-20020a170902f70a00b0015388c70774mr1440396plo.166.1651276613804; Fri, 29 Apr 2022 16:56:53 -0700 (PDT) Date: Fri, 29 Apr 2022 23:56:40 +0000 In-Reply-To: <20220429235644.697372-1-cmllamas@google.com> Message-Id: <20220429235644.697372-2-cmllamas@google.com> Mime-Version: 1.0 References: <20220429235644.697372-1-cmllamas@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH v2 1/5] binder: add failed transaction logging info From: Carlos Llamas To: Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Christian Brauner , Suren Baghdasaryan Cc: Joel Fernandes , Hridya Valsaraju , kernel-team@android.com, linux-kernel@vger.kernel.org, Shuah Khan , Arnd Bergmann , Li Li , Masahiro Yamada , Carlos Llamas , linux-kselftest@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make sure we log relevant information about failed transactions such as the target proc/thread, call type and transaction id. These details are particularly important when debugging userspace issues. Signed-off-by: Carlos Llamas Acked-by: Christian Brauner (Microsoft) Acked-by: Todd Kjos --- drivers/android/binder.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 8351c5638880..f0885baa53a1 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3459,8 +3459,12 @@ static void binder_transaction(struct binder_proc *p= roc, } =20 binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, - "%d:%d transaction failed %d/%d, size %lld-%lld line %d\n", - proc->pid, thread->pid, return_error, return_error_param, + "%d:%d transaction %s to %d:%d failed %d/%d/%d, size %lld-%lld line= %d\n", + proc->pid, thread->pid, reply ? "reply" : + (tr->flags & TF_ONE_WAY ? "async" : "call"), + target_proc ? target_proc->pid : 0, + target_thread ? target_thread->pid : 0, + t_debug_id, return_error, return_error_param, (u64)tr->data_size, (u64)tr->offsets_size, return_error_line); =20 --=20 2.36.0.464.gb9c8b46e94-goog From nobody Mon Jun 15 10:12:43 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49690C433EF for ; Fri, 29 Apr 2022 23:57:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381929AbiD3AAe (ORCPT ); Fri, 29 Apr 2022 20:00:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1381901AbiD3AAY (ORCPT ); Fri, 29 Apr 2022 20:00:24 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D2273EA81 for ; Fri, 29 Apr 2022 16:56:56 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id l5-20020a170902ec0500b0015cf1cfa4eeso4854953pld.17 for ; Fri, 29 Apr 2022 16:56:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=Y+Q/IXhaWsRAPmKMqULGXX6gjgm8gHDF6bR4ysCjcTo=; b=H/13hmb9fVxI5t1ZecWpaw4gTqW7NjrFKShggGtAwvAf8hZmL82HID/5Map25vz02f ktp6VKa70yyumJRkYLfJaRo9vDQ6YyB+n7lpORTxXymQSBN4ANL7B8UHNPnPjY1M2u6P CbG0uV8ARLnKoGfgidygLgxZTAttlvlhnjHcGLGaaRR2WelA8P4TW0Xg/Da6c1HMDkXd D38+qOA1Q8G3Fj+ZJgfQNcXgRB5WK8npWF7gC3eLrTqMVQi+AekZP9J1sM/iatsIvodG HakktZ7TjQk2UsmNZHuaLxjG8VZ6nU+v8cOBjoKEvrZoUvK3JdEmts6GnFRPJPQNymZX v+TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Y+Q/IXhaWsRAPmKMqULGXX6gjgm8gHDF6bR4ysCjcTo=; b=jajmN/OnZJUcbA78fgZitlFLDdpEy29NJmqcs0wB1EOwk6JlrkbsLPPiMZNsE3Llto vO1i8DqgSc0cY+7oFTix/uJjj0TGu57qvCUfa2jEK9mySZf3OrHGd0FeNRfIcvi2xp6x hdimBIWNrfKG/Vium3aFKAiSfZrj7RGjnXPUC2H+ty8HeKiO9gXoSzK4IelodGzOIxav tpuiKKncK+LvYUrMHfvzWuusMOgfB8zxLyU3S1Ej8nTG3RCTTmOCy6RlN0hO3zuiEwxA Fctxz4yXeZgi7EBSEIIjm56VSEdzHxrpL3z8RhfZuQ0oTUXTrCf6NDjnEs+cvVPrNyXA HJwg== X-Gm-Message-State: AOAM531gWa+Y3a3se8oP4UlXnoD2XeE5k1hF6G6dvbx3ETkuHT64+20o fgjujGVbNmfHJkThHYSsPg0Fo0ihEk7oZQ== X-Google-Smtp-Source: ABdhPJx1Wjp0vuZg+qCJHHMrbauEyHFfDDCreh69orOH9EOfyhL5teusuGJLQDzJe0MC0WXjrog7rMPbfFQzzw== X-Received: from zllamas.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:4c]) (user=cmllamas job=sendgmr) by 2002:a05:6a00:1494:b0:50d:4b12:8dfa with SMTP id v20-20020a056a00149400b0050d4b128dfamr1188736pfu.43.1651276615642; Fri, 29 Apr 2022 16:56:55 -0700 (PDT) Date: Fri, 29 Apr 2022 23:56:41 +0000 In-Reply-To: <20220429235644.697372-1-cmllamas@google.com> Message-Id: <20220429235644.697372-3-cmllamas@google.com> Mime-Version: 1.0 References: <20220429235644.697372-1-cmllamas@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH v2 2/5] binder: add BINDER_GET_EXTENDED_ERROR ioctl From: Carlos Llamas To: Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Christian Brauner , Suren Baghdasaryan Cc: Joel Fernandes , Hridya Valsaraju , kernel-team@android.com, linux-kernel@vger.kernel.org, Shuah Khan , Arnd Bergmann , Li Li , Masahiro Yamada , Carlos Llamas , linux-kselftest@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Provide a userspace mechanism to pull precise error information upon failed operations. Extending the current error codes returned by the interfaces allows userspace to better determine the course of action. This could be for instance, retrying a failed transaction at a later point and thus offloading the error handling from the driver. Signed-off-by: Carlos Llamas Acked-by: Christian Brauner (Microsoft) Acked-by: Todd Kjos --- drivers/android/binder.c | 60 +++++++++++++++++++++++++++++ drivers/android/binder_internal.h | 3 ++ include/uapi/linux/android/binder.h | 16 ++++++++ 3 files changed, 79 insertions(+) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index f0885baa53a1..b9df0c8a68d3 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -147,6 +147,13 @@ module_param_call(stop_on_user_error, binder_set_stop_= on_user_error, binder_stop_on_user_error =3D 2; \ } while (0) =20 +#define binder_set_extended_error(ee, _id, _command, _param) \ + do { \ + (ee)->id =3D _id; \ + (ee)->command =3D _command; \ + (ee)->param =3D _param; \ + } while (0) + #define to_flat_binder_object(hdr) \ container_of(hdr, struct flat_binder_object, hdr) =20 @@ -2697,6 +2704,24 @@ static struct binder_node *binder_get_node_refs_for_= txn( return target_node; } =20 +static void binder_set_txn_from_error(struct binder_transaction *t, int id, + uint32_t command, int32_t param) +{ + struct binder_thread *from =3D binder_get_txn_from_and_acq_inner(t); + + if (!from) { + /* annotation for sparse */ + __release(&from->proc->inner_lock); + return; + } + + /* don't override existing errors */ + if (from->ee.command =3D=3D BR_OK) + binder_set_extended_error(&from->ee, id, command, param); + binder_inner_proc_unlock(from->proc); + binder_thread_dec_tmpref(from); +} + static void binder_transaction(struct binder_proc *proc, struct binder_thread *thread, struct binder_transaction_data *tr, int reply, @@ -2742,6 +2767,10 @@ static void binder_transaction(struct binder_proc *p= roc, e->offsets_size =3D tr->offsets_size; strscpy(e->context_name, proc->context->name, BINDERFS_MAX_NAME); =20 + binder_inner_proc_lock(proc); + binder_set_extended_error(&thread->ee, t_debug_id, BR_OK, 0); + binder_inner_proc_unlock(proc); + if (reply) { binder_inner_proc_lock(proc); in_reply_to =3D thread->transaction_stack; @@ -3487,10 +3516,16 @@ static void binder_transaction(struct binder_proc *= proc, =20 BUG_ON(thread->return_error.cmd !=3D BR_OK); if (in_reply_to) { + binder_set_txn_from_error(in_reply_to, t_debug_id, + return_error, return_error_param); thread->return_error.cmd =3D BR_TRANSACTION_COMPLETE; binder_enqueue_thread_work(thread, &thread->return_error.work); binder_send_failed_reply(in_reply_to, return_error); } else { + binder_inner_proc_lock(proc); + binder_set_extended_error(&thread->ee, t_debug_id, + return_error, return_error_param); + binder_inner_proc_unlock(proc); thread->return_error.cmd =3D return_error; binder_enqueue_thread_work(thread, &thread->return_error.work); } @@ -4628,6 +4663,7 @@ static struct binder_thread *binder_get_thread_ilocke= d( thread->return_error.cmd =3D BR_OK; thread->reply_error.work.type =3D BINDER_WORK_RETURN_ERROR; thread->reply_error.cmd =3D BR_OK; + thread->ee.command =3D BR_OK; INIT_LIST_HEAD(&new_thread->waiting_thread_node); return thread; } @@ -5066,6 +5102,25 @@ static int binder_ioctl_get_freezer_info( return 0; } =20 +static int binder_ioctl_get_extended_error(struct binder_thread *thread, + void __user *ubuf) +{ + struct binder_extended_error *ee =3D &thread->ee; + + binder_inner_proc_lock(thread->proc); + if (copy_to_user(ubuf, ee, sizeof(*ee))) { + binder_inner_proc_unlock(thread->proc); + return -EFAULT; + } + + ee->id =3D 0; + ee->command =3D BR_OK; + ee->param =3D 0; + binder_inner_proc_unlock(thread->proc); + + return 0; +} + static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned lon= g arg) { int ret; @@ -5274,6 +5329,11 @@ static long binder_ioctl(struct file *filp, unsigned= int cmd, unsigned long arg) binder_inner_proc_unlock(proc); break; } + case BINDER_GET_EXTENDED_ERROR: + ret =3D binder_ioctl_get_extended_error(thread, ubuf); + if (ret < 0) + goto err; + break; default: ret =3D -EINVAL; goto err; diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_int= ernal.h index d6b6b8cb7346..7c366a854125 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -480,6 +480,8 @@ struct binder_proc { * (only accessed by this thread) * @reply_error: transaction errors reported by target thread * (protected by @proc->inner_lock) + * @ee: extended error information from this thread + * (protected by @proc->inner_lock) * @wait: wait queue for thread work * @stats: per-thread statistics * (atomics, no lock needed) @@ -504,6 +506,7 @@ struct binder_thread { bool process_todo; struct binder_error return_error; struct binder_error reply_error; + struct binder_extended_error ee; wait_queue_head_t wait; struct binder_stats stats; atomic_t tmp_ref; diff --git a/include/uapi/linux/android/binder.h b/include/uapi/linux/andro= id/binder.h index 11157fae8a8e..e6ee8cae303b 100644 --- a/include/uapi/linux/android/binder.h +++ b/include/uapi/linux/android/binder.h @@ -236,6 +236,21 @@ struct binder_frozen_status_info { __u32 async_recv; }; =20 +/* struct binder_extened_error - extended error information + * @id: identifier for the failed operation + * @command: command as defined by binder_driver_return_protocol + * @param: parameter holding a negative errno value + * + * Used with BINDER_GET_EXTENDED_ERROR. This extends the error information + * returned by the driver upon a failed operation. Userspace can pull this + * data to properly handle specific error scenarios. + */ +struct binder_extended_error { + __u32 id; + __u32 command; + __s32 param; +}; + #define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read) #define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, __s64) #define BINDER_SET_MAX_THREADS _IOW('b', 5, __u32) @@ -249,6 +264,7 @@ struct binder_frozen_status_info { #define BINDER_FREEZE _IOW('b', 14, struct binder_freeze_info) #define BINDER_GET_FROZEN_INFO _IOWR('b', 15, struct binder_frozen_status= _info) #define BINDER_ENABLE_ONEWAY_SPAM_DETECTION _IOW('b', 16, __u32) +#define BINDER_GET_EXTENDED_ERROR _IOWR('b', 17, struct binder_extended_er= ror) =20 /* * NOTE: Two special error codes you should check for when calling --=20 2.36.0.464.gb9c8b46e94-goog From nobody Mon Jun 15 10:12:43 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1939DC433EF for ; Fri, 29 Apr 2022 23:57:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381913AbiD3AAh (ORCPT ); Fri, 29 Apr 2022 20:00:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1381906AbiD3AAY (ORCPT ); Fri, 29 Apr 2022 20:00:24 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D4C73EBA3 for ; Fri, 29 Apr 2022 16:56:58 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id bq10-20020a056a000e0a00b0050db5472b04so1376856pfb.11 for ; Fri, 29 Apr 2022 16:56:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=Dt5qrG3wcawTErF8gAeFZK9PLafcOjd56PtZwr2P1S8=; b=eshRTYicZVODQxvfu2H6YO19874gPpb4JmB7SiyH+r8v88e1yy0CyzIJ6cXRpS745p jIC4LK42qi3w2enjgiMngcBNjQnC4475GA/6h4RvXU5asE1qcG1JZ/ZpNK1QDWihmeqB 8q513S7+dyCzm3lHWFnB1UZkVGofAgAa5M0WfTcvSS88Q8rgBbvV2oWa5pERuT1UGP6R UtwNrKYpvPg91GSCyF8yOBhQcCRhRliEe62xPWYLLXIZQCJUNONCJRSXGVueGm2ok86j oBlI4cofJniKQVjlhPDZfGUNn8xCqsEhTGsq3Lm8EXKyVW+UXf54v4Tsu8Ao9H8KvVAK JN4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Dt5qrG3wcawTErF8gAeFZK9PLafcOjd56PtZwr2P1S8=; b=0rFSM+B1x+7Dk9sKBPiuyRj3SU7bNu8b92Bt9F8IuxU0Nu1KxqCAfEDs8L8TdmIJyT wf/fM6DzkIrrnTsIQI2W5BWIAE/ZzRkBiTTod05/+Fg74+3AAkjGa3vk2tFY6hqEP2/5 6PFnLRGTWwhjdkFrM8aOn42E1AoN4s/9B0VeTBQBonAzt+VUjyBc5fkxE93ITsP81epx yHBIqCq3c96/CiNJyuNcy5MPfwm2Y3CjzCmc8TM0GT+xlOnwv0JC/Hxg5ALEX5uux4Rm B5g7+/bAK6xRlXTGVXyKblkDI3FRU4tuVl5limPeLtkHzXLx9FoM6q84GQcVjbKNIRuE WOwQ== X-Gm-Message-State: AOAM531xR9JkXcS99yljDlGFuSANnSq2bXwnOPelRNDPeWvWOD4AA3/a hRfnxwpcYtF0zRR6wV77WLeSwqcytGRO7A== X-Google-Smtp-Source: ABdhPJxvR8J99tlCFhva8S09DUJDaWOvMzz82uuZd3XNH08tRnd0NCsrWrBbHWNRE5hNnisw2+nFWNMoE+ESgA== X-Received: from zllamas.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:4c]) (user=cmllamas job=sendgmr) by 2002:a17:90a:c986:b0:1d9:56e7:4e83 with SMTP id w6-20020a17090ac98600b001d956e74e83mr470128pjt.1.1651276617250; Fri, 29 Apr 2022 16:56:57 -0700 (PDT) Date: Fri, 29 Apr 2022 23:56:42 +0000 In-Reply-To: <20220429235644.697372-1-cmllamas@google.com> Message-Id: <20220429235644.697372-4-cmllamas@google.com> Mime-Version: 1.0 References: <20220429235644.697372-1-cmllamas@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH v2 3/5] binderfs: add extended_error feature entry From: Carlos Llamas To: Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Christian Brauner , Suren Baghdasaryan Cc: Joel Fernandes , Hridya Valsaraju , kernel-team@android.com, linux-kernel@vger.kernel.org, Shuah Khan , Arnd Bergmann , Li Li , Masahiro Yamada , Carlos Llamas , linux-kselftest@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add extended_error to the binderfs feature list, to help userspace determine whether the BINDER_GET_EXTENDED_ERROR ioctl is supported by the binder driver. Signed-off-by: Carlos Llamas Acked-by: Todd Kjos Reviewed-by: Christian Brauner (Microsoft) --- 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 e3605cdd4335..6c5e94f6cb3a 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -60,6 +60,7 @@ enum binderfs_stats_mode { =20 struct binder_features { bool oneway_spam_detection; + bool extended_error; }; =20 static const struct constant_table binderfs_param_stats[] =3D { @@ -75,6 +76,7 @@ static const struct fs_parameter_spec binderfs_fs_paramet= ers[] =3D { =20 static struct binder_features binder_features =3D { .oneway_spam_detection =3D true, + .extended_error =3D true, }; =20 static inline struct binderfs_info *BINDERFS_SB(const struct super_block *= sb) @@ -615,6 +617,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, "extended_error", + &binder_features_fops, + &binder_features.extended_error); + 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 0315955ff0f4..9409bb136d95 100644 --- a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c +++ b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c @@ -64,6 +64,7 @@ static int __do_binderfs_test(struct __test_metadata *_me= tadata) device_path[sizeof(P_tmpdir "/binderfs_XXXXXX/") + BINDERFS_MAX_NAME]; static const char * const binder_features[] =3D { "oneway_spam_detection", + "extended_error", }; =20 change_mountns(_metadata); --=20 2.36.0.464.gb9c8b46e94-goog From nobody Mon Jun 15 10:12:43 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D54BC433EF for ; Fri, 29 Apr 2022 23:57:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381914AbiD3AA2 (ORCPT ); Fri, 29 Apr 2022 20:00:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1381902AbiD3AAY (ORCPT ); Fri, 29 Apr 2022 20:00:24 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D2B53EA84 for ; Fri, 29 Apr 2022 16:56:59 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id k2-20020a170902ba8200b0015613b12004so4851444pls.22 for ; Fri, 29 Apr 2022 16:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=Y2U6N/SaFktITLsdt43NK/igdRg3kVW252737IBt0LU=; b=ZGtQirrtNgXHKRVauFBtG+/sgxRYvk5XZr0WfLUwxPVfzq71bBqkfVmqmZJFCCYzAM EeR6l9JIrhRPwfAFrPtu7ReRC9acMq0O2cxebjqEH3+dd7Aq7Xw5fn7FO86LDCdjh1vM McqYBJcvqSt4izZK5Cx2P14o4+3iJDE5hrGA8ZUvln3LftkJXlqFqhiijXAm4YzEbr1K HgSew1IkNTU2D6cX62XJfYwiOMP9cdMsU3P6sWd+5gEHoT4S/NuKeGQ7LioUaQU9n7gU 8rRW4CN8j7cvRn89ri03+6o6a3hs0vGLtCagVgA7AWQMLAcA6hmDMaFTk6YTalDxwADS fsNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Y2U6N/SaFktITLsdt43NK/igdRg3kVW252737IBt0LU=; b=5ACUWeKKMtC75MRY/h3Azb+8ffy1/nxTset2KwamGSg73xneZD/gScBdCRP4BD3d0u D6XqUgZzz9poazb1Q9C//9Lv/zQ+tJh8Iwe7j4CYmajQyIDTorrXX8eGxrt9a8J8yYH7 pNpbrw9eeSBPsg2mUyeJfzR4Nu+Mofmzw43MAWXdjE3YvXGVJz3BtGnWdZvW1qKzJkza DGxHwl50atdXo3VryiBXIxcWzJ4bIJrGI/iu5EH65B1oNF0/988h0DVLFCHLDYllKgyu UMSacomNj8/PzCebuMZsG4SruPiMsO9Yy+9McqbA38VL+6D3b1v5IVzx7Qw70ChO2SCl VgAw== X-Gm-Message-State: AOAM532Xsow3S35szZ9GBc0UKyBvfbYb7HjCmnHmWue5GlBweRK18ERj 0rzIdtGeiOOvQPJ19AznrcznY2LPHvoqMw== X-Google-Smtp-Source: ABdhPJybU3tuDpqq8Uoh7B87O4KK/KSqVfWaE8DjxnMMELo/U7FUT5BAmeuLOCGT+nBWxSAB5NqgEkWT32gRSg== X-Received: from zllamas.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:4c]) (user=cmllamas job=sendgmr) by 2002:a17:90a:3486:b0:1d9:3abd:42ed with SMTP id p6-20020a17090a348600b001d93abd42edmr6692184pjb.32.1651276619241; Fri, 29 Apr 2022 16:56:59 -0700 (PDT) Date: Fri, 29 Apr 2022 23:56:43 +0000 In-Reply-To: <20220429235644.697372-1-cmllamas@google.com> Message-Id: <20220429235644.697372-5-cmllamas@google.com> Mime-Version: 1.0 References: <20220429235644.697372-1-cmllamas@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH v2 4/5] binder: convert logging macros into functions From: Carlos Llamas To: Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Christian Brauner , Suren Baghdasaryan Cc: Joel Fernandes , Hridya Valsaraju , kernel-team@android.com, linux-kernel@vger.kernel.org, Shuah Khan , Arnd Bergmann , Li Li , Masahiro Yamada , Carlos Llamas , linux-kselftest@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Converting binder_debug() and binder_user_error() macros into functions reduces the overall object size by 16936 bytes when cross-compiled with aarch64-linux-gnu-gcc 11.2.0: $ size drivers/android/binder.o.{old,new} text data bss dec hex filename 77935 6168 20264 104367 197af drivers/android/binder.o.old 65551 1616 20264 87431 15587 drivers/android/binder.o.new This is particularly beneficial to functions binder_transaction() and binder_thread_write() which repeatedly use these macros and are both part of the critical path for all binder transactions. $ nm --size vmlinux.{old,new} |grep ' binder_transaction$' 0000000000002f60 t binder_transaction 0000000000002358 t binder_transaction $ nm --size vmlinux.{old,new} |grep binder_thread_write 0000000000001c54 t binder_thread_write 00000000000014a8 t binder_thread_write Signed-off-by: Carlos Llamas Acked-by: Christian Brauner (Microsoft) Acked-by: Todd Kjos --- drivers/android/binder.c | 41 ++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index b9df0c8a68d3..bfb21e258427 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -133,19 +133,36 @@ static int binder_set_stop_on_user_error(const char *= val, module_param_call(stop_on_user_error, binder_set_stop_on_user_error, param_get_int, &binder_stop_on_user_error, 0644); =20 -#define binder_debug(mask, x...) \ - do { \ - if (binder_debug_mask & mask) \ - pr_info_ratelimited(x); \ - } while (0) +static __printf(2, 3) void binder_debug(int mask, const char *format, ...) +{ + struct va_format vaf; + va_list args; =20 -#define binder_user_error(x...) \ - do { \ - if (binder_debug_mask & BINDER_DEBUG_USER_ERROR) \ - pr_info_ratelimited(x); \ - if (binder_stop_on_user_error) \ - binder_stop_on_user_error =3D 2; \ - } while (0) + if (binder_debug_mask & mask) { + va_start(args, format); + vaf.va =3D &args; + vaf.fmt =3D format; + pr_info_ratelimited("%pV", &vaf); + va_end(args); + } +} + +static __printf(1, 2) void binder_user_error(const char *format, ...) +{ + struct va_format vaf; + va_list args; + + if (binder_debug_mask & BINDER_DEBUG_USER_ERROR) { + va_start(args, format); + vaf.va =3D &args; + vaf.fmt =3D format; + pr_info_ratelimited("%pV", &vaf); + va_end(args); + } + + if (binder_stop_on_user_error) + binder_stop_on_user_error =3D 2; +} =20 #define binder_set_extended_error(ee, _id, _command, _param) \ do { \ --=20 2.36.0.464.gb9c8b46e94-goog From nobody Mon Jun 15 10:12:43 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E42C1C433EF for ; Fri, 29 Apr 2022 23:57:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381945AbiD3AAj (ORCPT ); Fri, 29 Apr 2022 20:00:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60680 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1381907AbiD3AAY (ORCPT ); Fri, 29 Apr 2022 20:00:24 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94CC33ED0B for ; Fri, 29 Apr 2022 16:57:01 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id i19-20020aa79093000000b0050d44b83506so4835509pfa.22 for ; Fri, 29 Apr 2022 16:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=AO68uGU9cD6By78uqlUxDf+zWnjVaF+K9cH18r17tUo=; b=B7o7bsYL5gMDJ2VeneBvsWGodAd55b8taoMtQXFxhSvJJmNWfGghs04wH7wnTeDCL/ iUstM8trkb6Qx2m8s/PQrcno5PKfBDyAOp5VGjDIbWPRN0XRhskuxP4rWQDza2pUv5G+ Y5FL5NDk7aDoIYeEdBjUhKDafQnnO2Fo3jGEiDT8Sn5UW1K5G3v/eVGXqC9yz7+spDc1 xa4inZkqJz/dYIMBcrTO60h0zKY9SeBitGyA+Xnbg4l4SrOHH9T/zKcDkNgarteJOw3M lgHlURSlaDF7CcWLzBtvRLLT7tvSFfHvocuYKinsHSrvQcNTsjBT7JNsQgTr3yuFuNoN oXfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=AO68uGU9cD6By78uqlUxDf+zWnjVaF+K9cH18r17tUo=; b=53/qA0Q8+hcnibBcp9edzCHuC7SL0j0ypqNc3y/uxIsIEntR24dDLXNXg9VtatiUek shWM3cUtbmNWmAdf11jKE1Vwm4ucNHfANbLKcASAaCXmXo0RtYgJUR0QRTX7Vz4dhVDh 8UNVn2Xyu1kB+sJD5iwuSRmoWzQhr7XJ9ThqDFCdACkEhHLu5Rxna0OuTWulOzGpALCR TaqBwWVD210ZugssM93tQxT3JOAKcFbVLGBJCeAuN8n7lq90rb8nUfUKovk+Kaqww7lF A3ppQxMr8cwaS6csQqJFcWQm3OF7B5NgRkXVD7vFXAw3hnVkuYMYGCUvA0Os6+T5zTZn nyQw== X-Gm-Message-State: AOAM5303l772zSfljDBSAlt3GH/jFySU0Wgk+MvOBRoLdYaI5JnH9xvH 4eCKxWGGf3TKUyrZQy09Qvm6DbdZuYzrQQ== X-Google-Smtp-Source: ABdhPJxXCFRcDmlOq0B8N9UugLqfcMlhQJ/k4+4EOJUCpC6HEFYVqZxsfJ1ZElX/uNCoinjKAgrAXCDUbLBIsg== X-Received: from zllamas.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:4c]) (user=cmllamas job=sendgmr) by 2002:a17:90a:730c:b0:1da:4630:518e with SMTP id m12-20020a17090a730c00b001da4630518emr1589437pjk.239.1651276620865; Fri, 29 Apr 2022 16:57:00 -0700 (PDT) Date: Fri, 29 Apr 2022 23:56:44 +0000 In-Reply-To: <20220429235644.697372-1-cmllamas@google.com> Message-Id: <20220429235644.697372-6-cmllamas@google.com> Mime-Version: 1.0 References: <20220429235644.697372-1-cmllamas@google.com> X-Mailer: git-send-email 2.36.0.464.gb9c8b46e94-goog Subject: [PATCH v2 5/5] binder: additional transaction error logs From: Carlos Llamas To: Greg Kroah-Hartman , "=?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?=" , Todd Kjos , Martijn Coenen , Christian Brauner , Suren Baghdasaryan Cc: Joel Fernandes , Hridya Valsaraju , kernel-team@android.com, linux-kernel@vger.kernel.org, Shuah Khan , Arnd Bergmann , Li Li , Masahiro Yamada , Carlos Llamas , linux-kselftest@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Log readable and specific error messages whenever a transaction failure happens. This will ensure better context is given to regular users about these unique error cases, without having to decode a cryptic log. Signed-off-by: Carlos Llamas Acked-by: Christian Brauner (Microsoft) Acked-by: Todd Kjos --- drivers/android/binder.c | 48 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index bfb21e258427..d7c5e2dde270 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -147,6 +147,9 @@ static __printf(2, 3) void binder_debug(int mask, const= char *format, ...) } } =20 +#define binder_txn_error(x...) \ + binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, x) + static __printf(1, 2) void binder_user_error(const char *format, ...) { struct va_format vaf; @@ -2823,6 +2826,8 @@ static void binder_transaction(struct binder_proc *pr= oc, if (target_thread =3D=3D NULL) { /* annotation for sparse */ __release(&target_thread->proc->inner_lock); + binder_txn_error("%d:%d reply target not found\n", + thread->pid, proc->pid); return_error =3D BR_DEAD_REPLY; return_error_line =3D __LINE__; goto err_dead_binder; @@ -2888,6 +2893,8 @@ static void binder_transaction(struct binder_proc *pr= oc, } } if (!target_node) { + binder_txn_error("%d:%d cannot find target node\n", + thread->pid, proc->pid); /* * return_error is set above */ @@ -2897,6 +2904,8 @@ static void binder_transaction(struct binder_proc *pr= oc, } e->to_node =3D target_node->debug_id; if (WARN_ON(proc =3D=3D target_proc)) { + binder_txn_error("%d:%d self transactions not allowed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D -EINVAL; return_error_line =3D __LINE__; @@ -2904,6 +2913,8 @@ static void binder_transaction(struct binder_proc *pr= oc, } if (security_binder_transaction(proc->cred, target_proc->cred) < 0) { + binder_txn_error("%d:%d transaction credentials failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D -EPERM; return_error_line =3D __LINE__; @@ -2975,6 +2986,8 @@ static void binder_transaction(struct binder_proc *pr= oc, /* 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__; @@ -2986,6 +2999,8 @@ static void binder_transaction(struct binder_proc *pr= oc, =20 tcomplete =3D kzalloc(sizeof(*tcomplete), GFP_KERNEL); if (tcomplete =3D=3D NULL) { + binder_txn_error("%d:%d cannot allocate work for transaction\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D -ENOMEM; return_error_line =3D __LINE__; @@ -3032,6 +3047,8 @@ static void binder_transaction(struct binder_proc *pr= oc, security_cred_getsecid(proc->cred, &secid); ret =3D security_secid_to_secctx(secid, &secctx, &secctx_sz); if (ret) { + binder_txn_error("%d:%d failed to get security context\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret; return_error_line =3D __LINE__; @@ -3040,7 +3057,8 @@ static void binder_transaction(struct binder_proc *pr= oc, added_size =3D ALIGN(secctx_sz, sizeof(u64)); extra_buffers_size +=3D added_size; if (extra_buffers_size < added_size) { - /* integer overflow of extra_buffers_size */ + binder_txn_error("%d:%d integer overflow of extra_buffers_size\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D -EINVAL; return_error_line =3D __LINE__; @@ -3054,9 +3072,15 @@ static void binder_transaction(struct binder_proc *p= roc, tr->offsets_size, extra_buffers_size, !reply && (t->flags & TF_ONE_WAY), current->tgid); if (IS_ERR(t->buffer)) { - /* - * -ESRCH indicates VMA cleared. The target is dying. - */ + char *s; + + ret =3D PTR_ERR(t->buffer); + s =3D (ret =3D=3D -ESRCH) ? ": vma cleared, target dead or dying" + : (ret =3D=3D -ENOSPC) ? ": no space left" + : (ret =3D=3D -ENOMEM) ? ": memory allocation failed" + : ""; + binder_txn_error("cannot allocate buffer%s", s); + return_error_param =3D PTR_ERR(t->buffer); return_error =3D return_error_param =3D=3D -ESRCH ? BR_DEAD_REPLY : BR_FAILED_REPLY; @@ -3139,6 +3163,8 @@ static void binder_transaction(struct binder_proc *pr= oc, t->buffer, buffer_offset, sizeof(object_offset))) { + binder_txn_error("%d:%d copy offset from buffer failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D -EINVAL; return_error_line =3D __LINE__; @@ -3197,6 +3223,8 @@ static void binder_transaction(struct binder_proc *pr= oc, t->buffer, object_offset, fp, sizeof(*fp))) { + binder_txn_error("%d:%d translate binder failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret; return_error_line =3D __LINE__; @@ -3214,6 +3242,8 @@ static void binder_transaction(struct binder_proc *pr= oc, t->buffer, object_offset, fp, sizeof(*fp))) { + binder_txn_error("%d:%d translate handle failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret; return_error_line =3D __LINE__; @@ -3234,6 +3264,8 @@ static void binder_transaction(struct binder_proc *pr= oc, t->buffer, object_offset, fp, sizeof(*fp))) { + binder_txn_error("%d:%d translate fd failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret; return_error_line =3D __LINE__; @@ -3303,6 +3335,8 @@ static void binder_transaction(struct binder_proc *pr= oc, object_offset, fda, sizeof(*fda)); if (ret) { + binder_txn_error("%d:%d translate fd array failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret > 0 ? -EINVAL : ret; return_error_line =3D __LINE__; @@ -3330,6 +3364,8 @@ static void binder_transaction(struct binder_proc *pr= oc, (const void __user *)(uintptr_t)bp->buffer, bp->length); if (ret) { + binder_txn_error("%d:%d deferred copy failed\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret; return_error_line =3D __LINE__; @@ -3353,6 +3389,8 @@ static void binder_transaction(struct binder_proc *pr= oc, t->buffer, object_offset, bp, sizeof(*bp))) { + binder_txn_error("%d:%d failed to fixup parent\n", + thread->pid, proc->pid); return_error =3D BR_FAILED_REPLY; return_error_param =3D ret; return_error_line =3D __LINE__; @@ -3460,6 +3498,8 @@ static void binder_transaction(struct binder_proc *pr= oc, return; =20 err_dead_proc_or_thread: + binder_txn_error("%d:%d dead process or thread\n", + thread->pid, proc->pid); return_error_line =3D __LINE__; binder_dequeue_work(proc, tcomplete); err_translate_failed: --=20 2.36.0.464.gb9c8b46e94-goog