From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Todd Kjos <tkjos@google.com>,
Jann Horn <jannh@google.com>, Martijn Coenen <maco@android.com>
Subject: [PATCH 5.4 21/67] binder: Prevent context manager from incrementing ref 0
Date: Mon, 10 Aug 2020 17:21:08 +0200 [thread overview]
Message-ID: <20200810151810.470545242@linuxfoundation.org> (raw)
In-Reply-To: <20200810151809.438685785@linuxfoundation.org>
From: Jann Horn <jannh@google.com>
commit 4b836a1426cb0f1ef2a6e211d7e553221594f8fc upstream.
Binder is designed such that a binder_proc never has references to
itself. If this rule is violated, memory corruption can occur when a
process sends a transaction to itself; see e.g.
<https://syzkaller.appspot.com/bug?extid=09e05aba06723a94d43d>.
There is a remaining edgecase through which such a transaction-to-self
can still occur from the context of a task with BINDER_SET_CONTEXT_MGR
access:
- task A opens /dev/binder twice, creating binder_proc instances P1
and P2
- P1 becomes context manager
- P2 calls ACQUIRE on the magic handle 0, allocating index 0 in its
handle table
- P1 dies (by closing the /dev/binder fd and waiting a bit)
- P2 becomes context manager
- P2 calls ACQUIRE on the magic handle 0, allocating index 1 in its
handle table
[this triggers a warning: "binder: 1974:1974 tried to acquire
reference to desc 0, got 1 instead"]
- task B opens /dev/binder once, creating binder_proc instance P3
- P3 calls P2 (via magic handle 0) with (void*)1 as argument (two-way
transaction)
- P2 receives the handle and uses it to call P3 (two-way transaction)
- P3 calls P2 (via magic handle 0) (two-way transaction)
- P2 calls P2 (via handle 1) (two-way transaction)
And then, if P2 does *NOT* accept the incoming transaction work, but
instead closes the binder fd, we get a crash.
Solve it by preventing the context manager from using ACQUIRE on ref 0.
There shouldn't be any legitimate reason for the context manager to do
that.
Additionally, print a warning if someone manages to find another way to
trigger a transaction-to-self bug in the future.
Cc: stable@vger.kernel.org
Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
Acked-by: Todd Kjos <tkjos@google.com>
Signed-off-by: Jann Horn <jannh@google.com>
Reviewed-by: Martijn Coenen <maco@android.com>
Link: https://lore.kernel.org/r/20200727120424.1627555-1-jannh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/android/binder.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -2984,6 +2984,12 @@ static void binder_transaction(struct bi
goto err_dead_binder;
}
e->to_node = target_node->debug_id;
+ if (WARN_ON(proc == target_proc)) {
+ return_error = BR_FAILED_REPLY;
+ return_error_param = -EINVAL;
+ return_error_line = __LINE__;
+ goto err_invalid_target_handle;
+ }
if (security_binder_transaction(proc->tsk,
target_proc->tsk) < 0) {
return_error = BR_FAILED_REPLY;
@@ -3637,10 +3643,17 @@ static int binder_thread_write(struct bi
struct binder_node *ctx_mgr_node;
mutex_lock(&context->context_mgr_node_lock);
ctx_mgr_node = context->binder_context_mgr_node;
- if (ctx_mgr_node)
+ if (ctx_mgr_node) {
+ if (ctx_mgr_node->proc == proc) {
+ binder_user_error("%d:%d context manager tried to acquire desc 0\n",
+ proc->pid, thread->pid);
+ mutex_unlock(&context->context_mgr_node_lock);
+ return -EINVAL;
+ }
ret = binder_inc_ref_for_node(
proc, ctx_mgr_node,
strong, NULL, &rdata);
+ }
mutex_unlock(&context->context_mgr_node_lock);
}
if (ret)
next prev parent reply other threads:[~2020-08-10 15:34 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-10 15:20 [PATCH 5.4 00/67] 5.4.58-rc1 review Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 01/67] USB: serial: qcserial: add EM7305 QDL product ID Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 02/67] perf/core: Fix endless multiplex timer Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 03/67] USB: iowarrior: fix up report size handling for some devices Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 04/67] usb: xhci: define IDs for various ASMedia host controllers Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 05/67] usb: xhci: Fix ASMedia ASM1142 DMA addressing Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 06/67] io_uring: prevent re-read of sqe->opcode Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 07/67] io_uring: Fix use-after-free in io_sq_wq_submit_work() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 08/67] Revert "ALSA: hda: call runtime_allow() for all hda controllers" Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 09/67] ALSA: hda/realtek: Add alc269/alc662 pin-tables for Loongson-3 laptops Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 10/67] ALSA: hda/ca0132 - Add new quirk ID for Recon3D Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 11/67] ALSA: hda/ca0132 - Fix ZxR Headphone gain control get value Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.4 12/67] ALSA: hda/ca0132 - Fix AE-5 microphone selection commands Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 13/67] ALSA: seq: oss: Serialize ioctls Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 14/67] staging: android: ashmem: Fix lockdep warning for write operation Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 15/67] staging: rtl8712: handle firmware load failure Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 16/67] Staging: rtl8188eu: rtw_mlme: Fix uninitialized variable authmode Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 17/67] Bluetooth: Fix slab-out-of-bounds read in hci_extended_inquiry_result_evt() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 18/67] Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_evt() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 19/67] Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_with_rssi_evt() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 20/67] omapfb: dss: Fix max fclk divider for omap36xx Greg Kroah-Hartman
2020-08-10 15:21 ` Greg Kroah-Hartman [this message]
2020-08-10 15:21 ` [PATCH 5.4 22/67] Smack: fix use-after-free in smk_write_relabel_self() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 23/67] scripts: add dummy report mode to add_namespace.cocci Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 24/67] vgacon: Fix for missing check in scrollback handling Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 25/67] mtd: properly check all write ioctls for permissions Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 26/67] leds: wm831x-status: fix use-after-free on unbind Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 27/67] leds: lm36274: " Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 28/67] leds: da903x: " Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 29/67] leds: lm3533: " Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 30/67] leds: 88pm860x: " Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 31/67] net/9p: validate fds in p9_fd_open Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 32/67] drm/nouveau/fbcon: fix module unload when fbcon init has failed for some reason Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 33/67] drm/nouveau/fbcon: zero-initialise the mode_cmd2 structure Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 34/67] nvme-pci: prevent SK hynix PC400 from using Write Zeroes command Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 35/67] drm/drm_fb_helper: fix fbdev with sparc64 Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 36/67] i2c: slave: improve sanity check when registering Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 37/67] i2c: slave: add sanity check when unregistering Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 38/67] usb: hso: check for return value in hso_serial_common_create() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 39/67] net: ethernet: mtk_eth_soc: Always call mtk_gmac0_rgmii_adjust() for mt7623 Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 40/67] ALSA: hda: fix NULL pointer dereference during suspend Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 41/67] firmware: Fix a reference count leak Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 42/67] cfg80211: check vendor command doit pointer before use Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 43/67] igb: reinit_locked() should be called with rtnl_lock Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 44/67] atm: fix atm_dev refcnt leaks in atmtcp_remove_persistent Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 45/67] tools lib traceevent: Fix memory leak in process_dynamic_array_len Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 46/67] Drivers: hv: vmbus: Ignore CHANNELMSG_TL_CONNECT_RESULT(23) Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 47/67] xattr: break delegations in {set,remove}xattr Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 48/67] Revert "powerpc/kasan: Fix shadow pages allocation failure" Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 49/67] PCI: tegra: Revert tegra124 raw_violation_fixup Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 50/67] ipv4: Silence suspicious RCU usage warning Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 51/67] ipv6: fix memory leaks on IPV6_ADDRFORM path Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 52/67] ipv6: Fix nexthop refcnt leak when creating ipv6 route info Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 53/67] net: ethernet: mtk_eth_soc: fix MTU warnings Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 54/67] rxrpc: Fix race between recvmsg and sendmsg on immediate call failure Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 55/67] vxlan: Ensure FDB dump is performed under RCU Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 56/67] net: lan78xx: replace bogus endpoint lookup Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 57/67] appletalk: Fix atalk_proc_init() return path Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 58/67] dpaa2-eth: Fix passing zero to PTR_ERR warning Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 59/67] hv_netvsc: do not use VF device if link is down Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 60/67] net: gre: recompute gre csum for sctp over gre tunnels Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 61/67] net: thunderx: use spin_lock_bh in nicvf_set_rx_mode_task() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 62/67] openvswitch: Prevent kernel-infoleak in ovs_ct_put_key() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 63/67] Revert "vxlan: fix tos value before xmit" Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 64/67] selftests/net: relax cpu affinity requirement in msg_zerocopy test Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 65/67] tcp: apply a floor of 1 for RTT samples from TCP timestamps Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 66/67] ima: move APPRAISE_BOOTPARAM dependency on ARCH_POLICY to runtime Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.4 67/67] nfsd: Fix NFSv4 READ on RDMA when using readv Greg Kroah-Hartman
2020-08-10 23:10 ` [PATCH 5.4 00/67] 5.4.58-rc1 review Shuah Khan
2020-08-11 7:29 ` Naresh Kamboju
2020-08-11 14:23 ` Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200810151810.470545242@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=jannh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maco@android.com \
--cc=stable@vger.kernel.org \
--cc=tkjos@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox