mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
The get_current_thread() method is currently called for every ioctl to
ensure that a Thread struct exists for the thread calling into the
driver. However, not all ioctls require a Thread object, so this means
we are unnecessarily creating these objects in cases where we don't need
to. If said thread does not invoke BINDER_THREAD_EXIT on exit, Binder's
Thread struct stays around until the fd is closed. For long-lived
processes the Thread object is effectively leaked.
Furthermore, when the BINDER_GET_NODE_DEBUG_INFO ioctl is invoked by
libmemunreachable to ensure that objects reachable only through the
Binder driver are not considered leaked, this is done from a fork of the
process owning the fd, which means that it fails the group_leader check
inside get_current_thread(). This results in EINVAL errors for this
ioctl, causing libmemunreachable to report a false positive memory leak.
Thus, do not invoke get_current_thread() for ioctls that do not require
it.
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Cc: stable <stable@kernel.org>
Fixes:
|
||
|---|---|---|
| .. | ||
| node | ||
| range_alloc | ||
| allocation.rs | ||
| context.rs | ||
| deferred_close.rs | ||
| defs.rs | ||
| error.rs | ||
| freeze.rs | ||
| Makefile | ||
| node.rs | ||
| page_range.rs | ||
| process.rs | ||
| rust_binder_events.c | ||
| rust_binder_events.h | ||
| rust_binder_internal.h | ||
| rust_binder_main.rs | ||
| rust_binder.h | ||
| rust_binderfs.c | ||
| stats.rs | ||
| thread.rs | ||
| trace.rs | ||
| transaction.rs | ||