xref: /openbmc/linux/drivers/android/binder.c (revision 5b4cb650)
1 /* binder.c
2  *
3  * Android IPC Subsystem
4  *
5  * Copyright (C) 2007-2008 Google, Inc.
6  *
7  * This software is licensed under the terms of the GNU General Public
8  * License version 2, as published by the Free Software Foundation, and
9  * may be copied, distributed, and modified under those terms.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17 
18 /*
19  * Locking overview
20  *
21  * There are 3 main spinlocks which must be acquired in the
22  * order shown:
23  *
24  * 1) proc->outer_lock : protects binder_ref
25  *    binder_proc_lock() and binder_proc_unlock() are
26  *    used to acq/rel.
27  * 2) node->lock : protects most fields of binder_node.
28  *    binder_node_lock() and binder_node_unlock() are
29  *    used to acq/rel
30  * 3) proc->inner_lock : protects the thread and node lists
31  *    (proc->threads, proc->waiting_threads, proc->nodes)
32  *    and all todo lists associated with the binder_proc
33  *    (proc->todo, thread->todo, proc->delivered_death and
34  *    node->async_todo), as well as thread->transaction_stack
35  *    binder_inner_proc_lock() and binder_inner_proc_unlock()
36  *    are used to acq/rel
37  *
38  * Any lock under procA must never be nested under any lock at the same
39  * level or below on procB.
40  *
41  * Functions that require a lock held on entry indicate which lock
42  * in the suffix of the function name:
43  *
44  * foo_olocked() : requires node->outer_lock
45  * foo_nlocked() : requires node->lock
46  * foo_ilocked() : requires proc->inner_lock
47  * foo_oilocked(): requires proc->outer_lock and proc->inner_lock
48  * foo_nilocked(): requires node->lock and proc->inner_lock
49  * ...
50  */
51 
52 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
53 
54 #include <linux/fdtable.h>
55 #include <linux/file.h>
56 #include <linux/freezer.h>
57 #include <linux/fs.h>
58 #include <linux/list.h>
59 #include <linux/miscdevice.h>
60 #include <linux/module.h>
61 #include <linux/mutex.h>
62 #include <linux/nsproxy.h>
63 #include <linux/poll.h>
64 #include <linux/debugfs.h>
65 #include <linux/rbtree.h>
66 #include <linux/sched/signal.h>
67 #include <linux/sched/mm.h>
68 #include <linux/seq_file.h>
69 #include <linux/uaccess.h>
70 #include <linux/pid_namespace.h>
71 #include <linux/security.h>
72 #include <linux/spinlock.h>
73 #include <linux/ratelimit.h>
74 #include <linux/syscalls.h>
75 #include <linux/task_work.h>
76 
77 #include <uapi/linux/android/binder.h>
78 
79 #include <asm/cacheflush.h>
80 
81 #include "binder_alloc.h"
82 #include "binder_internal.h"
83 #include "binder_trace.h"
84 
85 static HLIST_HEAD(binder_deferred_list);
86 static DEFINE_MUTEX(binder_deferred_lock);
87 
88 static HLIST_HEAD(binder_devices);
89 static HLIST_HEAD(binder_procs);
90 static DEFINE_MUTEX(binder_procs_lock);
91 
92 static HLIST_HEAD(binder_dead_nodes);
93 static DEFINE_SPINLOCK(binder_dead_nodes_lock);
94 
95 static struct dentry *binder_debugfs_dir_entry_root;
96 static struct dentry *binder_debugfs_dir_entry_proc;
97 static atomic_t binder_last_id;
98 
99 static int proc_show(struct seq_file *m, void *unused);
100 DEFINE_SHOW_ATTRIBUTE(proc);
101 
102 /* This is only defined in include/asm-arm/sizes.h */
103 #ifndef SZ_1K
104 #define SZ_1K                               0x400
105 #endif
106 
107 #ifndef SZ_4M
108 #define SZ_4M                               0x400000
109 #endif
110 
111 #define FORBIDDEN_MMAP_FLAGS                (VM_WRITE)
112 
113 enum {
114 	BINDER_DEBUG_USER_ERROR             = 1U << 0,
115 	BINDER_DEBUG_FAILED_TRANSACTION     = 1U << 1,
116 	BINDER_DEBUG_DEAD_TRANSACTION       = 1U << 2,
117 	BINDER_DEBUG_OPEN_CLOSE             = 1U << 3,
118 	BINDER_DEBUG_DEAD_BINDER            = 1U << 4,
119 	BINDER_DEBUG_DEATH_NOTIFICATION     = 1U << 5,
120 	BINDER_DEBUG_READ_WRITE             = 1U << 6,
121 	BINDER_DEBUG_USER_REFS              = 1U << 7,
122 	BINDER_DEBUG_THREADS                = 1U << 8,
123 	BINDER_DEBUG_TRANSACTION            = 1U << 9,
124 	BINDER_DEBUG_TRANSACTION_COMPLETE   = 1U << 10,
125 	BINDER_DEBUG_FREE_BUFFER            = 1U << 11,
126 	BINDER_DEBUG_INTERNAL_REFS          = 1U << 12,
127 	BINDER_DEBUG_PRIORITY_CAP           = 1U << 13,
128 	BINDER_DEBUG_SPINLOCKS              = 1U << 14,
129 };
130 static uint32_t binder_debug_mask = BINDER_DEBUG_USER_ERROR |
131 	BINDER_DEBUG_FAILED_TRANSACTION | BINDER_DEBUG_DEAD_TRANSACTION;
132 module_param_named(debug_mask, binder_debug_mask, uint, 0644);
133 
134 static char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
135 module_param_named(devices, binder_devices_param, charp, 0444);
136 
137 static DECLARE_WAIT_QUEUE_HEAD(binder_user_error_wait);
138 static int binder_stop_on_user_error;
139 
140 static int binder_set_stop_on_user_error(const char *val,
141 					 const struct kernel_param *kp)
142 {
143 	int ret;
144 
145 	ret = param_set_int(val, kp);
146 	if (binder_stop_on_user_error < 2)
147 		wake_up(&binder_user_error_wait);
148 	return ret;
149 }
150 module_param_call(stop_on_user_error, binder_set_stop_on_user_error,
151 	param_get_int, &binder_stop_on_user_error, 0644);
152 
153 #define binder_debug(mask, x...) \
154 	do { \
155 		if (binder_debug_mask & mask) \
156 			pr_info_ratelimited(x); \
157 	} while (0)
158 
159 #define binder_user_error(x...) \
160 	do { \
161 		if (binder_debug_mask & BINDER_DEBUG_USER_ERROR) \
162 			pr_info_ratelimited(x); \
163 		if (binder_stop_on_user_error) \
164 			binder_stop_on_user_error = 2; \
165 	} while (0)
166 
167 #define to_flat_binder_object(hdr) \
168 	container_of(hdr, struct flat_binder_object, hdr)
169 
170 #define to_binder_fd_object(hdr) container_of(hdr, struct binder_fd_object, hdr)
171 
172 #define to_binder_buffer_object(hdr) \
173 	container_of(hdr, struct binder_buffer_object, hdr)
174 
175 #define to_binder_fd_array_object(hdr) \
176 	container_of(hdr, struct binder_fd_array_object, hdr)
177 
178 enum binder_stat_types {
179 	BINDER_STAT_PROC,
180 	BINDER_STAT_THREAD,
181 	BINDER_STAT_NODE,
182 	BINDER_STAT_REF,
183 	BINDER_STAT_DEATH,
184 	BINDER_STAT_TRANSACTION,
185 	BINDER_STAT_TRANSACTION_COMPLETE,
186 	BINDER_STAT_COUNT
187 };
188 
189 struct binder_stats {
190 	atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1];
191 	atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1];
192 	atomic_t obj_created[BINDER_STAT_COUNT];
193 	atomic_t obj_deleted[BINDER_STAT_COUNT];
194 };
195 
196 static struct binder_stats binder_stats;
197 
198 static inline void binder_stats_deleted(enum binder_stat_types type)
199 {
200 	atomic_inc(&binder_stats.obj_deleted[type]);
201 }
202 
203 static inline void binder_stats_created(enum binder_stat_types type)
204 {
205 	atomic_inc(&binder_stats.obj_created[type]);
206 }
207 
208 struct binder_transaction_log_entry {
209 	int debug_id;
210 	int debug_id_done;
211 	int call_type;
212 	int from_proc;
213 	int from_thread;
214 	int target_handle;
215 	int to_proc;
216 	int to_thread;
217 	int to_node;
218 	int data_size;
219 	int offsets_size;
220 	int return_error_line;
221 	uint32_t return_error;
222 	uint32_t return_error_param;
223 	const char *context_name;
224 };
225 struct binder_transaction_log {
226 	atomic_t cur;
227 	bool full;
228 	struct binder_transaction_log_entry entry[32];
229 };
230 static struct binder_transaction_log binder_transaction_log;
231 static struct binder_transaction_log binder_transaction_log_failed;
232 
233 static struct binder_transaction_log_entry *binder_transaction_log_add(
234 	struct binder_transaction_log *log)
235 {
236 	struct binder_transaction_log_entry *e;
237 	unsigned int cur = atomic_inc_return(&log->cur);
238 
239 	if (cur >= ARRAY_SIZE(log->entry))
240 		log->full = true;
241 	e = &log->entry[cur % ARRAY_SIZE(log->entry)];
242 	WRITE_ONCE(e->debug_id_done, 0);
243 	/*
244 	 * write-barrier to synchronize access to e->debug_id_done.
245 	 * We make sure the initialized 0 value is seen before
246 	 * memset() other fields are zeroed by memset.
247 	 */
248 	smp_wmb();
249 	memset(e, 0, sizeof(*e));
250 	return e;
251 }
252 
253 /**
254  * struct binder_work - work enqueued on a worklist
255  * @entry:             node enqueued on list
256  * @type:              type of work to be performed
257  *
258  * There are separate work lists for proc, thread, and node (async).
259  */
260 struct binder_work {
261 	struct list_head entry;
262 
263 	enum {
264 		BINDER_WORK_TRANSACTION = 1,
265 		BINDER_WORK_TRANSACTION_COMPLETE,
266 		BINDER_WORK_RETURN_ERROR,
267 		BINDER_WORK_NODE,
268 		BINDER_WORK_DEAD_BINDER,
269 		BINDER_WORK_DEAD_BINDER_AND_CLEAR,
270 		BINDER_WORK_CLEAR_DEATH_NOTIFICATION,
271 	} type;
272 };
273 
274 struct binder_error {
275 	struct binder_work work;
276 	uint32_t cmd;
277 };
278 
279 /**
280  * struct binder_node - binder node bookkeeping
281  * @debug_id:             unique ID for debugging
282  *                        (invariant after initialized)
283  * @lock:                 lock for node fields
284  * @work:                 worklist element for node work
285  *                        (protected by @proc->inner_lock)
286  * @rb_node:              element for proc->nodes tree
287  *                        (protected by @proc->inner_lock)
288  * @dead_node:            element for binder_dead_nodes list
289  *                        (protected by binder_dead_nodes_lock)
290  * @proc:                 binder_proc that owns this node
291  *                        (invariant after initialized)
292  * @refs:                 list of references on this node
293  *                        (protected by @lock)
294  * @internal_strong_refs: used to take strong references when
295  *                        initiating a transaction
296  *                        (protected by @proc->inner_lock if @proc
297  *                        and by @lock)
298  * @local_weak_refs:      weak user refs from local process
299  *                        (protected by @proc->inner_lock if @proc
300  *                        and by @lock)
301  * @local_strong_refs:    strong user refs from local process
302  *                        (protected by @proc->inner_lock if @proc
303  *                        and by @lock)
304  * @tmp_refs:             temporary kernel refs
305  *                        (protected by @proc->inner_lock while @proc
306  *                        is valid, and by binder_dead_nodes_lock
307  *                        if @proc is NULL. During inc/dec and node release
308  *                        it is also protected by @lock to provide safety
309  *                        as the node dies and @proc becomes NULL)
310  * @ptr:                  userspace pointer for node
311  *                        (invariant, no lock needed)
312  * @cookie:               userspace cookie for node
313  *                        (invariant, no lock needed)
314  * @has_strong_ref:       userspace notified of strong ref
315  *                        (protected by @proc->inner_lock if @proc
316  *                        and by @lock)
317  * @pending_strong_ref:   userspace has acked notification of strong ref
318  *                        (protected by @proc->inner_lock if @proc
319  *                        and by @lock)
320  * @has_weak_ref:         userspace notified of weak ref
321  *                        (protected by @proc->inner_lock if @proc
322  *                        and by @lock)
323  * @pending_weak_ref:     userspace has acked notification of weak ref
324  *                        (protected by @proc->inner_lock if @proc
325  *                        and by @lock)
326  * @has_async_transaction: async transaction to node in progress
327  *                        (protected by @lock)
328  * @accept_fds:           file descriptor operations supported for node
329  *                        (invariant after initialized)
330  * @min_priority:         minimum scheduling priority
331  *                        (invariant after initialized)
332  * @async_todo:           list of async work items
333  *                        (protected by @proc->inner_lock)
334  *
335  * Bookkeeping structure for binder nodes.
336  */
337 struct binder_node {
338 	int debug_id;
339 	spinlock_t lock;
340 	struct binder_work work;
341 	union {
342 		struct rb_node rb_node;
343 		struct hlist_node dead_node;
344 	};
345 	struct binder_proc *proc;
346 	struct hlist_head refs;
347 	int internal_strong_refs;
348 	int local_weak_refs;
349 	int local_strong_refs;
350 	int tmp_refs;
351 	binder_uintptr_t ptr;
352 	binder_uintptr_t cookie;
353 	struct {
354 		/*
355 		 * bitfield elements protected by
356 		 * proc inner_lock
357 		 */
358 		u8 has_strong_ref:1;
359 		u8 pending_strong_ref:1;
360 		u8 has_weak_ref:1;
361 		u8 pending_weak_ref:1;
362 	};
363 	struct {
364 		/*
365 		 * invariant after initialization
366 		 */
367 		u8 accept_fds:1;
368 		u8 min_priority;
369 	};
370 	bool has_async_transaction;
371 	struct list_head async_todo;
372 };
373 
374 struct binder_ref_death {
375 	/**
376 	 * @work: worklist element for death notifications
377 	 *        (protected by inner_lock of the proc that
378 	 *        this ref belongs to)
379 	 */
380 	struct binder_work work;
381 	binder_uintptr_t cookie;
382 };
383 
384 /**
385  * struct binder_ref_data - binder_ref counts and id
386  * @debug_id:        unique ID for the ref
387  * @desc:            unique userspace handle for ref
388  * @strong:          strong ref count (debugging only if not locked)
389  * @weak:            weak ref count (debugging only if not locked)
390  *
391  * Structure to hold ref count and ref id information. Since
392  * the actual ref can only be accessed with a lock, this structure
393  * is used to return information about the ref to callers of
394  * ref inc/dec functions.
395  */
396 struct binder_ref_data {
397 	int debug_id;
398 	uint32_t desc;
399 	int strong;
400 	int weak;
401 };
402 
403 /**
404  * struct binder_ref - struct to track references on nodes
405  * @data:        binder_ref_data containing id, handle, and current refcounts
406  * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree
407  * @rb_node_node: node for lookup by @node in proc's rb_tree
408  * @node_entry:  list entry for node->refs list in target node
409  *               (protected by @node->lock)
410  * @proc:        binder_proc containing ref
411  * @node:        binder_node of target node. When cleaning up a
412  *               ref for deletion in binder_cleanup_ref, a non-NULL
413  *               @node indicates the node must be freed
414  * @death:       pointer to death notification (ref_death) if requested
415  *               (protected by @node->lock)
416  *
417  * Structure to track references from procA to target node (on procB). This
418  * structure is unsafe to access without holding @proc->outer_lock.
419  */
420 struct binder_ref {
421 	/* Lookups needed: */
422 	/*   node + proc => ref (transaction) */
423 	/*   desc + proc => ref (transaction, inc/dec ref) */
424 	/*   node => refs + procs (proc exit) */
425 	struct binder_ref_data data;
426 	struct rb_node rb_node_desc;
427 	struct rb_node rb_node_node;
428 	struct hlist_node node_entry;
429 	struct binder_proc *proc;
430 	struct binder_node *node;
431 	struct binder_ref_death *death;
432 };
433 
434 enum binder_deferred_state {
435 	BINDER_DEFERRED_FLUSH        = 0x01,
436 	BINDER_DEFERRED_RELEASE      = 0x02,
437 };
438 
439 /**
440  * struct binder_proc - binder process bookkeeping
441  * @proc_node:            element for binder_procs list
442  * @threads:              rbtree of binder_threads in this proc
443  *                        (protected by @inner_lock)
444  * @nodes:                rbtree of binder nodes associated with
445  *                        this proc ordered by node->ptr
446  *                        (protected by @inner_lock)
447  * @refs_by_desc:         rbtree of refs ordered by ref->desc
448  *                        (protected by @outer_lock)
449  * @refs_by_node:         rbtree of refs ordered by ref->node
450  *                        (protected by @outer_lock)
451  * @waiting_threads:      threads currently waiting for proc work
452  *                        (protected by @inner_lock)
453  * @pid                   PID of group_leader of process
454  *                        (invariant after initialized)
455  * @tsk                   task_struct for group_leader of process
456  *                        (invariant after initialized)
457  * @deferred_work_node:   element for binder_deferred_list
458  *                        (protected by binder_deferred_lock)
459  * @deferred_work:        bitmap of deferred work to perform
460  *                        (protected by binder_deferred_lock)
461  * @is_dead:              process is dead and awaiting free
462  *                        when outstanding transactions are cleaned up
463  *                        (protected by @inner_lock)
464  * @todo:                 list of work for this process
465  *                        (protected by @inner_lock)
466  * @stats:                per-process binder statistics
467  *                        (atomics, no lock needed)
468  * @delivered_death:      list of delivered death notification
469  *                        (protected by @inner_lock)
470  * @max_threads:          cap on number of binder threads
471  *                        (protected by @inner_lock)
472  * @requested_threads:    number of binder threads requested but not
473  *                        yet started. In current implementation, can
474  *                        only be 0 or 1.
475  *                        (protected by @inner_lock)
476  * @requested_threads_started: number binder threads started
477  *                        (protected by @inner_lock)
478  * @tmp_ref:              temporary reference to indicate proc is in use
479  *                        (protected by @inner_lock)
480  * @default_priority:     default scheduler priority
481  *                        (invariant after initialized)
482  * @debugfs_entry:        debugfs node
483  * @alloc:                binder allocator bookkeeping
484  * @context:              binder_context for this proc
485  *                        (invariant after initialized)
486  * @inner_lock:           can nest under outer_lock and/or node lock
487  * @outer_lock:           no nesting under innor or node lock
488  *                        Lock order: 1) outer, 2) node, 3) inner
489  *
490  * Bookkeeping structure for binder processes
491  */
492 struct binder_proc {
493 	struct hlist_node proc_node;
494 	struct rb_root threads;
495 	struct rb_root nodes;
496 	struct rb_root refs_by_desc;
497 	struct rb_root refs_by_node;
498 	struct list_head waiting_threads;
499 	int pid;
500 	struct task_struct *tsk;
501 	struct hlist_node deferred_work_node;
502 	int deferred_work;
503 	bool is_dead;
504 
505 	struct list_head todo;
506 	struct binder_stats stats;
507 	struct list_head delivered_death;
508 	int max_threads;
509 	int requested_threads;
510 	int requested_threads_started;
511 	int tmp_ref;
512 	long default_priority;
513 	struct dentry *debugfs_entry;
514 	struct binder_alloc alloc;
515 	struct binder_context *context;
516 	spinlock_t inner_lock;
517 	spinlock_t outer_lock;
518 };
519 
520 enum {
521 	BINDER_LOOPER_STATE_REGISTERED  = 0x01,
522 	BINDER_LOOPER_STATE_ENTERED     = 0x02,
523 	BINDER_LOOPER_STATE_EXITED      = 0x04,
524 	BINDER_LOOPER_STATE_INVALID     = 0x08,
525 	BINDER_LOOPER_STATE_WAITING     = 0x10,
526 	BINDER_LOOPER_STATE_POLL        = 0x20,
527 };
528 
529 /**
530  * struct binder_thread - binder thread bookkeeping
531  * @proc:                 binder process for this thread
532  *                        (invariant after initialization)
533  * @rb_node:              element for proc->threads rbtree
534  *                        (protected by @proc->inner_lock)
535  * @waiting_thread_node:  element for @proc->waiting_threads list
536  *                        (protected by @proc->inner_lock)
537  * @pid:                  PID for this thread
538  *                        (invariant after initialization)
539  * @looper:               bitmap of looping state
540  *                        (only accessed by this thread)
541  * @looper_needs_return:  looping thread needs to exit driver
542  *                        (no lock needed)
543  * @transaction_stack:    stack of in-progress transactions for this thread
544  *                        (protected by @proc->inner_lock)
545  * @todo:                 list of work to do for this thread
546  *                        (protected by @proc->inner_lock)
547  * @process_todo:         whether work in @todo should be processed
548  *                        (protected by @proc->inner_lock)
549  * @return_error:         transaction errors reported by this thread
550  *                        (only accessed by this thread)
551  * @reply_error:          transaction errors reported by target thread
552  *                        (protected by @proc->inner_lock)
553  * @wait:                 wait queue for thread work
554  * @stats:                per-thread statistics
555  *                        (atomics, no lock needed)
556  * @tmp_ref:              temporary reference to indicate thread is in use
557  *                        (atomic since @proc->inner_lock cannot
558  *                        always be acquired)
559  * @is_dead:              thread is dead and awaiting free
560  *                        when outstanding transactions are cleaned up
561  *                        (protected by @proc->inner_lock)
562  *
563  * Bookkeeping structure for binder threads.
564  */
565 struct binder_thread {
566 	struct binder_proc *proc;
567 	struct rb_node rb_node;
568 	struct list_head waiting_thread_node;
569 	int pid;
570 	int looper;              /* only modified by this thread */
571 	bool looper_need_return; /* can be written by other thread */
572 	struct binder_transaction *transaction_stack;
573 	struct list_head todo;
574 	bool process_todo;
575 	struct binder_error return_error;
576 	struct binder_error reply_error;
577 	wait_queue_head_t wait;
578 	struct binder_stats stats;
579 	atomic_t tmp_ref;
580 	bool is_dead;
581 };
582 
583 /**
584  * struct binder_txn_fd_fixup - transaction fd fixup list element
585  * @fixup_entry:          list entry
586  * @file:                 struct file to be associated with new fd
587  * @offset:               offset in buffer data to this fixup
588  *
589  * List element for fd fixups in a transaction. Since file
590  * descriptors need to be allocated in the context of the
591  * target process, we pass each fd to be processed in this
592  * struct.
593  */
594 struct binder_txn_fd_fixup {
595 	struct list_head fixup_entry;
596 	struct file *file;
597 	size_t offset;
598 };
599 
600 struct binder_transaction {
601 	int debug_id;
602 	struct binder_work work;
603 	struct binder_thread *from;
604 	struct binder_transaction *from_parent;
605 	struct binder_proc *to_proc;
606 	struct binder_thread *to_thread;
607 	struct binder_transaction *to_parent;
608 	unsigned need_reply:1;
609 	/* unsigned is_dead:1; */	/* not used at the moment */
610 
611 	struct binder_buffer *buffer;
612 	unsigned int	code;
613 	unsigned int	flags;
614 	long	priority;
615 	long	saved_priority;
616 	kuid_t	sender_euid;
617 	struct list_head fd_fixups;
618 	/**
619 	 * @lock:  protects @from, @to_proc, and @to_thread
620 	 *
621 	 * @from, @to_proc, and @to_thread can be set to NULL
622 	 * during thread teardown
623 	 */
624 	spinlock_t lock;
625 };
626 
627 /**
628  * binder_proc_lock() - Acquire outer lock for given binder_proc
629  * @proc:         struct binder_proc to acquire
630  *
631  * Acquires proc->outer_lock. Used to protect binder_ref
632  * structures associated with the given proc.
633  */
634 #define binder_proc_lock(proc) _binder_proc_lock(proc, __LINE__)
635 static void
636 _binder_proc_lock(struct binder_proc *proc, int line)
637 	__acquires(&proc->outer_lock)
638 {
639 	binder_debug(BINDER_DEBUG_SPINLOCKS,
640 		     "%s: line=%d\n", __func__, line);
641 	spin_lock(&proc->outer_lock);
642 }
643 
644 /**
645  * binder_proc_unlock() - Release spinlock for given binder_proc
646  * @proc:         struct binder_proc to acquire
647  *
648  * Release lock acquired via binder_proc_lock()
649  */
650 #define binder_proc_unlock(_proc) _binder_proc_unlock(_proc, __LINE__)
651 static void
652 _binder_proc_unlock(struct binder_proc *proc, int line)
653 	__releases(&proc->outer_lock)
654 {
655 	binder_debug(BINDER_DEBUG_SPINLOCKS,
656 		     "%s: line=%d\n", __func__, line);
657 	spin_unlock(&proc->outer_lock);
658 }
659 
660 /**
661  * binder_inner_proc_lock() - Acquire inner lock for given binder_proc
662  * @proc:         struct binder_proc to acquire
663  *
664  * Acquires proc->inner_lock. Used to protect todo lists
665  */
666 #define binder_inner_proc_lock(proc) _binder_inner_proc_lock(proc, __LINE__)
667 static void
668 _binder_inner_proc_lock(struct binder_proc *proc, int line)
669 	__acquires(&proc->inner_lock)
670 {
671 	binder_debug(BINDER_DEBUG_SPINLOCKS,
672 		     "%s: line=%d\n", __func__, line);
673 	spin_lock(&proc->inner_lock);
674 }
675 
676 /**
677  * binder_inner_proc_unlock() - Release inner lock for given binder_proc
678  * @proc:         struct binder_proc to acquire
679  *
680  * Release lock acquired via binder_inner_proc_lock()
681  */
682 #define binder_inner_proc_unlock(proc) _binder_inner_proc_unlock(proc, __LINE__)
683 static void
684 _binder_inner_proc_unlock(struct binder_proc *proc, int line)
685 	__releases(&proc->inner_lock)
686 {
687 	binder_debug(BINDER_DEBUG_SPINLOCKS,
688 		     "%s: line=%d\n", __func__, line);
689 	spin_unlock(&proc->inner_lock);
690 }
691 
692 /**
693  * binder_node_lock() - Acquire spinlock for given binder_node
694  * @node:         struct binder_node to acquire
695  *
696  * Acquires node->lock. Used to protect binder_node fields
697  */
698 #define binder_node_lock(node) _binder_node_lock(node, __LINE__)
699 static void
700 _binder_node_lock(struct binder_node *node, int line)
701 	__acquires(&node->lock)
702 {
703 	binder_debug(BINDER_DEBUG_SPINLOCKS,
704 		     "%s: line=%d\n", __func__, line);
705 	spin_lock(&node->lock);
706 }
707 
708 /**
709  * binder_node_unlock() - Release spinlock for given binder_proc
710  * @node:         struct binder_node to acquire
711  *
712  * Release lock acquired via binder_node_lock()
713  */
714 #define binder_node_unlock(node) _binder_node_unlock(node, __LINE__)
715 static void
716 _binder_node_unlock(struct binder_node *node, int line)
717 	__releases(&node->lock)
718 {
719 	binder_debug(BINDER_DEBUG_SPINLOCKS,
720 		     "%s: line=%d\n", __func__, line);
721 	spin_unlock(&node->lock);
722 }
723 
724 /**
725  * binder_node_inner_lock() - Acquire node and inner locks
726  * @node:         struct binder_node to acquire
727  *
728  * Acquires node->lock. If node->proc also acquires
729  * proc->inner_lock. Used to protect binder_node fields
730  */
731 #define binder_node_inner_lock(node) _binder_node_inner_lock(node, __LINE__)
732 static void
733 _binder_node_inner_lock(struct binder_node *node, int line)
734 	__acquires(&node->lock) __acquires(&node->proc->inner_lock)
735 {
736 	binder_debug(BINDER_DEBUG_SPINLOCKS,
737 		     "%s: line=%d\n", __func__, line);
738 	spin_lock(&node->lock);
739 	if (node->proc)
740 		binder_inner_proc_lock(node->proc);
741 	else
742 		/* annotation for sparse */
743 		__acquire(&node->proc->inner_lock);
744 }
745 
746 /**
747  * binder_node_unlock() - Release node and inner locks
748  * @node:         struct binder_node to acquire
749  *
750  * Release lock acquired via binder_node_lock()
751  */
752 #define binder_node_inner_unlock(node) _binder_node_inner_unlock(node, __LINE__)
753 static void
754 _binder_node_inner_unlock(struct binder_node *node, int line)
755 	__releases(&node->lock) __releases(&node->proc->inner_lock)
756 {
757 	struct binder_proc *proc = node->proc;
758 
759 	binder_debug(BINDER_DEBUG_SPINLOCKS,
760 		     "%s: line=%d\n", __func__, line);
761 	if (proc)
762 		binder_inner_proc_unlock(proc);
763 	else
764 		/* annotation for sparse */
765 		__release(&node->proc->inner_lock);
766 	spin_unlock(&node->lock);
767 }
768 
769 static bool binder_worklist_empty_ilocked(struct list_head *list)
770 {
771 	return list_empty(list);
772 }
773 
774 /**
775  * binder_worklist_empty() - Check if no items on the work list
776  * @proc:       binder_proc associated with list
777  * @list:	list to check
778  *
779  * Return: true if there are no items on list, else false
780  */
781 static bool binder_worklist_empty(struct binder_proc *proc,
782 				  struct list_head *list)
783 {
784 	bool ret;
785 
786 	binder_inner_proc_lock(proc);
787 	ret = binder_worklist_empty_ilocked(list);
788 	binder_inner_proc_unlock(proc);
789 	return ret;
790 }
791 
792 /**
793  * binder_enqueue_work_ilocked() - Add an item to the work list
794  * @work:         struct binder_work to add to list
795  * @target_list:  list to add work to
796  *
797  * Adds the work to the specified list. Asserts that work
798  * is not already on a list.
799  *
800  * Requires the proc->inner_lock to be held.
801  */
802 static void
803 binder_enqueue_work_ilocked(struct binder_work *work,
804 			   struct list_head *target_list)
805 {
806 	BUG_ON(target_list == NULL);
807 	BUG_ON(work->entry.next && !list_empty(&work->entry));
808 	list_add_tail(&work->entry, target_list);
809 }
810 
811 /**
812  * binder_enqueue_deferred_thread_work_ilocked() - Add deferred thread work
813  * @thread:       thread to queue work to
814  * @work:         struct binder_work to add to list
815  *
816  * Adds the work to the todo list of the thread. Doesn't set the process_todo
817  * flag, which means that (if it wasn't already set) the thread will go to
818  * sleep without handling this work when it calls read.
819  *
820  * Requires the proc->inner_lock to be held.
821  */
822 static void
823 binder_enqueue_deferred_thread_work_ilocked(struct binder_thread *thread,
824 					    struct binder_work *work)
825 {
826 	WARN_ON(!list_empty(&thread->waiting_thread_node));
827 	binder_enqueue_work_ilocked(work, &thread->todo);
828 }
829 
830 /**
831  * binder_enqueue_thread_work_ilocked() - Add an item to the thread work list
832  * @thread:       thread to queue work to
833  * @work:         struct binder_work to add to list
834  *
835  * Adds the work to the todo list of the thread, and enables processing
836  * of the todo queue.
837  *
838  * Requires the proc->inner_lock to be held.
839  */
840 static void
841 binder_enqueue_thread_work_ilocked(struct binder_thread *thread,
842 				   struct binder_work *work)
843 {
844 	WARN_ON(!list_empty(&thread->waiting_thread_node));
845 	binder_enqueue_work_ilocked(work, &thread->todo);
846 	thread->process_todo = true;
847 }
848 
849 /**
850  * binder_enqueue_thread_work() - Add an item to the thread work list
851  * @thread:       thread to queue work to
852  * @work:         struct binder_work to add to list
853  *
854  * Adds the work to the todo list of the thread, and enables processing
855  * of the todo queue.
856  */
857 static void
858 binder_enqueue_thread_work(struct binder_thread *thread,
859 			   struct binder_work *work)
860 {
861 	binder_inner_proc_lock(thread->proc);
862 	binder_enqueue_thread_work_ilocked(thread, work);
863 	binder_inner_proc_unlock(thread->proc);
864 }
865 
866 static void
867 binder_dequeue_work_ilocked(struct binder_work *work)
868 {
869 	list_del_init(&work->entry);
870 }
871 
872 /**
873  * binder_dequeue_work() - Removes an item from the work list
874  * @proc:         binder_proc associated with list
875  * @work:         struct binder_work to remove from list
876  *
877  * Removes the specified work item from whatever list it is on.
878  * Can safely be called if work is not on any list.
879  */
880 static void
881 binder_dequeue_work(struct binder_proc *proc, struct binder_work *work)
882 {
883 	binder_inner_proc_lock(proc);
884 	binder_dequeue_work_ilocked(work);
885 	binder_inner_proc_unlock(proc);
886 }
887 
888 static struct binder_work *binder_dequeue_work_head_ilocked(
889 					struct list_head *list)
890 {
891 	struct binder_work *w;
892 
893 	w = list_first_entry_or_null(list, struct binder_work, entry);
894 	if (w)
895 		list_del_init(&w->entry);
896 	return w;
897 }
898 
899 /**
900  * binder_dequeue_work_head() - Dequeues the item at head of list
901  * @proc:         binder_proc associated with list
902  * @list:         list to dequeue head
903  *
904  * Removes the head of the list if there are items on the list
905  *
906  * Return: pointer dequeued binder_work, NULL if list was empty
907  */
908 static struct binder_work *binder_dequeue_work_head(
909 					struct binder_proc *proc,
910 					struct list_head *list)
911 {
912 	struct binder_work *w;
913 
914 	binder_inner_proc_lock(proc);
915 	w = binder_dequeue_work_head_ilocked(list);
916 	binder_inner_proc_unlock(proc);
917 	return w;
918 }
919 
920 static void
921 binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer);
922 static void binder_free_thread(struct binder_thread *thread);
923 static void binder_free_proc(struct binder_proc *proc);
924 static void binder_inc_node_tmpref_ilocked(struct binder_node *node);
925 
926 static bool binder_has_work_ilocked(struct binder_thread *thread,
927 				    bool do_proc_work)
928 {
929 	return thread->process_todo ||
930 		thread->looper_need_return ||
931 		(do_proc_work &&
932 		 !binder_worklist_empty_ilocked(&thread->proc->todo));
933 }
934 
935 static bool binder_has_work(struct binder_thread *thread, bool do_proc_work)
936 {
937 	bool has_work;
938 
939 	binder_inner_proc_lock(thread->proc);
940 	has_work = binder_has_work_ilocked(thread, do_proc_work);
941 	binder_inner_proc_unlock(thread->proc);
942 
943 	return has_work;
944 }
945 
946 static bool binder_available_for_proc_work_ilocked(struct binder_thread *thread)
947 {
948 	return !thread->transaction_stack &&
949 		binder_worklist_empty_ilocked(&thread->todo) &&
950 		(thread->looper & (BINDER_LOOPER_STATE_ENTERED |
951 				   BINDER_LOOPER_STATE_REGISTERED));
952 }
953 
954 static void binder_wakeup_poll_threads_ilocked(struct binder_proc *proc,
955 					       bool sync)
956 {
957 	struct rb_node *n;
958 	struct binder_thread *thread;
959 
960 	for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) {
961 		thread = rb_entry(n, struct binder_thread, rb_node);
962 		if (thread->looper & BINDER_LOOPER_STATE_POLL &&
963 		    binder_available_for_proc_work_ilocked(thread)) {
964 			if (sync)
965 				wake_up_interruptible_sync(&thread->wait);
966 			else
967 				wake_up_interruptible(&thread->wait);
968 		}
969 	}
970 }
971 
972 /**
973  * binder_select_thread_ilocked() - selects a thread for doing proc work.
974  * @proc:	process to select a thread from
975  *
976  * Note that calling this function moves the thread off the waiting_threads
977  * list, so it can only be woken up by the caller of this function, or a
978  * signal. Therefore, callers *should* always wake up the thread this function
979  * returns.
980  *
981  * Return:	If there's a thread currently waiting for process work,
982  *		returns that thread. Otherwise returns NULL.
983  */
984 static struct binder_thread *
985 binder_select_thread_ilocked(struct binder_proc *proc)
986 {
987 	struct binder_thread *thread;
988 
989 	assert_spin_locked(&proc->inner_lock);
990 	thread = list_first_entry_or_null(&proc->waiting_threads,
991 					  struct binder_thread,
992 					  waiting_thread_node);
993 
994 	if (thread)
995 		list_del_init(&thread->waiting_thread_node);
996 
997 	return thread;
998 }
999 
1000 /**
1001  * binder_wakeup_thread_ilocked() - wakes up a thread for doing proc work.
1002  * @proc:	process to wake up a thread in
1003  * @thread:	specific thread to wake-up (may be NULL)
1004  * @sync:	whether to do a synchronous wake-up
1005  *
1006  * This function wakes up a thread in the @proc process.
1007  * The caller may provide a specific thread to wake-up in
1008  * the @thread parameter. If @thread is NULL, this function
1009  * will wake up threads that have called poll().
1010  *
1011  * Note that for this function to work as expected, callers
1012  * should first call binder_select_thread() to find a thread
1013  * to handle the work (if they don't have a thread already),
1014  * and pass the result into the @thread parameter.
1015  */
1016 static void binder_wakeup_thread_ilocked(struct binder_proc *proc,
1017 					 struct binder_thread *thread,
1018 					 bool sync)
1019 {
1020 	assert_spin_locked(&proc->inner_lock);
1021 
1022 	if (thread) {
1023 		if (sync)
1024 			wake_up_interruptible_sync(&thread->wait);
1025 		else
1026 			wake_up_interruptible(&thread->wait);
1027 		return;
1028 	}
1029 
1030 	/* Didn't find a thread waiting for proc work; this can happen
1031 	 * in two scenarios:
1032 	 * 1. All threads are busy handling transactions
1033 	 *    In that case, one of those threads should call back into
1034 	 *    the kernel driver soon and pick up this work.
1035 	 * 2. Threads are using the (e)poll interface, in which case
1036 	 *    they may be blocked on the waitqueue without having been
1037 	 *    added to waiting_threads. For this case, we just iterate
1038 	 *    over all threads not handling transaction work, and
1039 	 *    wake them all up. We wake all because we don't know whether
1040 	 *    a thread that called into (e)poll is handling non-binder
1041 	 *    work currently.
1042 	 */
1043 	binder_wakeup_poll_threads_ilocked(proc, sync);
1044 }
1045 
1046 static void binder_wakeup_proc_ilocked(struct binder_proc *proc)
1047 {
1048 	struct binder_thread *thread = binder_select_thread_ilocked(proc);
1049 
1050 	binder_wakeup_thread_ilocked(proc, thread, /* sync = */false);
1051 }
1052 
1053 static void binder_set_nice(long nice)
1054 {
1055 	long min_nice;
1056 
1057 	if (can_nice(current, nice)) {
1058 		set_user_nice(current, nice);
1059 		return;
1060 	}
1061 	min_nice = rlimit_to_nice(rlimit(RLIMIT_NICE));
1062 	binder_debug(BINDER_DEBUG_PRIORITY_CAP,
1063 		     "%d: nice value %ld not allowed use %ld instead\n",
1064 		      current->pid, nice, min_nice);
1065 	set_user_nice(current, min_nice);
1066 	if (min_nice <= MAX_NICE)
1067 		return;
1068 	binder_user_error("%d RLIMIT_NICE not set\n", current->pid);
1069 }
1070 
1071 static struct binder_node *binder_get_node_ilocked(struct binder_proc *proc,
1072 						   binder_uintptr_t ptr)
1073 {
1074 	struct rb_node *n = proc->nodes.rb_node;
1075 	struct binder_node *node;
1076 
1077 	assert_spin_locked(&proc->inner_lock);
1078 
1079 	while (n) {
1080 		node = rb_entry(n, struct binder_node, rb_node);
1081 
1082 		if (ptr < node->ptr)
1083 			n = n->rb_left;
1084 		else if (ptr > node->ptr)
1085 			n = n->rb_right;
1086 		else {
1087 			/*
1088 			 * take an implicit weak reference
1089 			 * to ensure node stays alive until
1090 			 * call to binder_put_node()
1091 			 */
1092 			binder_inc_node_tmpref_ilocked(node);
1093 			return node;
1094 		}
1095 	}
1096 	return NULL;
1097 }
1098 
1099 static struct binder_node *binder_get_node(struct binder_proc *proc,
1100 					   binder_uintptr_t ptr)
1101 {
1102 	struct binder_node *node;
1103 
1104 	binder_inner_proc_lock(proc);
1105 	node = binder_get_node_ilocked(proc, ptr);
1106 	binder_inner_proc_unlock(proc);
1107 	return node;
1108 }
1109 
1110 static struct binder_node *binder_init_node_ilocked(
1111 						struct binder_proc *proc,
1112 						struct binder_node *new_node,
1113 						struct flat_binder_object *fp)
1114 {
1115 	struct rb_node **p = &proc->nodes.rb_node;
1116 	struct rb_node *parent = NULL;
1117 	struct binder_node *node;
1118 	binder_uintptr_t ptr = fp ? fp->binder : 0;
1119 	binder_uintptr_t cookie = fp ? fp->cookie : 0;
1120 	__u32 flags = fp ? fp->flags : 0;
1121 
1122 	assert_spin_locked(&proc->inner_lock);
1123 
1124 	while (*p) {
1125 
1126 		parent = *p;
1127 		node = rb_entry(parent, struct binder_node, rb_node);
1128 
1129 		if (ptr < node->ptr)
1130 			p = &(*p)->rb_left;
1131 		else if (ptr > node->ptr)
1132 			p = &(*p)->rb_right;
1133 		else {
1134 			/*
1135 			 * A matching node is already in
1136 			 * the rb tree. Abandon the init
1137 			 * and return it.
1138 			 */
1139 			binder_inc_node_tmpref_ilocked(node);
1140 			return node;
1141 		}
1142 	}
1143 	node = new_node;
1144 	binder_stats_created(BINDER_STAT_NODE);
1145 	node->tmp_refs++;
1146 	rb_link_node(&node->rb_node, parent, p);
1147 	rb_insert_color(&node->rb_node, &proc->nodes);
1148 	node->debug_id = atomic_inc_return(&binder_last_id);
1149 	node->proc = proc;
1150 	node->ptr = ptr;
1151 	node->cookie = cookie;
1152 	node->work.type = BINDER_WORK_NODE;
1153 	node->min_priority = flags & FLAT_BINDER_FLAG_PRIORITY_MASK;
1154 	node->accept_fds = !!(flags & FLAT_BINDER_FLAG_ACCEPTS_FDS);
1155 	spin_lock_init(&node->lock);
1156 	INIT_LIST_HEAD(&node->work.entry);
1157 	INIT_LIST_HEAD(&node->async_todo);
1158 	binder_debug(BINDER_DEBUG_INTERNAL_REFS,
1159 		     "%d:%d node %d u%016llx c%016llx created\n",
1160 		     proc->pid, current->pid, node->debug_id,
1161 		     (u64)node->ptr, (u64)node->cookie);
1162 
1163 	return node;
1164 }
1165 
1166 static struct binder_node *binder_new_node(struct binder_proc *proc,
1167 					   struct flat_binder_object *fp)
1168 {
1169 	struct binder_node *node;
1170 	struct binder_node *new_node = kzalloc(sizeof(*node), GFP_KERNEL);
1171 
1172 	if (!new_node)
1173 		return NULL;
1174 	binder_inner_proc_lock(proc);
1175 	node = binder_init_node_ilocked(proc, new_node, fp);
1176 	binder_inner_proc_unlock(proc);
1177 	if (node != new_node)
1178 		/*
1179 		 * The node was already added by another thread
1180 		 */
1181 		kfree(new_node);
1182 
1183 	return node;
1184 }
1185 
1186 static void binder_free_node(struct binder_node *node)
1187 {
1188 	kfree(node);
1189 	binder_stats_deleted(BINDER_STAT_NODE);
1190 }
1191 
1192 static int binder_inc_node_nilocked(struct binder_node *node, int strong,
1193 				    int internal,
1194 				    struct list_head *target_list)
1195 {
1196 	struct binder_proc *proc = node->proc;
1197 
1198 	assert_spin_locked(&node->lock);
1199 	if (proc)
1200 		assert_spin_locked(&proc->inner_lock);
1201 	if (strong) {
1202 		if (internal) {
1203 			if (target_list == NULL &&
1204 			    node->internal_strong_refs == 0 &&
1205 			    !(node->proc &&
1206 			      node == node->proc->context->binder_context_mgr_node &&
1207 			      node->has_strong_ref)) {
1208 				pr_err("invalid inc strong node for %d\n",
1209 					node->debug_id);
1210 				return -EINVAL;
1211 			}
1212 			node->internal_strong_refs++;
1213 		} else
1214 			node->local_strong_refs++;
1215 		if (!node->has_strong_ref && target_list) {
1216 			struct binder_thread *thread = container_of(target_list,
1217 						    struct binder_thread, todo);
1218 			binder_dequeue_work_ilocked(&node->work);
1219 			BUG_ON(&thread->todo != target_list);
1220 			binder_enqueue_deferred_thread_work_ilocked(thread,
1221 								   &node->work);
1222 		}
1223 	} else {
1224 		if (!internal)
1225 			node->local_weak_refs++;
1226 		if (!node->has_weak_ref && list_empty(&node->work.entry)) {
1227 			if (target_list == NULL) {
1228 				pr_err("invalid inc weak node for %d\n",
1229 					node->debug_id);
1230 				return -EINVAL;
1231 			}
1232 			/*
1233 			 * See comment above
1234 			 */
1235 			binder_enqueue_work_ilocked(&node->work, target_list);
1236 		}
1237 	}
1238 	return 0;
1239 }
1240 
1241 static int binder_inc_node(struct binder_node *node, int strong, int internal,
1242 			   struct list_head *target_list)
1243 {
1244 	int ret;
1245 
1246 	binder_node_inner_lock(node);
1247 	ret = binder_inc_node_nilocked(node, strong, internal, target_list);
1248 	binder_node_inner_unlock(node);
1249 
1250 	return ret;
1251 }
1252 
1253 static bool binder_dec_node_nilocked(struct binder_node *node,
1254 				     int strong, int internal)
1255 {
1256 	struct binder_proc *proc = node->proc;
1257 
1258 	assert_spin_locked(&node->lock);
1259 	if (proc)
1260 		assert_spin_locked(&proc->inner_lock);
1261 	if (strong) {
1262 		if (internal)
1263 			node->internal_strong_refs--;
1264 		else
1265 			node->local_strong_refs--;
1266 		if (node->local_strong_refs || node->internal_strong_refs)
1267 			return false;
1268 	} else {
1269 		if (!internal)
1270 			node->local_weak_refs--;
1271 		if (node->local_weak_refs || node->tmp_refs ||
1272 				!hlist_empty(&node->refs))
1273 			return false;
1274 	}
1275 
1276 	if (proc && (node->has_strong_ref || node->has_weak_ref)) {
1277 		if (list_empty(&node->work.entry)) {
1278 			binder_enqueue_work_ilocked(&node->work, &proc->todo);
1279 			binder_wakeup_proc_ilocked(proc);
1280 		}
1281 	} else {
1282 		if (hlist_empty(&node->refs) && !node->local_strong_refs &&
1283 		    !node->local_weak_refs && !node->tmp_refs) {
1284 			if (proc) {
1285 				binder_dequeue_work_ilocked(&node->work);
1286 				rb_erase(&node->rb_node, &proc->nodes);
1287 				binder_debug(BINDER_DEBUG_INTERNAL_REFS,
1288 					     "refless node %d deleted\n",
1289 					     node->debug_id);
1290 			} else {
1291 				BUG_ON(!list_empty(&node->work.entry));
1292 				spin_lock(&binder_dead_nodes_lock);
1293 				/*
1294 				 * tmp_refs could have changed so
1295 				 * check it again
1296 				 */
1297 				if (node->tmp_refs) {
1298 					spin_unlock(&binder_dead_nodes_lock);
1299 					return false;
1300 				}
1301 				hlist_del(&node->dead_node);
1302 				spin_unlock(&binder_dead_nodes_lock);
1303 				binder_debug(BINDER_DEBUG_INTERNAL_REFS,
1304 					     "dead node %d deleted\n",
1305 					     node->debug_id);
1306 			}
1307 			return true;
1308 		}
1309 	}
1310 	return false;
1311 }
1312 
1313 static void binder_dec_node(struct binder_node *node, int strong, int internal)
1314 {
1315 	bool free_node;
1316 
1317 	binder_node_inner_lock(node);
1318 	free_node = binder_dec_node_nilocked(node, strong, internal);
1319 	binder_node_inner_unlock(node);
1320 	if (free_node)
1321 		binder_free_node(node);
1322 }
1323 
1324 static void binder_inc_node_tmpref_ilocked(struct binder_node *node)
1325 {
1326 	/*
1327 	 * No call to binder_inc_node() is needed since we
1328 	 * don't need to inform userspace of any changes to
1329 	 * tmp_refs
1330 	 */
1331 	node->tmp_refs++;
1332 }
1333 
1334 /**
1335  * binder_inc_node_tmpref() - take a temporary reference on node
1336  * @node:	node to reference
1337  *
1338  * Take reference on node to prevent the node from being freed
1339  * while referenced only by a local variable. The inner lock is
1340  * needed to serialize with the node work on the queue (which
1341  * isn't needed after the node is dead). If the node is dead
1342  * (node->proc is NULL), use binder_dead_nodes_lock to protect
1343  * node->tmp_refs against dead-node-only cases where the node
1344  * lock cannot be acquired (eg traversing the dead node list to
1345  * print nodes)
1346  */
1347 static void binder_inc_node_tmpref(struct binder_node *node)
1348 {
1349 	binder_node_lock(node);
1350 	if (node->proc)
1351 		binder_inner_proc_lock(node->proc);
1352 	else
1353 		spin_lock(&binder_dead_nodes_lock);
1354 	binder_inc_node_tmpref_ilocked(node);
1355 	if (node->proc)
1356 		binder_inner_proc_unlock(node->proc);
1357 	else
1358 		spin_unlock(&binder_dead_nodes_lock);
1359 	binder_node_unlock(node);
1360 }
1361 
1362 /**
1363  * binder_dec_node_tmpref() - remove a temporary reference on node
1364  * @node:	node to reference
1365  *
1366  * Release temporary reference on node taken via binder_inc_node_tmpref()
1367  */
1368 static void binder_dec_node_tmpref(struct binder_node *node)
1369 {
1370 	bool free_node;
1371 
1372 	binder_node_inner_lock(node);
1373 	if (!node->proc)
1374 		spin_lock(&binder_dead_nodes_lock);
1375 	else
1376 		__acquire(&binder_dead_nodes_lock);
1377 	node->tmp_refs--;
1378 	BUG_ON(node->tmp_refs < 0);
1379 	if (!node->proc)
1380 		spin_unlock(&binder_dead_nodes_lock);
1381 	else
1382 		__release(&binder_dead_nodes_lock);
1383 	/*
1384 	 * Call binder_dec_node() to check if all refcounts are 0
1385 	 * and cleanup is needed. Calling with strong=0 and internal=1
1386 	 * causes no actual reference to be released in binder_dec_node().
1387 	 * If that changes, a change is needed here too.
1388 	 */
1389 	free_node = binder_dec_node_nilocked(node, 0, 1);
1390 	binder_node_inner_unlock(node);
1391 	if (free_node)
1392 		binder_free_node(node);
1393 }
1394 
1395 static void binder_put_node(struct binder_node *node)
1396 {
1397 	binder_dec_node_tmpref(node);
1398 }
1399 
1400 static struct binder_ref *binder_get_ref_olocked(struct binder_proc *proc,
1401 						 u32 desc, bool need_strong_ref)
1402 {
1403 	struct rb_node *n = proc->refs_by_desc.rb_node;
1404 	struct binder_ref *ref;
1405 
1406 	while (n) {
1407 		ref = rb_entry(n, struct binder_ref, rb_node_desc);
1408 
1409 		if (desc < ref->data.desc) {
1410 			n = n->rb_left;
1411 		} else if (desc > ref->data.desc) {
1412 			n = n->rb_right;
1413 		} else if (need_strong_ref && !ref->data.strong) {
1414 			binder_user_error("tried to use weak ref as strong ref\n");
1415 			return NULL;
1416 		} else {
1417 			return ref;
1418 		}
1419 	}
1420 	return NULL;
1421 }
1422 
1423 /**
1424  * binder_get_ref_for_node_olocked() - get the ref associated with given node
1425  * @proc:	binder_proc that owns the ref
1426  * @node:	binder_node of target
1427  * @new_ref:	newly allocated binder_ref to be initialized or %NULL
1428  *
1429  * Look up the ref for the given node and return it if it exists
1430  *
1431  * If it doesn't exist and the caller provides a newly allocated
1432  * ref, initialize the fields of the newly allocated ref and insert
1433  * into the given proc rb_trees and node refs list.
1434  *
1435  * Return:	the ref for node. It is possible that another thread
1436  *		allocated/initialized the ref first in which case the
1437  *		returned ref would be different than the passed-in
1438  *		new_ref. new_ref must be kfree'd by the caller in
1439  *		this case.
1440  */
1441 static struct binder_ref *binder_get_ref_for_node_olocked(
1442 					struct binder_proc *proc,
1443 					struct binder_node *node,
1444 					struct binder_ref *new_ref)
1445 {
1446 	struct binder_context *context = proc->context;
1447 	struct rb_node **p = &proc->refs_by_node.rb_node;
1448 	struct rb_node *parent = NULL;
1449 	struct binder_ref *ref;
1450 	struct rb_node *n;
1451 
1452 	while (*p) {
1453 		parent = *p;
1454 		ref = rb_entry(parent, struct binder_ref, rb_node_node);
1455 
1456 		if (node < ref->node)
1457 			p = &(*p)->rb_left;
1458 		else if (node > ref->node)
1459 			p = &(*p)->rb_right;
1460 		else
1461 			return ref;
1462 	}
1463 	if (!new_ref)
1464 		return NULL;
1465 
1466 	binder_stats_created(BINDER_STAT_REF);
1467 	new_ref->data.debug_id = atomic_inc_return(&binder_last_id);
1468 	new_ref->proc = proc;
1469 	new_ref->node = node;
1470 	rb_link_node(&new_ref->rb_node_node, parent, p);
1471 	rb_insert_color(&new_ref->rb_node_node, &proc->refs_by_node);
1472 
1473 	new_ref->data.desc = (node == context->binder_context_mgr_node) ? 0 : 1;
1474 	for (n = rb_first(&proc->refs_by_desc); n != NULL; n = rb_next(n)) {
1475 		ref = rb_entry(n, struct binder_ref, rb_node_desc);
1476 		if (ref->data.desc > new_ref->data.desc)
1477 			break;
1478 		new_ref->data.desc = ref->data.desc + 1;
1479 	}
1480 
1481 	p = &proc->refs_by_desc.rb_node;
1482 	while (*p) {
1483 		parent = *p;
1484 		ref = rb_entry(parent, struct binder_ref, rb_node_desc);
1485 
1486 		if (new_ref->data.desc < ref->data.desc)
1487 			p = &(*p)->rb_left;
1488 		else if (new_ref->data.desc > ref->data.desc)
1489 			p = &(*p)->rb_right;
1490 		else
1491 			BUG();
1492 	}
1493 	rb_link_node(&new_ref->rb_node_desc, parent, p);
1494 	rb_insert_color(&new_ref->rb_node_desc, &proc->refs_by_desc);
1495 
1496 	binder_node_lock(node);
1497 	hlist_add_head(&new_ref->node_entry, &node->refs);
1498 
1499 	binder_debug(BINDER_DEBUG_INTERNAL_REFS,
1500 		     "%d new ref %d desc %d for node %d\n",
1501 		      proc->pid, new_ref->data.debug_id, new_ref->data.desc,
1502 		      node->debug_id);
1503 	binder_node_unlock(node);
1504 	return new_ref;
1505 }
1506 
1507 static void binder_cleanup_ref_olocked(struct binder_ref *ref)
1508 {
1509 	bool delete_node = false;
1510 
1511 	binder_debug(BINDER_DEBUG_INTERNAL_REFS,
1512 		     "%d delete ref %d desc %d for node %d\n",
1513 		      ref->proc->pid, ref->data.debug_id, ref->data.desc,
1514 		      ref->node->debug_id);
1515 
1516 	rb_erase(&ref->rb_node_desc, &ref->proc->refs_by_desc);
1517 	rb_erase(&ref->rb_node_node, &ref->proc->refs_by_node);
1518 
1519 	binder_node_inner_lock(ref->node);
1520 	if (ref->data.strong)
1521 		binder_dec_node_nilocked(ref->node, 1, 1);
1522 
1523 	hlist_del(&ref->node_entry);
1524 	delete_node = binder_dec_node_nilocked(ref->node, 0, 1);
1525 	binder_node_inner_unlock(ref->node);
1526 	/*
1527 	 * Clear ref->node unless we want the caller to free the node
1528 	 */
1529 	if (!delete_node) {
1530 		/*
1531 		 * The caller uses ref->node to determine
1532 		 * whether the node needs to be freed. Clear
1533 		 * it since the node is still alive.
1534 		 */
1535 		ref->node = NULL;
1536 	}
1537 
1538 	if (ref->death) {
1539 		binder_debug(BINDER_DEBUG_DEAD_BINDER,
1540 			     "%d delete ref %d desc %d has death notification\n",
1541 			      ref->proc->pid, ref->data.debug_id,
1542 			      ref->data.desc);
1543 		binder_dequeue_work(ref->proc, &ref->death->work);
1544 		binder_stats_deleted(BINDER_STAT_DEATH);
1545 	}
1546 	binder_stats_deleted(BINDER_STAT_REF);
1547 }
1548 
1549 /**
1550  * binder_inc_ref_olocked() - increment the ref for given handle
1551  * @ref:         ref to be incremented
1552  * @strong:      if true, strong increment, else weak
1553  * @target_list: list to queue node work on
1554  *
1555  * Increment the ref. @ref->proc->outer_lock must be held on entry
1556  *
1557  * Return: 0, if successful, else errno
1558  */
1559 static int binder_inc_ref_olocked(struct binder_ref *ref, int strong,
1560 				  struct list_head *target_list)
1561 {
1562 	int ret;
1563 
1564 	if (strong) {
1565 		if (ref->data.strong == 0) {
1566 			ret = binder_inc_node(ref->node, 1, 1, target_list);
1567 			if (ret)
1568 				return ret;
1569 		}
1570 		ref->data.strong++;
1571 	} else {
1572 		if (ref->data.weak == 0) {
1573 			ret = binder_inc_node(ref->node, 0, 1, target_list);
1574 			if (ret)
1575 				return ret;
1576 		}
1577 		ref->data.weak++;
1578 	}
1579 	return 0;
1580 }
1581 
1582 /**
1583  * binder_dec_ref() - dec the ref for given handle
1584  * @ref:	ref to be decremented
1585  * @strong:	if true, strong decrement, else weak
1586  *
1587  * Decrement the ref.
1588  *
1589  * Return: true if ref is cleaned up and ready to be freed
1590  */
1591 static bool binder_dec_ref_olocked(struct binder_ref *ref, int strong)
1592 {
1593 	if (strong) {
1594 		if (ref->data.strong == 0) {
1595 			binder_user_error("%d invalid dec strong, ref %d desc %d s %d w %d\n",
1596 					  ref->proc->pid, ref->data.debug_id,
1597 					  ref->data.desc, ref->data.strong,
1598 					  ref->data.weak);
1599 			return false;
1600 		}
1601 		ref->data.strong--;
1602 		if (ref->data.strong == 0)
1603 			binder_dec_node(ref->node, strong, 1);
1604 	} else {
1605 		if (ref->data.weak == 0) {
1606 			binder_user_error("%d invalid dec weak, ref %d desc %d s %d w %d\n",
1607 					  ref->proc->pid, ref->data.debug_id,
1608 					  ref->data.desc, ref->data.strong,
1609 					  ref->data.weak);
1610 			return false;
1611 		}
1612 		ref->data.weak--;
1613 	}
1614 	if (ref->data.strong == 0 && ref->data.weak == 0) {
1615 		binder_cleanup_ref_olocked(ref);
1616 		return true;
1617 	}
1618 	return false;
1619 }
1620 
1621 /**
1622  * binder_get_node_from_ref() - get the node from the given proc/desc
1623  * @proc:	proc containing the ref
1624  * @desc:	the handle associated with the ref
1625  * @need_strong_ref: if true, only return node if ref is strong
1626  * @rdata:	the id/refcount data for the ref
1627  *
1628  * Given a proc and ref handle, return the associated binder_node
1629  *
1630  * Return: a binder_node or NULL if not found or not strong when strong required
1631  */
1632 static struct binder_node *binder_get_node_from_ref(
1633 		struct binder_proc *proc,
1634 		u32 desc, bool need_strong_ref,
1635 		struct binder_ref_data *rdata)
1636 {
1637 	struct binder_node *node;
1638 	struct binder_ref *ref;
1639 
1640 	binder_proc_lock(proc);
1641 	ref = binder_get_ref_olocked(proc, desc, need_strong_ref);
1642 	if (!ref)
1643 		goto err_no_ref;
1644 	node = ref->node;
1645 	/*
1646 	 * Take an implicit reference on the node to ensure
1647 	 * it stays alive until the call to binder_put_node()
1648 	 */
1649 	binder_inc_node_tmpref(node);
1650 	if (rdata)
1651 		*rdata = ref->data;
1652 	binder_proc_unlock(proc);
1653 
1654 	return node;
1655 
1656 err_no_ref:
1657 	binder_proc_unlock(proc);
1658 	return NULL;
1659 }
1660 
1661 /**
1662  * binder_free_ref() - free the binder_ref
1663  * @ref:	ref to free
1664  *
1665  * Free the binder_ref. Free the binder_node indicated by ref->node
1666  * (if non-NULL) and the binder_ref_death indicated by ref->death.
1667  */
1668 static void binder_free_ref(struct binder_ref *ref)
1669 {
1670 	if (ref->node)
1671 		binder_free_node(ref->node);
1672 	kfree(ref->death);
1673 	kfree(ref);
1674 }
1675 
1676 /**
1677  * binder_update_ref_for_handle() - inc/dec the ref for given handle
1678  * @proc:	proc containing the ref
1679  * @desc:	the handle associated with the ref
1680  * @increment:	true=inc reference, false=dec reference
1681  * @strong:	true=strong reference, false=weak reference
1682  * @rdata:	the id/refcount data for the ref
1683  *
1684  * Given a proc and ref handle, increment or decrement the ref
1685  * according to "increment" arg.
1686  *
1687  * Return: 0 if successful, else errno
1688  */
1689 static int binder_update_ref_for_handle(struct binder_proc *proc,
1690 		uint32_t desc, bool increment, bool strong,
1691 		struct binder_ref_data *rdata)
1692 {
1693 	int ret = 0;
1694 	struct binder_ref *ref;
1695 	bool delete_ref = false;
1696 
1697 	binder_proc_lock(proc);
1698 	ref = binder_get_ref_olocked(proc, desc, strong);
1699 	if (!ref) {
1700 		ret = -EINVAL;
1701 		goto err_no_ref;
1702 	}
1703 	if (increment)
1704 		ret = binder_inc_ref_olocked(ref, strong, NULL);
1705 	else
1706 		delete_ref = binder_dec_ref_olocked(ref, strong);
1707 
1708 	if (rdata)
1709 		*rdata = ref->data;
1710 	binder_proc_unlock(proc);
1711 
1712 	if (delete_ref)
1713 		binder_free_ref(ref);
1714 	return ret;
1715 
1716 err_no_ref:
1717 	binder_proc_unlock(proc);
1718 	return ret;
1719 }
1720 
1721 /**
1722  * binder_dec_ref_for_handle() - dec the ref for given handle
1723  * @proc:	proc containing the ref
1724  * @desc:	the handle associated with the ref
1725  * @strong:	true=strong reference, false=weak reference
1726  * @rdata:	the id/refcount data for the ref
1727  *
1728  * Just calls binder_update_ref_for_handle() to decrement the ref.
1729  *
1730  * Return: 0 if successful, else errno
1731  */
1732 static int binder_dec_ref_for_handle(struct binder_proc *proc,
1733 		uint32_t desc, bool strong, struct binder_ref_data *rdata)
1734 {
1735 	return binder_update_ref_for_handle(proc, desc, false, strong, rdata);
1736 }
1737 
1738 
1739 /**
1740  * binder_inc_ref_for_node() - increment the ref for given proc/node
1741  * @proc:	 proc containing the ref
1742  * @node:	 target node
1743  * @strong:	 true=strong reference, false=weak reference
1744  * @target_list: worklist to use if node is incremented
1745  * @rdata:	 the id/refcount data for the ref
1746  *
1747  * Given a proc and node, increment the ref. Create the ref if it
1748  * doesn't already exist
1749  *
1750  * Return: 0 if successful, else errno
1751  */
1752 static int binder_inc_ref_for_node(struct binder_proc *proc,
1753 			struct binder_node *node,
1754 			bool strong,
1755 			struct list_head *target_list,
1756 			struct binder_ref_data *rdata)
1757 {
1758 	struct binder_ref *ref;
1759 	struct binder_ref *new_ref = NULL;
1760 	int ret = 0;
1761 
1762 	binder_proc_lock(proc);
1763 	ref = binder_get_ref_for_node_olocked(proc, node, NULL);
1764 	if (!ref) {
1765 		binder_proc_unlock(proc);
1766 		new_ref = kzalloc(sizeof(*ref), GFP_KERNEL);
1767 		if (!new_ref)
1768 			return -ENOMEM;
1769 		binder_proc_lock(proc);
1770 		ref = binder_get_ref_for_node_olocked(proc, node, new_ref);
1771 	}
1772 	ret = binder_inc_ref_olocked(ref, strong, target_list);
1773 	*rdata = ref->data;
1774 	binder_proc_unlock(proc);
1775 	if (new_ref && ref != new_ref)
1776 		/*
1777 		 * Another thread created the ref first so
1778 		 * free the one we allocated
1779 		 */
1780 		kfree(new_ref);
1781 	return ret;
1782 }
1783 
1784 static void binder_pop_transaction_ilocked(struct binder_thread *target_thread,
1785 					   struct binder_transaction *t)
1786 {
1787 	BUG_ON(!target_thread);
1788 	assert_spin_locked(&target_thread->proc->inner_lock);
1789 	BUG_ON(target_thread->transaction_stack != t);
1790 	BUG_ON(target_thread->transaction_stack->from != target_thread);
1791 	target_thread->transaction_stack =
1792 		target_thread->transaction_stack->from_parent;
1793 	t->from = NULL;
1794 }
1795 
1796 /**
1797  * binder_thread_dec_tmpref() - decrement thread->tmp_ref
1798  * @thread:	thread to decrement
1799  *
1800  * A thread needs to be kept alive while being used to create or
1801  * handle a transaction. binder_get_txn_from() is used to safely
1802  * extract t->from from a binder_transaction and keep the thread
1803  * indicated by t->from from being freed. When done with that
1804  * binder_thread, this function is called to decrement the
1805  * tmp_ref and free if appropriate (thread has been released
1806  * and no transaction being processed by the driver)
1807  */
1808 static void binder_thread_dec_tmpref(struct binder_thread *thread)
1809 {
1810 	/*
1811 	 * atomic is used to protect the counter value while
1812 	 * it cannot reach zero or thread->is_dead is false
1813 	 */
1814 	binder_inner_proc_lock(thread->proc);
1815 	atomic_dec(&thread->tmp_ref);
1816 	if (thread->is_dead && !atomic_read(&thread->tmp_ref)) {
1817 		binder_inner_proc_unlock(thread->proc);
1818 		binder_free_thread(thread);
1819 		return;
1820 	}
1821 	binder_inner_proc_unlock(thread->proc);
1822 }
1823 
1824 /**
1825  * binder_proc_dec_tmpref() - decrement proc->tmp_ref
1826  * @proc:	proc to decrement
1827  *
1828  * A binder_proc needs to be kept alive while being used to create or
1829  * handle a transaction. proc->tmp_ref is incremented when
1830  * creating a new transaction or the binder_proc is currently in-use
1831  * by threads that are being released. When done with the binder_proc,
1832  * this function is called to decrement the counter and free the
1833  * proc if appropriate (proc has been released, all threads have
1834  * been released and not currenly in-use to process a transaction).
1835  */
1836 static void binder_proc_dec_tmpref(struct binder_proc *proc)
1837 {
1838 	binder_inner_proc_lock(proc);
1839 	proc->tmp_ref--;
1840 	if (proc->is_dead && RB_EMPTY_ROOT(&proc->threads) &&
1841 			!proc->tmp_ref) {
1842 		binder_inner_proc_unlock(proc);
1843 		binder_free_proc(proc);
1844 		return;
1845 	}
1846 	binder_inner_proc_unlock(proc);
1847 }
1848 
1849 /**
1850  * binder_get_txn_from() - safely extract the "from" thread in transaction
1851  * @t:	binder transaction for t->from
1852  *
1853  * Atomically return the "from" thread and increment the tmp_ref
1854  * count for the thread to ensure it stays alive until
1855  * binder_thread_dec_tmpref() is called.
1856  *
1857  * Return: the value of t->from
1858  */
1859 static struct binder_thread *binder_get_txn_from(
1860 		struct binder_transaction *t)
1861 {
1862 	struct binder_thread *from;
1863 
1864 	spin_lock(&t->lock);
1865 	from = t->from;
1866 	if (from)
1867 		atomic_inc(&from->tmp_ref);
1868 	spin_unlock(&t->lock);
1869 	return from;
1870 }
1871 
1872 /**
1873  * binder_get_txn_from_and_acq_inner() - get t->from and acquire inner lock
1874  * @t:	binder transaction for t->from
1875  *
1876  * Same as binder_get_txn_from() except it also acquires the proc->inner_lock
1877  * to guarantee that the thread cannot be released while operating on it.
1878  * The caller must call binder_inner_proc_unlock() to release the inner lock
1879  * as well as call binder_dec_thread_txn() to release the reference.
1880  *
1881  * Return: the value of t->from
1882  */
1883 static struct binder_thread *binder_get_txn_from_and_acq_inner(
1884 		struct binder_transaction *t)
1885 	__acquires(&t->from->proc->inner_lock)
1886 {
1887 	struct binder_thread *from;
1888 
1889 	from = binder_get_txn_from(t);
1890 	if (!from) {
1891 		__acquire(&from->proc->inner_lock);
1892 		return NULL;
1893 	}
1894 	binder_inner_proc_lock(from->proc);
1895 	if (t->from) {
1896 		BUG_ON(from != t->from);
1897 		return from;
1898 	}
1899 	binder_inner_proc_unlock(from->proc);
1900 	__acquire(&from->proc->inner_lock);
1901 	binder_thread_dec_tmpref(from);
1902 	return NULL;
1903 }
1904 
1905 /**
1906  * binder_free_txn_fixups() - free unprocessed fd fixups
1907  * @t:	binder transaction for t->from
1908  *
1909  * If the transaction is being torn down prior to being
1910  * processed by the target process, free all of the
1911  * fd fixups and fput the file structs. It is safe to
1912  * call this function after the fixups have been
1913  * processed -- in that case, the list will be empty.
1914  */
1915 static void binder_free_txn_fixups(struct binder_transaction *t)
1916 {
1917 	struct binder_txn_fd_fixup *fixup, *tmp;
1918 
1919 	list_for_each_entry_safe(fixup, tmp, &t->fd_fixups, fixup_entry) {
1920 		fput(fixup->file);
1921 		list_del(&fixup->fixup_entry);
1922 		kfree(fixup);
1923 	}
1924 }
1925 
1926 static void binder_free_transaction(struct binder_transaction *t)
1927 {
1928 	if (t->buffer)
1929 		t->buffer->transaction = NULL;
1930 	binder_free_txn_fixups(t);
1931 	kfree(t);
1932 	binder_stats_deleted(BINDER_STAT_TRANSACTION);
1933 }
1934 
1935 static void binder_send_failed_reply(struct binder_transaction *t,
1936 				     uint32_t error_code)
1937 {
1938 	struct binder_thread *target_thread;
1939 	struct binder_transaction *next;
1940 
1941 	BUG_ON(t->flags & TF_ONE_WAY);
1942 	while (1) {
1943 		target_thread = binder_get_txn_from_and_acq_inner(t);
1944 		if (target_thread) {
1945 			binder_debug(BINDER_DEBUG_FAILED_TRANSACTION,
1946 				     "send failed reply for transaction %d to %d:%d\n",
1947 				      t->debug_id,
1948 				      target_thread->proc->pid,
1949 				      target_thread->pid);
1950 
1951 			binder_pop_transaction_ilocked(target_thread, t);
1952 			if (target_thread->reply_error.cmd == BR_OK) {
1953 				target_thread->reply_error.cmd = error_code;
1954 				binder_enqueue_thread_work_ilocked(
1955 					target_thread,
1956 					&target_thread->reply_error.work);
1957 				wake_up_interruptible(&target_thread->wait);
1958 			} else {
1959 				/*
1960 				 * Cannot get here for normal operation, but
1961 				 * we can if multiple synchronous transactions
1962 				 * are sent without blocking for responses.
1963 				 * Just ignore the 2nd error in this case.
1964 				 */
1965 				pr_warn("Unexpected reply error: %u\n",
1966 					target_thread->reply_error.cmd);
1967 			}
1968 			binder_inner_proc_unlock(target_thread->proc);
1969 			binder_thread_dec_tmpref(target_thread);
1970 			binder_free_transaction(t);
1971 			return;
1972 		} else {
1973 			__release(&target_thread->proc->inner_lock);
1974 		}
1975 		next = t->from_parent;
1976 
1977 		binder_debug(BINDER_DEBUG_FAILED_TRANSACTION,
1978 			     "send failed reply for transaction %d, target dead\n",
1979 			     t->debug_id);
1980 
1981 		binder_free_transaction(t);
1982 		if (next == NULL) {
1983 			binder_debug(BINDER_DEBUG_DEAD_BINDER,
1984 				     "reply failed, no target thread at root\n");
1985 			return;
1986 		}
1987 		t = next;
1988 		binder_debug(BINDER_DEBUG_DEAD_BINDER,
1989 			     "reply failed, no target thread -- retry %d\n",
1990 			      t->debug_id);
1991 	}
1992 }
1993 
1994 /**
1995  * binder_cleanup_transaction() - cleans up undelivered transaction
1996  * @t:		transaction that needs to be cleaned up
1997  * @reason:	reason the transaction wasn't delivered
1998  * @error_code:	error to return to caller (if synchronous call)
1999  */
2000 static void binder_cleanup_transaction(struct binder_transaction *t,
2001 				       const char *reason,
2002 				       uint32_t error_code)
2003 {
2004 	if (t->buffer->target_node && !(t->flags & TF_ONE_WAY)) {
2005 		binder_send_failed_reply(t, error_code);
2006 	} else {
2007 		binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
2008 			"undelivered transaction %d, %s\n",
2009 			t->debug_id, reason);
2010 		binder_free_transaction(t);
2011 	}
2012 }
2013 
2014 /**
2015  * binder_validate_object() - checks for a valid metadata object in a buffer.
2016  * @buffer:	binder_buffer that we're parsing.
2017  * @offset:	offset in the buffer at which to validate an object.
2018  *
2019  * Return:	If there's a valid metadata object at @offset in @buffer, the
2020  *		size of that object. Otherwise, it returns zero.
2021  */
2022 static size_t binder_validate_object(struct binder_buffer *buffer, u64 offset)
2023 {
2024 	/* Check if we can read a header first */
2025 	struct binder_object_header *hdr;
2026 	size_t object_size = 0;
2027 
2028 	if (buffer->data_size < sizeof(*hdr) ||
2029 	    offset > buffer->data_size - sizeof(*hdr) ||
2030 	    !IS_ALIGNED(offset, sizeof(u32)))
2031 		return 0;
2032 
2033 	/* Ok, now see if we can read a complete object. */
2034 	hdr = (struct binder_object_header *)(buffer->data + offset);
2035 	switch (hdr->type) {
2036 	case BINDER_TYPE_BINDER:
2037 	case BINDER_TYPE_WEAK_BINDER:
2038 	case BINDER_TYPE_HANDLE:
2039 	case BINDER_TYPE_WEAK_HANDLE:
2040 		object_size = sizeof(struct flat_binder_object);
2041 		break;
2042 	case BINDER_TYPE_FD:
2043 		object_size = sizeof(struct binder_fd_object);
2044 		break;
2045 	case BINDER_TYPE_PTR:
2046 		object_size = sizeof(struct binder_buffer_object);
2047 		break;
2048 	case BINDER_TYPE_FDA:
2049 		object_size = sizeof(struct binder_fd_array_object);
2050 		break;
2051 	default:
2052 		return 0;
2053 	}
2054 	if (offset <= buffer->data_size - object_size &&
2055 	    buffer->data_size >= object_size)
2056 		return object_size;
2057 	else
2058 		return 0;
2059 }
2060 
2061 /**
2062  * binder_validate_ptr() - validates binder_buffer_object in a binder_buffer.
2063  * @b:		binder_buffer containing the object
2064  * @index:	index in offset array at which the binder_buffer_object is
2065  *		located
2066  * @start:	points to the start of the offset array
2067  * @num_valid:	the number of valid offsets in the offset array
2068  *
2069  * Return:	If @index is within the valid range of the offset array
2070  *		described by @start and @num_valid, and if there's a valid
2071  *		binder_buffer_object at the offset found in index @index
2072  *		of the offset array, that object is returned. Otherwise,
2073  *		%NULL is returned.
2074  *		Note that the offset found in index @index itself is not
2075  *		verified; this function assumes that @num_valid elements
2076  *		from @start were previously verified to have valid offsets.
2077  */
2078 static struct binder_buffer_object *binder_validate_ptr(struct binder_buffer *b,
2079 							binder_size_t index,
2080 							binder_size_t *start,
2081 							binder_size_t num_valid)
2082 {
2083 	struct binder_buffer_object *buffer_obj;
2084 	binder_size_t *offp;
2085 
2086 	if (index >= num_valid)
2087 		return NULL;
2088 
2089 	offp = start + index;
2090 	buffer_obj = (struct binder_buffer_object *)(b->data + *offp);
2091 	if (buffer_obj->hdr.type != BINDER_TYPE_PTR)
2092 		return NULL;
2093 
2094 	return buffer_obj;
2095 }
2096 
2097 /**
2098  * binder_validate_fixup() - validates pointer/fd fixups happen in order.
2099  * @b:			transaction buffer
2100  * @objects_start	start of objects buffer
2101  * @buffer:		binder_buffer_object in which to fix up
2102  * @offset:		start offset in @buffer to fix up
2103  * @last_obj:		last binder_buffer_object that we fixed up in
2104  * @last_min_offset:	minimum fixup offset in @last_obj
2105  *
2106  * Return:		%true if a fixup in buffer @buffer at offset @offset is
2107  *			allowed.
2108  *
2109  * For safety reasons, we only allow fixups inside a buffer to happen
2110  * at increasing offsets; additionally, we only allow fixup on the last
2111  * buffer object that was verified, or one of its parents.
2112  *
2113  * Example of what is allowed:
2114  *
2115  * A
2116  *   B (parent = A, offset = 0)
2117  *   C (parent = A, offset = 16)
2118  *     D (parent = C, offset = 0)
2119  *   E (parent = A, offset = 32) // min_offset is 16 (C.parent_offset)
2120  *
2121  * Examples of what is not allowed:
2122  *
2123  * Decreasing offsets within the same parent:
2124  * A
2125  *   C (parent = A, offset = 16)
2126  *   B (parent = A, offset = 0) // decreasing offset within A
2127  *
2128  * Referring to a parent that wasn't the last object or any of its parents:
2129  * A
2130  *   B (parent = A, offset = 0)
2131  *   C (parent = A, offset = 0)
2132  *   C (parent = A, offset = 16)
2133  *     D (parent = B, offset = 0) // B is not A or any of A's parents
2134  */
2135 static bool binder_validate_fixup(struct binder_buffer *b,
2136 				  binder_size_t *objects_start,
2137 				  struct binder_buffer_object *buffer,
2138 				  binder_size_t fixup_offset,
2139 				  struct binder_buffer_object *last_obj,
2140 				  binder_size_t last_min_offset)
2141 {
2142 	if (!last_obj) {
2143 		/* Nothing to fix up in */
2144 		return false;
2145 	}
2146 
2147 	while (last_obj != buffer) {
2148 		/*
2149 		 * Safe to retrieve the parent of last_obj, since it
2150 		 * was already previously verified by the driver.
2151 		 */
2152 		if ((last_obj->flags & BINDER_BUFFER_FLAG_HAS_PARENT) == 0)
2153 			return false;
2154 		last_min_offset = last_obj->parent_offset + sizeof(uintptr_t);
2155 		last_obj = (struct binder_buffer_object *)
2156 			(b->data + *(objects_start + last_obj->parent));
2157 	}
2158 	return (fixup_offset >= last_min_offset);
2159 }
2160 
2161 /**
2162  * struct binder_task_work_cb - for deferred close
2163  *
2164  * @twork:                callback_head for task work
2165  * @fd:                   fd to close
2166  *
2167  * Structure to pass task work to be handled after
2168  * returning from binder_ioctl() via task_work_add().
2169  */
2170 struct binder_task_work_cb {
2171 	struct callback_head twork;
2172 	struct file *file;
2173 };
2174 
2175 /**
2176  * binder_do_fd_close() - close list of file descriptors
2177  * @twork:	callback head for task work
2178  *
2179  * It is not safe to call ksys_close() during the binder_ioctl()
2180  * function if there is a chance that binder's own file descriptor
2181  * might be closed. This is to meet the requirements for using
2182  * fdget() (see comments for __fget_light()). Therefore use
2183  * task_work_add() to schedule the close operation once we have
2184  * returned from binder_ioctl(). This function is a callback
2185  * for that mechanism and does the actual ksys_close() on the
2186  * given file descriptor.
2187  */
2188 static void binder_do_fd_close(struct callback_head *twork)
2189 {
2190 	struct binder_task_work_cb *twcb = container_of(twork,
2191 			struct binder_task_work_cb, twork);
2192 
2193 	fput(twcb->file);
2194 	kfree(twcb);
2195 }
2196 
2197 /**
2198  * binder_deferred_fd_close() - schedule a close for the given file-descriptor
2199  * @fd:		file-descriptor to close
2200  *
2201  * See comments in binder_do_fd_close(). This function is used to schedule
2202  * a file-descriptor to be closed after returning from binder_ioctl().
2203  */
2204 static void binder_deferred_fd_close(int fd)
2205 {
2206 	struct binder_task_work_cb *twcb;
2207 
2208 	twcb = kzalloc(sizeof(*twcb), GFP_KERNEL);
2209 	if (!twcb)
2210 		return;
2211 	init_task_work(&twcb->twork, binder_do_fd_close);
2212 	__close_fd_get_file(fd, &twcb->file);
2213 	if (twcb->file)
2214 		task_work_add(current, &twcb->twork, true);
2215 	else
2216 		kfree(twcb);
2217 }
2218 
2219 static void binder_transaction_buffer_release(struct binder_proc *proc,
2220 					      struct binder_buffer *buffer,
2221 					      binder_size_t *failed_at)
2222 {
2223 	binder_size_t *offp, *off_start, *off_end;
2224 	int debug_id = buffer->debug_id;
2225 
2226 	binder_debug(BINDER_DEBUG_TRANSACTION,
2227 		     "%d buffer release %d, size %zd-%zd, failed at %pK\n",
2228 		     proc->pid, buffer->debug_id,
2229 		     buffer->data_size, buffer->offsets_size, failed_at);
2230 
2231 	if (buffer->target_node)
2232 		binder_dec_node(buffer->target_node, 1, 0);
2233 
2234 	off_start = (binder_size_t *)(buffer->data +
2235 				      ALIGN(buffer->data_size, sizeof(void *)));
2236 	if (failed_at)
2237 		off_end = failed_at;
2238 	else
2239 		off_end = (void *)off_start + buffer->offsets_size;
2240 	for (offp = off_start; offp < off_end; offp++) {
2241 		struct binder_object_header *hdr;
2242 		size_t object_size = binder_validate_object(buffer, *offp);
2243 
2244 		if (object_size == 0) {
2245 			pr_err("transaction release %d bad object at offset %lld, size %zd\n",
2246 			       debug_id, (u64)*offp, buffer->data_size);
2247 			continue;
2248 		}
2249 		hdr = (struct binder_object_header *)(buffer->data + *offp);
2250 		switch (hdr->type) {
2251 		case BINDER_TYPE_BINDER:
2252 		case BINDER_TYPE_WEAK_BINDER: {
2253 			struct flat_binder_object *fp;
2254 			struct binder_node *node;
2255 
2256 			fp = to_flat_binder_object(hdr);
2257 			node = binder_get_node(proc, fp->binder);
2258 			if (node == NULL) {
2259 				pr_err("transaction release %d bad node %016llx\n",
2260 				       debug_id, (u64)fp->binder);
2261 				break;
2262 			}
2263 			binder_debug(BINDER_DEBUG_TRANSACTION,
2264 				     "        node %d u%016llx\n",
2265 				     node->debug_id, (u64)node->ptr);
2266 			binder_dec_node(node, hdr->type == BINDER_TYPE_BINDER,
2267 					0);
2268 			binder_put_node(node);
2269 		} break;
2270 		case BINDER_TYPE_HANDLE:
2271 		case BINDER_TYPE_WEAK_HANDLE: {
2272 			struct flat_binder_object *fp;
2273 			struct binder_ref_data rdata;
2274 			int ret;
2275 
2276 			fp = to_flat_binder_object(hdr);
2277 			ret = binder_dec_ref_for_handle(proc, fp->handle,
2278 				hdr->type == BINDER_TYPE_HANDLE, &rdata);
2279 
2280 			if (ret) {
2281 				pr_err("transaction release %d bad handle %d, ret = %d\n",
2282 				 debug_id, fp->handle, ret);
2283 				break;
2284 			}
2285 			binder_debug(BINDER_DEBUG_TRANSACTION,
2286 				     "        ref %d desc %d\n",
2287 				     rdata.debug_id, rdata.desc);
2288 		} break;
2289 
2290 		case BINDER_TYPE_FD: {
2291 			/*
2292 			 * No need to close the file here since user-space
2293 			 * closes it for for successfully delivered
2294 			 * transactions. For transactions that weren't
2295 			 * delivered, the new fd was never allocated so
2296 			 * there is no need to close and the fput on the
2297 			 * file is done when the transaction is torn
2298 			 * down.
2299 			 */
2300 			WARN_ON(failed_at &&
2301 				proc->tsk == current->group_leader);
2302 		} break;
2303 		case BINDER_TYPE_PTR:
2304 			/*
2305 			 * Nothing to do here, this will get cleaned up when the
2306 			 * transaction buffer gets freed
2307 			 */
2308 			break;
2309 		case BINDER_TYPE_FDA: {
2310 			struct binder_fd_array_object *fda;
2311 			struct binder_buffer_object *parent;
2312 			uintptr_t parent_buffer;
2313 			u32 *fd_array;
2314 			size_t fd_index;
2315 			binder_size_t fd_buf_size;
2316 
2317 			if (proc->tsk != current->group_leader) {
2318 				/*
2319 				 * Nothing to do if running in sender context
2320 				 * The fd fixups have not been applied so no
2321 				 * fds need to be closed.
2322 				 */
2323 				continue;
2324 			}
2325 
2326 			fda = to_binder_fd_array_object(hdr);
2327 			parent = binder_validate_ptr(buffer, fda->parent,
2328 						     off_start,
2329 						     offp - off_start);
2330 			if (!parent) {
2331 				pr_err("transaction release %d bad parent offset\n",
2332 				       debug_id);
2333 				continue;
2334 			}
2335 			/*
2336 			 * Since the parent was already fixed up, convert it
2337 			 * back to kernel address space to access it
2338 			 */
2339 			parent_buffer = parent->buffer -
2340 				binder_alloc_get_user_buffer_offset(
2341 						&proc->alloc);
2342 
2343 			fd_buf_size = sizeof(u32) * fda->num_fds;
2344 			if (fda->num_fds >= SIZE_MAX / sizeof(u32)) {
2345 				pr_err("transaction release %d invalid number of fds (%lld)\n",
2346 				       debug_id, (u64)fda->num_fds);
2347 				continue;
2348 			}
2349 			if (fd_buf_size > parent->length ||
2350 			    fda->parent_offset > parent->length - fd_buf_size) {
2351 				/* No space for all file descriptors here. */
2352 				pr_err("transaction release %d not enough space for %lld fds in buffer\n",
2353 				       debug_id, (u64)fda->num_fds);
2354 				continue;
2355 			}
2356 			fd_array = (u32 *)(parent_buffer + (uintptr_t)fda->parent_offset);
2357 			for (fd_index = 0; fd_index < fda->num_fds; fd_index++)
2358 				binder_deferred_fd_close(fd_array[fd_index]);
2359 		} break;
2360 		default:
2361 			pr_err("transaction release %d bad object type %x\n",
2362 				debug_id, hdr->type);
2363 			break;
2364 		}
2365 	}
2366 }
2367 
2368 static int binder_translate_binder(struct flat_binder_object *fp,
2369 				   struct binder_transaction *t,
2370 				   struct binder_thread *thread)
2371 {
2372 	struct binder_node *node;
2373 	struct binder_proc *proc = thread->proc;
2374 	struct binder_proc *target_proc = t->to_proc;
2375 	struct binder_ref_data rdata;
2376 	int ret = 0;
2377 
2378 	node = binder_get_node(proc, fp->binder);
2379 	if (!node) {
2380 		node = binder_new_node(proc, fp);
2381 		if (!node)
2382 			return -ENOMEM;
2383 	}
2384 	if (fp->cookie != node->cookie) {
2385 		binder_user_error("%d:%d sending u%016llx node %d, cookie mismatch %016llx != %016llx\n",
2386 				  proc->pid, thread->pid, (u64)fp->binder,
2387 				  node->debug_id, (u64)fp->cookie,
2388 				  (u64)node->cookie);
2389 		ret = -EINVAL;
2390 		goto done;
2391 	}
2392 	if (security_binder_transfer_binder(proc->tsk, target_proc->tsk)) {
2393 		ret = -EPERM;
2394 		goto done;
2395 	}
2396 
2397 	ret = binder_inc_ref_for_node(target_proc, node,
2398 			fp->hdr.type == BINDER_TYPE_BINDER,
2399 			&thread->todo, &rdata);
2400 	if (ret)
2401 		goto done;
2402 
2403 	if (fp->hdr.type == BINDER_TYPE_BINDER)
2404 		fp->hdr.type = BINDER_TYPE_HANDLE;
2405 	else
2406 		fp->hdr.type = BINDER_TYPE_WEAK_HANDLE;
2407 	fp->binder = 0;
2408 	fp->handle = rdata.desc;
2409 	fp->cookie = 0;
2410 
2411 	trace_binder_transaction_node_to_ref(t, node, &rdata);
2412 	binder_debug(BINDER_DEBUG_TRANSACTION,
2413 		     "        node %d u%016llx -> ref %d desc %d\n",
2414 		     node->debug_id, (u64)node->ptr,
2415 		     rdata.debug_id, rdata.desc);
2416 done:
2417 	binder_put_node(node);
2418 	return ret;
2419 }
2420 
2421 static int binder_translate_handle(struct flat_binder_object *fp,
2422 				   struct binder_transaction *t,
2423 				   struct binder_thread *thread)
2424 {
2425 	struct binder_proc *proc = thread->proc;
2426 	struct binder_proc *target_proc = t->to_proc;
2427 	struct binder_node *node;
2428 	struct binder_ref_data src_rdata;
2429 	int ret = 0;
2430 
2431 	node = binder_get_node_from_ref(proc, fp->handle,
2432 			fp->hdr.type == BINDER_TYPE_HANDLE, &src_rdata);
2433 	if (!node) {
2434 		binder_user_error("%d:%d got transaction with invalid handle, %d\n",
2435 				  proc->pid, thread->pid, fp->handle);
2436 		return -EINVAL;
2437 	}
2438 	if (security_binder_transfer_binder(proc->tsk, target_proc->tsk)) {
2439 		ret = -EPERM;
2440 		goto done;
2441 	}
2442 
2443 	binder_node_lock(node);
2444 	if (node->proc == target_proc) {
2445 		if (fp->hdr.type == BINDER_TYPE_HANDLE)
2446 			fp->hdr.type = BINDER_TYPE_BINDER;
2447 		else
2448 			fp->hdr.type = BINDER_TYPE_WEAK_BINDER;
2449 		fp->binder = node->ptr;
2450 		fp->cookie = node->cookie;
2451 		if (node->proc)
2452 			binder_inner_proc_lock(node->proc);
2453 		else
2454 			__acquire(&node->proc->inner_lock);
2455 		binder_inc_node_nilocked(node,
2456 					 fp->hdr.type == BINDER_TYPE_BINDER,
2457 					 0, NULL);
2458 		if (node->proc)
2459 			binder_inner_proc_unlock(node->proc);
2460 		else
2461 			__release(&node->proc->inner_lock);
2462 		trace_binder_transaction_ref_to_node(t, node, &src_rdata);
2463 		binder_debug(BINDER_DEBUG_TRANSACTION,
2464 			     "        ref %d desc %d -> node %d u%016llx\n",
2465 			     src_rdata.debug_id, src_rdata.desc, node->debug_id,
2466 			     (u64)node->ptr);
2467 		binder_node_unlock(node);
2468 	} else {
2469 		struct binder_ref_data dest_rdata;
2470 
2471 		binder_node_unlock(node);
2472 		ret = binder_inc_ref_for_node(target_proc, node,
2473 				fp->hdr.type == BINDER_TYPE_HANDLE,
2474 				NULL, &dest_rdata);
2475 		if (ret)
2476 			goto done;
2477 
2478 		fp->binder = 0;
2479 		fp->handle = dest_rdata.desc;
2480 		fp->cookie = 0;
2481 		trace_binder_transaction_ref_to_ref(t, node, &src_rdata,
2482 						    &dest_rdata);
2483 		binder_debug(BINDER_DEBUG_TRANSACTION,
2484 			     "        ref %d desc %d -> ref %d desc %d (node %d)\n",
2485 			     src_rdata.debug_id, src_rdata.desc,
2486 			     dest_rdata.debug_id, dest_rdata.desc,
2487 			     node->debug_id);
2488 	}
2489 done:
2490 	binder_put_node(node);
2491 	return ret;
2492 }
2493 
2494 static int binder_translate_fd(u32 *fdp,
2495 			       struct binder_transaction *t,
2496 			       struct binder_thread *thread,
2497 			       struct binder_transaction *in_reply_to)
2498 {
2499 	struct binder_proc *proc = thread->proc;
2500 	struct binder_proc *target_proc = t->to_proc;
2501 	struct binder_txn_fd_fixup *fixup;
2502 	struct file *file;
2503 	int ret = 0;
2504 	bool target_allows_fd;
2505 	int fd = *fdp;
2506 
2507 	if (in_reply_to)
2508 		target_allows_fd = !!(in_reply_to->flags & TF_ACCEPT_FDS);
2509 	else
2510 		target_allows_fd = t->buffer->target_node->accept_fds;
2511 	if (!target_allows_fd) {
2512 		binder_user_error("%d:%d got %s with fd, %d, but target does not allow fds\n",
2513 				  proc->pid, thread->pid,
2514 				  in_reply_to ? "reply" : "transaction",
2515 				  fd);
2516 		ret = -EPERM;
2517 		goto err_fd_not_accepted;
2518 	}
2519 
2520 	file = fget(fd);
2521 	if (!file) {
2522 		binder_user_error("%d:%d got transaction with invalid fd, %d\n",
2523 				  proc->pid, thread->pid, fd);
2524 		ret = -EBADF;
2525 		goto err_fget;
2526 	}
2527 	ret = security_binder_transfer_file(proc->tsk, target_proc->tsk, file);
2528 	if (ret < 0) {
2529 		ret = -EPERM;
2530 		goto err_security;
2531 	}
2532 
2533 	/*
2534 	 * Add fixup record for this transaction. The allocation
2535 	 * of the fd in the target needs to be done from a
2536 	 * target thread.
2537 	 */
2538 	fixup = kzalloc(sizeof(*fixup), GFP_KERNEL);
2539 	if (!fixup) {
2540 		ret = -ENOMEM;
2541 		goto err_alloc;
2542 	}
2543 	fixup->file = file;
2544 	fixup->offset = (uintptr_t)fdp - (uintptr_t)t->buffer->data;
2545 	trace_binder_transaction_fd_send(t, fd, fixup->offset);
2546 	list_add_tail(&fixup->fixup_entry, &t->fd_fixups);
2547 
2548 	return ret;
2549 
2550 err_alloc:
2551 err_security:
2552 	fput(file);
2553 err_fget:
2554 err_fd_not_accepted:
2555 	return ret;
2556 }
2557 
2558 static int binder_translate_fd_array(struct binder_fd_array_object *fda,
2559 				     struct binder_buffer_object *parent,
2560 				     struct binder_transaction *t,
2561 				     struct binder_thread *thread,
2562 				     struct binder_transaction *in_reply_to)
2563 {
2564 	binder_size_t fdi, fd_buf_size;
2565 	uintptr_t parent_buffer;
2566 	u32 *fd_array;
2567 	struct binder_proc *proc = thread->proc;
2568 	struct binder_proc *target_proc = t->to_proc;
2569 
2570 	fd_buf_size = sizeof(u32) * fda->num_fds;
2571 	if (fda->num_fds >= SIZE_MAX / sizeof(u32)) {
2572 		binder_user_error("%d:%d got transaction with invalid number of fds (%lld)\n",
2573 				  proc->pid, thread->pid, (u64)fda->num_fds);
2574 		return -EINVAL;
2575 	}
2576 	if (fd_buf_size > parent->length ||
2577 	    fda->parent_offset > parent->length - fd_buf_size) {
2578 		/* No space for all file descriptors here. */
2579 		binder_user_error("%d:%d not enough space to store %lld fds in buffer\n",
2580 				  proc->pid, thread->pid, (u64)fda->num_fds);
2581 		return -EINVAL;
2582 	}
2583 	/*
2584 	 * Since the parent was already fixed up, convert it
2585 	 * back to the kernel address space to access it
2586 	 */
2587 	parent_buffer = parent->buffer -
2588 		binder_alloc_get_user_buffer_offset(&target_proc->alloc);
2589 	fd_array = (u32 *)(parent_buffer + (uintptr_t)fda->parent_offset);
2590 	if (!IS_ALIGNED((unsigned long)fd_array, sizeof(u32))) {
2591 		binder_user_error("%d:%d parent offset not aligned correctly.\n",
2592 				  proc->pid, thread->pid);
2593 		return -EINVAL;
2594 	}
2595 	for (fdi = 0; fdi < fda->num_fds; fdi++) {
2596 		int ret = binder_translate_fd(&fd_array[fdi], t, thread,
2597 						in_reply_to);
2598 		if (ret < 0)
2599 			return ret;
2600 	}
2601 	return 0;
2602 }
2603 
2604 static int binder_fixup_parent(struct binder_transaction *t,
2605 			       struct binder_thread *thread,
2606 			       struct binder_buffer_object *bp,
2607 			       binder_size_t *off_start,
2608 			       binder_size_t num_valid,
2609 			       struct binder_buffer_object *last_fixup_obj,
2610 			       binder_size_t last_fixup_min_off)
2611 {
2612 	struct binder_buffer_object *parent;
2613 	u8 *parent_buffer;
2614 	struct binder_buffer *b = t->buffer;
2615 	struct binder_proc *proc = thread->proc;
2616 	struct binder_proc *target_proc = t->to_proc;
2617 
2618 	if (!(bp->flags & BINDER_BUFFER_FLAG_HAS_PARENT))
2619 		return 0;
2620 
2621 	parent = binder_validate_ptr(b, bp->parent, off_start, num_valid);
2622 	if (!parent) {
2623 		binder_user_error("%d:%d got transaction with invalid parent offset or type\n",
2624 				  proc->pid, thread->pid);
2625 		return -EINVAL;
2626 	}
2627 
2628 	if (!binder_validate_fixup(b, off_start,
2629 				   parent, bp->parent_offset,
2630 				   last_fixup_obj,
2631 				   last_fixup_min_off)) {
2632 		binder_user_error("%d:%d got transaction with out-of-order buffer fixup\n",
2633 				  proc->pid, thread->pid);
2634 		return -EINVAL;
2635 	}
2636 
2637 	if (parent->length < sizeof(binder_uintptr_t) ||
2638 	    bp->parent_offset > parent->length - sizeof(binder_uintptr_t)) {
2639 		/* No space for a pointer here! */
2640 		binder_user_error("%d:%d got transaction with invalid parent offset\n",
2641 				  proc->pid, thread->pid);
2642 		return -EINVAL;
2643 	}
2644 	parent_buffer = (u8 *)((uintptr_t)parent->buffer -
2645 			binder_alloc_get_user_buffer_offset(
2646 				&target_proc->alloc));
2647 	*(binder_uintptr_t *)(parent_buffer + bp->parent_offset) = bp->buffer;
2648 
2649 	return 0;
2650 }
2651 
2652 /**
2653  * binder_proc_transaction() - sends a transaction to a process and wakes it up
2654  * @t:		transaction to send
2655  * @proc:	process to send the transaction to
2656  * @thread:	thread in @proc to send the transaction to (may be NULL)
2657  *
2658  * This function queues a transaction to the specified process. It will try
2659  * to find a thread in the target process to handle the transaction and
2660  * wake it up. If no thread is found, the work is queued to the proc
2661  * waitqueue.
2662  *
2663  * If the @thread parameter is not NULL, the transaction is always queued
2664  * to the waitlist of that specific thread.
2665  *
2666  * Return:	true if the transactions was successfully queued
2667  *		false if the target process or thread is dead
2668  */
2669 static bool binder_proc_transaction(struct binder_transaction *t,
2670 				    struct binder_proc *proc,
2671 				    struct binder_thread *thread)
2672 {
2673 	struct binder_node *node = t->buffer->target_node;
2674 	bool oneway = !!(t->flags & TF_ONE_WAY);
2675 	bool pending_async = false;
2676 
2677 	BUG_ON(!node);
2678 	binder_node_lock(node);
2679 	if (oneway) {
2680 		BUG_ON(thread);
2681 		if (node->has_async_transaction) {
2682 			pending_async = true;
2683 		} else {
2684 			node->has_async_transaction = true;
2685 		}
2686 	}
2687 
2688 	binder_inner_proc_lock(proc);
2689 
2690 	if (proc->is_dead || (thread && thread->is_dead)) {
2691 		binder_inner_proc_unlock(proc);
2692 		binder_node_unlock(node);
2693 		return false;
2694 	}
2695 
2696 	if (!thread && !pending_async)
2697 		thread = binder_select_thread_ilocked(proc);
2698 
2699 	if (thread)
2700 		binder_enqueue_thread_work_ilocked(thread, &t->work);
2701 	else if (!pending_async)
2702 		binder_enqueue_work_ilocked(&t->work, &proc->todo);
2703 	else
2704 		binder_enqueue_work_ilocked(&t->work, &node->async_todo);
2705 
2706 	if (!pending_async)
2707 		binder_wakeup_thread_ilocked(proc, thread, !oneway /* sync */);
2708 
2709 	binder_inner_proc_unlock(proc);
2710 	binder_node_unlock(node);
2711 
2712 	return true;
2713 }
2714 
2715 /**
2716  * binder_get_node_refs_for_txn() - Get required refs on node for txn
2717  * @node:         struct binder_node for which to get refs
2718  * @proc:         returns @node->proc if valid
2719  * @error:        if no @proc then returns BR_DEAD_REPLY
2720  *
2721  * User-space normally keeps the node alive when creating a transaction
2722  * since it has a reference to the target. The local strong ref keeps it
2723  * alive if the sending process dies before the target process processes
2724  * the transaction. If the source process is malicious or has a reference
2725  * counting bug, relying on the local strong ref can fail.
2726  *
2727  * Since user-space can cause the local strong ref to go away, we also take
2728  * a tmpref on the node to ensure it survives while we are constructing
2729  * the transaction. We also need a tmpref on the proc while we are
2730  * constructing the transaction, so we take that here as well.
2731  *
2732  * Return: The target_node with refs taken or NULL if no @node->proc is NULL.
2733  * Also sets @proc if valid. If the @node->proc is NULL indicating that the
2734  * target proc has died, @error is set to BR_DEAD_REPLY
2735  */
2736 static struct binder_node *binder_get_node_refs_for_txn(
2737 		struct binder_node *node,
2738 		struct binder_proc **procp,
2739 		uint32_t *error)
2740 {
2741 	struct binder_node *target_node = NULL;
2742 
2743 	binder_node_inner_lock(node);
2744 	if (node->proc) {
2745 		target_node = node;
2746 		binder_inc_node_nilocked(node, 1, 0, NULL);
2747 		binder_inc_node_tmpref_ilocked(node);
2748 		node->proc->tmp_ref++;
2749 		*procp = node->proc;
2750 	} else
2751 		*error = BR_DEAD_REPLY;
2752 	binder_node_inner_unlock(node);
2753 
2754 	return target_node;
2755 }
2756 
2757 static void binder_transaction(struct binder_proc *proc,
2758 			       struct binder_thread *thread,
2759 			       struct binder_transaction_data *tr, int reply,
2760 			       binder_size_t extra_buffers_size)
2761 {
2762 	int ret;
2763 	struct binder_transaction *t;
2764 	struct binder_work *w;
2765 	struct binder_work *tcomplete;
2766 	binder_size_t *offp, *off_end, *off_start;
2767 	binder_size_t off_min;
2768 	u8 *sg_bufp, *sg_buf_end;
2769 	struct binder_proc *target_proc = NULL;
2770 	struct binder_thread *target_thread = NULL;
2771 	struct binder_node *target_node = NULL;
2772 	struct binder_transaction *in_reply_to = NULL;
2773 	struct binder_transaction_log_entry *e;
2774 	uint32_t return_error = 0;
2775 	uint32_t return_error_param = 0;
2776 	uint32_t return_error_line = 0;
2777 	struct binder_buffer_object *last_fixup_obj = NULL;
2778 	binder_size_t last_fixup_min_off = 0;
2779 	struct binder_context *context = proc->context;
2780 	int t_debug_id = atomic_inc_return(&binder_last_id);
2781 
2782 	e = binder_transaction_log_add(&binder_transaction_log);
2783 	e->debug_id = t_debug_id;
2784 	e->call_type = reply ? 2 : !!(tr->flags & TF_ONE_WAY);
2785 	e->from_proc = proc->pid;
2786 	e->from_thread = thread->pid;
2787 	e->target_handle = tr->target.handle;
2788 	e->data_size = tr->data_size;
2789 	e->offsets_size = tr->offsets_size;
2790 	e->context_name = proc->context->name;
2791 
2792 	if (reply) {
2793 		binder_inner_proc_lock(proc);
2794 		in_reply_to = thread->transaction_stack;
2795 		if (in_reply_to == NULL) {
2796 			binder_inner_proc_unlock(proc);
2797 			binder_user_error("%d:%d got reply transaction with no transaction stack\n",
2798 					  proc->pid, thread->pid);
2799 			return_error = BR_FAILED_REPLY;
2800 			return_error_param = -EPROTO;
2801 			return_error_line = __LINE__;
2802 			goto err_empty_call_stack;
2803 		}
2804 		if (in_reply_to->to_thread != thread) {
2805 			spin_lock(&in_reply_to->lock);
2806 			binder_user_error("%d:%d got reply transaction with bad transaction stack, transaction %d has target %d:%d\n",
2807 				proc->pid, thread->pid, in_reply_to->debug_id,
2808 				in_reply_to->to_proc ?
2809 				in_reply_to->to_proc->pid : 0,
2810 				in_reply_to->to_thread ?
2811 				in_reply_to->to_thread->pid : 0);
2812 			spin_unlock(&in_reply_to->lock);
2813 			binder_inner_proc_unlock(proc);
2814 			return_error = BR_FAILED_REPLY;
2815 			return_error_param = -EPROTO;
2816 			return_error_line = __LINE__;
2817 			in_reply_to = NULL;
2818 			goto err_bad_call_stack;
2819 		}
2820 		thread->transaction_stack = in_reply_to->to_parent;
2821 		binder_inner_proc_unlock(proc);
2822 		binder_set_nice(in_reply_to->saved_priority);
2823 		target_thread = binder_get_txn_from_and_acq_inner(in_reply_to);
2824 		if (target_thread == NULL) {
2825 			/* annotation for sparse */
2826 			__release(&target_thread->proc->inner_lock);
2827 			return_error = BR_DEAD_REPLY;
2828 			return_error_line = __LINE__;
2829 			goto err_dead_binder;
2830 		}
2831 		if (target_thread->transaction_stack != in_reply_to) {
2832 			binder_user_error("%d:%d got reply transaction with bad target transaction stack %d, expected %d\n",
2833 				proc->pid, thread->pid,
2834 				target_thread->transaction_stack ?
2835 				target_thread->transaction_stack->debug_id : 0,
2836 				in_reply_to->debug_id);
2837 			binder_inner_proc_unlock(target_thread->proc);
2838 			return_error = BR_FAILED_REPLY;
2839 			return_error_param = -EPROTO;
2840 			return_error_line = __LINE__;
2841 			in_reply_to = NULL;
2842 			target_thread = NULL;
2843 			goto err_dead_binder;
2844 		}
2845 		target_proc = target_thread->proc;
2846 		target_proc->tmp_ref++;
2847 		binder_inner_proc_unlock(target_thread->proc);
2848 	} else {
2849 		if (tr->target.handle) {
2850 			struct binder_ref *ref;
2851 
2852 			/*
2853 			 * There must already be a strong ref
2854 			 * on this node. If so, do a strong
2855 			 * increment on the node to ensure it
2856 			 * stays alive until the transaction is
2857 			 * done.
2858 			 */
2859 			binder_proc_lock(proc);
2860 			ref = binder_get_ref_olocked(proc, tr->target.handle,
2861 						     true);
2862 			if (ref) {
2863 				target_node = binder_get_node_refs_for_txn(
2864 						ref->node, &target_proc,
2865 						&return_error);
2866 			} else {
2867 				binder_user_error("%d:%d got transaction to invalid handle\n",
2868 						  proc->pid, thread->pid);
2869 				return_error = BR_FAILED_REPLY;
2870 			}
2871 			binder_proc_unlock(proc);
2872 		} else {
2873 			mutex_lock(&context->context_mgr_node_lock);
2874 			target_node = context->binder_context_mgr_node;
2875 			if (target_node)
2876 				target_node = binder_get_node_refs_for_txn(
2877 						target_node, &target_proc,
2878 						&return_error);
2879 			else
2880 				return_error = BR_DEAD_REPLY;
2881 			mutex_unlock(&context->context_mgr_node_lock);
2882 			if (target_node && target_proc == proc) {
2883 				binder_user_error("%d:%d got transaction to context manager from process owning it\n",
2884 						  proc->pid, thread->pid);
2885 				return_error = BR_FAILED_REPLY;
2886 				return_error_param = -EINVAL;
2887 				return_error_line = __LINE__;
2888 				goto err_invalid_target_handle;
2889 			}
2890 		}
2891 		if (!target_node) {
2892 			/*
2893 			 * return_error is set above
2894 			 */
2895 			return_error_param = -EINVAL;
2896 			return_error_line = __LINE__;
2897 			goto err_dead_binder;
2898 		}
2899 		e->to_node = target_node->debug_id;
2900 		if (security_binder_transaction(proc->tsk,
2901 						target_proc->tsk) < 0) {
2902 			return_error = BR_FAILED_REPLY;
2903 			return_error_param = -EPERM;
2904 			return_error_line = __LINE__;
2905 			goto err_invalid_target_handle;
2906 		}
2907 		binder_inner_proc_lock(proc);
2908 
2909 		w = list_first_entry_or_null(&thread->todo,
2910 					     struct binder_work, entry);
2911 		if (!(tr->flags & TF_ONE_WAY) && w &&
2912 		    w->type == BINDER_WORK_TRANSACTION) {
2913 			/*
2914 			 * Do not allow new outgoing transaction from a
2915 			 * thread that has a transaction at the head of
2916 			 * its todo list. Only need to check the head
2917 			 * because binder_select_thread_ilocked picks a
2918 			 * thread from proc->waiting_threads to enqueue
2919 			 * the transaction, and nothing is queued to the
2920 			 * todo list while the thread is on waiting_threads.
2921 			 */
2922 			binder_user_error("%d:%d new transaction not allowed when there is a transaction on thread todo\n",
2923 					  proc->pid, thread->pid);
2924 			binder_inner_proc_unlock(proc);
2925 			return_error = BR_FAILED_REPLY;
2926 			return_error_param = -EPROTO;
2927 			return_error_line = __LINE__;
2928 			goto err_bad_todo_list;
2929 		}
2930 
2931 		if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) {
2932 			struct binder_transaction *tmp;
2933 
2934 			tmp = thread->transaction_stack;
2935 			if (tmp->to_thread != thread) {
2936 				spin_lock(&tmp->lock);
2937 				binder_user_error("%d:%d got new transaction with bad transaction stack, transaction %d has target %d:%d\n",
2938 					proc->pid, thread->pid, tmp->debug_id,
2939 					tmp->to_proc ? tmp->to_proc->pid : 0,
2940 					tmp->to_thread ?
2941 					tmp->to_thread->pid : 0);
2942 				spin_unlock(&tmp->lock);
2943 				binder_inner_proc_unlock(proc);
2944 				return_error = BR_FAILED_REPLY;
2945 				return_error_param = -EPROTO;
2946 				return_error_line = __LINE__;
2947 				goto err_bad_call_stack;
2948 			}
2949 			while (tmp) {
2950 				struct binder_thread *from;
2951 
2952 				spin_lock(&tmp->lock);
2953 				from = tmp->from;
2954 				if (from && from->proc == target_proc) {
2955 					atomic_inc(&from->tmp_ref);
2956 					target_thread = from;
2957 					spin_unlock(&tmp->lock);
2958 					break;
2959 				}
2960 				spin_unlock(&tmp->lock);
2961 				tmp = tmp->from_parent;
2962 			}
2963 		}
2964 		binder_inner_proc_unlock(proc);
2965 	}
2966 	if (target_thread)
2967 		e->to_thread = target_thread->pid;
2968 	e->to_proc = target_proc->pid;
2969 
2970 	/* TODO: reuse incoming transaction for reply */
2971 	t = kzalloc(sizeof(*t), GFP_KERNEL);
2972 	if (t == NULL) {
2973 		return_error = BR_FAILED_REPLY;
2974 		return_error_param = -ENOMEM;
2975 		return_error_line = __LINE__;
2976 		goto err_alloc_t_failed;
2977 	}
2978 	INIT_LIST_HEAD(&t->fd_fixups);
2979 	binder_stats_created(BINDER_STAT_TRANSACTION);
2980 	spin_lock_init(&t->lock);
2981 
2982 	tcomplete = kzalloc(sizeof(*tcomplete), GFP_KERNEL);
2983 	if (tcomplete == NULL) {
2984 		return_error = BR_FAILED_REPLY;
2985 		return_error_param = -ENOMEM;
2986 		return_error_line = __LINE__;
2987 		goto err_alloc_tcomplete_failed;
2988 	}
2989 	binder_stats_created(BINDER_STAT_TRANSACTION_COMPLETE);
2990 
2991 	t->debug_id = t_debug_id;
2992 
2993 	if (reply)
2994 		binder_debug(BINDER_DEBUG_TRANSACTION,
2995 			     "%d:%d BC_REPLY %d -> %d:%d, data %016llx-%016llx size %lld-%lld-%lld\n",
2996 			     proc->pid, thread->pid, t->debug_id,
2997 			     target_proc->pid, target_thread->pid,
2998 			     (u64)tr->data.ptr.buffer,
2999 			     (u64)tr->data.ptr.offsets,
3000 			     (u64)tr->data_size, (u64)tr->offsets_size,
3001 			     (u64)extra_buffers_size);
3002 	else
3003 		binder_debug(BINDER_DEBUG_TRANSACTION,
3004 			     "%d:%d BC_TRANSACTION %d -> %d - node %d, data %016llx-%016llx size %lld-%lld-%lld\n",
3005 			     proc->pid, thread->pid, t->debug_id,
3006 			     target_proc->pid, target_node->debug_id,
3007 			     (u64)tr->data.ptr.buffer,
3008 			     (u64)tr->data.ptr.offsets,
3009 			     (u64)tr->data_size, (u64)tr->offsets_size,
3010 			     (u64)extra_buffers_size);
3011 
3012 	if (!reply && !(tr->flags & TF_ONE_WAY))
3013 		t->from = thread;
3014 	else
3015 		t->from = NULL;
3016 	t->sender_euid = task_euid(proc->tsk);
3017 	t->to_proc = target_proc;
3018 	t->to_thread = target_thread;
3019 	t->code = tr->code;
3020 	t->flags = tr->flags;
3021 	t->priority = task_nice(current);
3022 
3023 	trace_binder_transaction(reply, t, target_node);
3024 
3025 	t->buffer = binder_alloc_new_buf(&target_proc->alloc, tr->data_size,
3026 		tr->offsets_size, extra_buffers_size,
3027 		!reply && (t->flags & TF_ONE_WAY));
3028 	if (IS_ERR(t->buffer)) {
3029 		/*
3030 		 * -ESRCH indicates VMA cleared. The target is dying.
3031 		 */
3032 		return_error_param = PTR_ERR(t->buffer);
3033 		return_error = return_error_param == -ESRCH ?
3034 			BR_DEAD_REPLY : BR_FAILED_REPLY;
3035 		return_error_line = __LINE__;
3036 		t->buffer = NULL;
3037 		goto err_binder_alloc_buf_failed;
3038 	}
3039 	t->buffer->debug_id = t->debug_id;
3040 	t->buffer->transaction = t;
3041 	t->buffer->target_node = target_node;
3042 	trace_binder_transaction_alloc_buf(t->buffer);
3043 	off_start = (binder_size_t *)(t->buffer->data +
3044 				      ALIGN(tr->data_size, sizeof(void *)));
3045 	offp = off_start;
3046 
3047 	if (copy_from_user(t->buffer->data, (const void __user *)(uintptr_t)
3048 			   tr->data.ptr.buffer, tr->data_size)) {
3049 		binder_user_error("%d:%d got transaction with invalid data ptr\n",
3050 				proc->pid, thread->pid);
3051 		return_error = BR_FAILED_REPLY;
3052 		return_error_param = -EFAULT;
3053 		return_error_line = __LINE__;
3054 		goto err_copy_data_failed;
3055 	}
3056 	if (copy_from_user(offp, (const void __user *)(uintptr_t)
3057 			   tr->data.ptr.offsets, tr->offsets_size)) {
3058 		binder_user_error("%d:%d got transaction with invalid offsets ptr\n",
3059 				proc->pid, thread->pid);
3060 		return_error = BR_FAILED_REPLY;
3061 		return_error_param = -EFAULT;
3062 		return_error_line = __LINE__;
3063 		goto err_copy_data_failed;
3064 	}
3065 	if (!IS_ALIGNED(tr->offsets_size, sizeof(binder_size_t))) {
3066 		binder_user_error("%d:%d got transaction with invalid offsets size, %lld\n",
3067 				proc->pid, thread->pid, (u64)tr->offsets_size);
3068 		return_error = BR_FAILED_REPLY;
3069 		return_error_param = -EINVAL;
3070 		return_error_line = __LINE__;
3071 		goto err_bad_offset;
3072 	}
3073 	if (!IS_ALIGNED(extra_buffers_size, sizeof(u64))) {
3074 		binder_user_error("%d:%d got transaction with unaligned buffers size, %lld\n",
3075 				  proc->pid, thread->pid,
3076 				  (u64)extra_buffers_size);
3077 		return_error = BR_FAILED_REPLY;
3078 		return_error_param = -EINVAL;
3079 		return_error_line = __LINE__;
3080 		goto err_bad_offset;
3081 	}
3082 	off_end = (void *)off_start + tr->offsets_size;
3083 	sg_bufp = (u8 *)(PTR_ALIGN(off_end, sizeof(void *)));
3084 	sg_buf_end = sg_bufp + extra_buffers_size;
3085 	off_min = 0;
3086 	for (; offp < off_end; offp++) {
3087 		struct binder_object_header *hdr;
3088 		size_t object_size = binder_validate_object(t->buffer, *offp);
3089 
3090 		if (object_size == 0 || *offp < off_min) {
3091 			binder_user_error("%d:%d got transaction with invalid offset (%lld, min %lld max %lld) or object.\n",
3092 					  proc->pid, thread->pid, (u64)*offp,
3093 					  (u64)off_min,
3094 					  (u64)t->buffer->data_size);
3095 			return_error = BR_FAILED_REPLY;
3096 			return_error_param = -EINVAL;
3097 			return_error_line = __LINE__;
3098 			goto err_bad_offset;
3099 		}
3100 
3101 		hdr = (struct binder_object_header *)(t->buffer->data + *offp);
3102 		off_min = *offp + object_size;
3103 		switch (hdr->type) {
3104 		case BINDER_TYPE_BINDER:
3105 		case BINDER_TYPE_WEAK_BINDER: {
3106 			struct flat_binder_object *fp;
3107 
3108 			fp = to_flat_binder_object(hdr);
3109 			ret = binder_translate_binder(fp, t, thread);
3110 			if (ret < 0) {
3111 				return_error = BR_FAILED_REPLY;
3112 				return_error_param = ret;
3113 				return_error_line = __LINE__;
3114 				goto err_translate_failed;
3115 			}
3116 		} break;
3117 		case BINDER_TYPE_HANDLE:
3118 		case BINDER_TYPE_WEAK_HANDLE: {
3119 			struct flat_binder_object *fp;
3120 
3121 			fp = to_flat_binder_object(hdr);
3122 			ret = binder_translate_handle(fp, t, thread);
3123 			if (ret < 0) {
3124 				return_error = BR_FAILED_REPLY;
3125 				return_error_param = ret;
3126 				return_error_line = __LINE__;
3127 				goto err_translate_failed;
3128 			}
3129 		} break;
3130 
3131 		case BINDER_TYPE_FD: {
3132 			struct binder_fd_object *fp = to_binder_fd_object(hdr);
3133 			int ret = binder_translate_fd(&fp->fd, t, thread,
3134 						      in_reply_to);
3135 
3136 			if (ret < 0) {
3137 				return_error = BR_FAILED_REPLY;
3138 				return_error_param = ret;
3139 				return_error_line = __LINE__;
3140 				goto err_translate_failed;
3141 			}
3142 			fp->pad_binder = 0;
3143 		} break;
3144 		case BINDER_TYPE_FDA: {
3145 			struct binder_fd_array_object *fda =
3146 				to_binder_fd_array_object(hdr);
3147 			struct binder_buffer_object *parent =
3148 				binder_validate_ptr(t->buffer, fda->parent,
3149 						    off_start,
3150 						    offp - off_start);
3151 			if (!parent) {
3152 				binder_user_error("%d:%d got transaction with invalid parent offset or type\n",
3153 						  proc->pid, thread->pid);
3154 				return_error = BR_FAILED_REPLY;
3155 				return_error_param = -EINVAL;
3156 				return_error_line = __LINE__;
3157 				goto err_bad_parent;
3158 			}
3159 			if (!binder_validate_fixup(t->buffer, off_start,
3160 						   parent, fda->parent_offset,
3161 						   last_fixup_obj,
3162 						   last_fixup_min_off)) {
3163 				binder_user_error("%d:%d got transaction with out-of-order buffer fixup\n",
3164 						  proc->pid, thread->pid);
3165 				return_error = BR_FAILED_REPLY;
3166 				return_error_param = -EINVAL;
3167 				return_error_line = __LINE__;
3168 				goto err_bad_parent;
3169 			}
3170 			ret = binder_translate_fd_array(fda, parent, t, thread,
3171 							in_reply_to);
3172 			if (ret < 0) {
3173 				return_error = BR_FAILED_REPLY;
3174 				return_error_param = ret;
3175 				return_error_line = __LINE__;
3176 				goto err_translate_failed;
3177 			}
3178 			last_fixup_obj = parent;
3179 			last_fixup_min_off =
3180 				fda->parent_offset + sizeof(u32) * fda->num_fds;
3181 		} break;
3182 		case BINDER_TYPE_PTR: {
3183 			struct binder_buffer_object *bp =
3184 				to_binder_buffer_object(hdr);
3185 			size_t buf_left = sg_buf_end - sg_bufp;
3186 
3187 			if (bp->length > buf_left) {
3188 				binder_user_error("%d:%d got transaction with too large buffer\n",
3189 						  proc->pid, thread->pid);
3190 				return_error = BR_FAILED_REPLY;
3191 				return_error_param = -EINVAL;
3192 				return_error_line = __LINE__;
3193 				goto err_bad_offset;
3194 			}
3195 			if (copy_from_user(sg_bufp,
3196 					   (const void __user *)(uintptr_t)
3197 					   bp->buffer, bp->length)) {
3198 				binder_user_error("%d:%d got transaction with invalid offsets ptr\n",
3199 						  proc->pid, thread->pid);
3200 				return_error_param = -EFAULT;
3201 				return_error = BR_FAILED_REPLY;
3202 				return_error_line = __LINE__;
3203 				goto err_copy_data_failed;
3204 			}
3205 			/* Fixup buffer pointer to target proc address space */
3206 			bp->buffer = (uintptr_t)sg_bufp +
3207 				binder_alloc_get_user_buffer_offset(
3208 						&target_proc->alloc);
3209 			sg_bufp += ALIGN(bp->length, sizeof(u64));
3210 
3211 			ret = binder_fixup_parent(t, thread, bp, off_start,
3212 						  offp - off_start,
3213 						  last_fixup_obj,
3214 						  last_fixup_min_off);
3215 			if (ret < 0) {
3216 				return_error = BR_FAILED_REPLY;
3217 				return_error_param = ret;
3218 				return_error_line = __LINE__;
3219 				goto err_translate_failed;
3220 			}
3221 			last_fixup_obj = bp;
3222 			last_fixup_min_off = 0;
3223 		} break;
3224 		default:
3225 			binder_user_error("%d:%d got transaction with invalid object type, %x\n",
3226 				proc->pid, thread->pid, hdr->type);
3227 			return_error = BR_FAILED_REPLY;
3228 			return_error_param = -EINVAL;
3229 			return_error_line = __LINE__;
3230 			goto err_bad_object_type;
3231 		}
3232 	}
3233 	tcomplete->type = BINDER_WORK_TRANSACTION_COMPLETE;
3234 	t->work.type = BINDER_WORK_TRANSACTION;
3235 
3236 	if (reply) {
3237 		binder_enqueue_thread_work(thread, tcomplete);
3238 		binder_inner_proc_lock(target_proc);
3239 		if (target_thread->is_dead) {
3240 			binder_inner_proc_unlock(target_proc);
3241 			goto err_dead_proc_or_thread;
3242 		}
3243 		BUG_ON(t->buffer->async_transaction != 0);
3244 		binder_pop_transaction_ilocked(target_thread, in_reply_to);
3245 		binder_enqueue_thread_work_ilocked(target_thread, &t->work);
3246 		binder_inner_proc_unlock(target_proc);
3247 		wake_up_interruptible_sync(&target_thread->wait);
3248 		binder_free_transaction(in_reply_to);
3249 	} else if (!(t->flags & TF_ONE_WAY)) {
3250 		BUG_ON(t->buffer->async_transaction != 0);
3251 		binder_inner_proc_lock(proc);
3252 		/*
3253 		 * Defer the TRANSACTION_COMPLETE, so we don't return to
3254 		 * userspace immediately; this allows the target process to
3255 		 * immediately start processing this transaction, reducing
3256 		 * latency. We will then return the TRANSACTION_COMPLETE when
3257 		 * the target replies (or there is an error).
3258 		 */
3259 		binder_enqueue_deferred_thread_work_ilocked(thread, tcomplete);
3260 		t->need_reply = 1;
3261 		t->from_parent = thread->transaction_stack;
3262 		thread->transaction_stack = t;
3263 		binder_inner_proc_unlock(proc);
3264 		if (!binder_proc_transaction(t, target_proc, target_thread)) {
3265 			binder_inner_proc_lock(proc);
3266 			binder_pop_transaction_ilocked(thread, t);
3267 			binder_inner_proc_unlock(proc);
3268 			goto err_dead_proc_or_thread;
3269 		}
3270 	} else {
3271 		BUG_ON(target_node == NULL);
3272 		BUG_ON(t->buffer->async_transaction != 1);
3273 		binder_enqueue_thread_work(thread, tcomplete);
3274 		if (!binder_proc_transaction(t, target_proc, NULL))
3275 			goto err_dead_proc_or_thread;
3276 	}
3277 	if (target_thread)
3278 		binder_thread_dec_tmpref(target_thread);
3279 	binder_proc_dec_tmpref(target_proc);
3280 	if (target_node)
3281 		binder_dec_node_tmpref(target_node);
3282 	/*
3283 	 * write barrier to synchronize with initialization
3284 	 * of log entry
3285 	 */
3286 	smp_wmb();
3287 	WRITE_ONCE(e->debug_id_done, t_debug_id);
3288 	return;
3289 
3290 err_dead_proc_or_thread:
3291 	return_error = BR_DEAD_REPLY;
3292 	return_error_line = __LINE__;
3293 	binder_dequeue_work(proc, tcomplete);
3294 err_translate_failed:
3295 err_bad_object_type:
3296 err_bad_offset:
3297 err_bad_parent:
3298 err_copy_data_failed:
3299 	binder_free_txn_fixups(t);
3300 	trace_binder_transaction_failed_buffer_release(t->buffer);
3301 	binder_transaction_buffer_release(target_proc, t->buffer, offp);
3302 	if (target_node)
3303 		binder_dec_node_tmpref(target_node);
3304 	target_node = NULL;
3305 	t->buffer->transaction = NULL;
3306 	binder_alloc_free_buf(&target_proc->alloc, t->buffer);
3307 err_binder_alloc_buf_failed:
3308 	kfree(tcomplete);
3309 	binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE);
3310 err_alloc_tcomplete_failed:
3311 	kfree(t);
3312 	binder_stats_deleted(BINDER_STAT_TRANSACTION);
3313 err_alloc_t_failed:
3314 err_bad_todo_list:
3315 err_bad_call_stack:
3316 err_empty_call_stack:
3317 err_dead_binder:
3318 err_invalid_target_handle:
3319 	if (target_thread)
3320 		binder_thread_dec_tmpref(target_thread);
3321 	if (target_proc)
3322 		binder_proc_dec_tmpref(target_proc);
3323 	if (target_node) {
3324 		binder_dec_node(target_node, 1, 0);
3325 		binder_dec_node_tmpref(target_node);
3326 	}
3327 
3328 	binder_debug(BINDER_DEBUG_FAILED_TRANSACTION,
3329 		     "%d:%d transaction failed %d/%d, size %lld-%lld line %d\n",
3330 		     proc->pid, thread->pid, return_error, return_error_param,
3331 		     (u64)tr->data_size, (u64)tr->offsets_size,
3332 		     return_error_line);
3333 
3334 	{
3335 		struct binder_transaction_log_entry *fe;
3336 
3337 		e->return_error = return_error;
3338 		e->return_error_param = return_error_param;
3339 		e->return_error_line = return_error_line;
3340 		fe = binder_transaction_log_add(&binder_transaction_log_failed);
3341 		*fe = *e;
3342 		/*
3343 		 * write barrier to synchronize with initialization
3344 		 * of log entry
3345 		 */
3346 		smp_wmb();
3347 		WRITE_ONCE(e->debug_id_done, t_debug_id);
3348 		WRITE_ONCE(fe->debug_id_done, t_debug_id);
3349 	}
3350 
3351 	BUG_ON(thread->return_error.cmd != BR_OK);
3352 	if (in_reply_to) {
3353 		thread->return_error.cmd = BR_TRANSACTION_COMPLETE;
3354 		binder_enqueue_thread_work(thread, &thread->return_error.work);
3355 		binder_send_failed_reply(in_reply_to, return_error);
3356 	} else {
3357 		thread->return_error.cmd = return_error;
3358 		binder_enqueue_thread_work(thread, &thread->return_error.work);
3359 	}
3360 }
3361 
3362 /**
3363  * binder_free_buf() - free the specified buffer
3364  * @proc:	binder proc that owns buffer
3365  * @buffer:	buffer to be freed
3366  *
3367  * If buffer for an async transaction, enqueue the next async
3368  * transaction from the node.
3369  *
3370  * Cleanup buffer and free it.
3371  */
3372 static void
3373 binder_free_buf(struct binder_proc *proc, struct binder_buffer *buffer)
3374 {
3375 	if (buffer->transaction) {
3376 		buffer->transaction->buffer = NULL;
3377 		buffer->transaction = NULL;
3378 	}
3379 	if (buffer->async_transaction && buffer->target_node) {
3380 		struct binder_node *buf_node;
3381 		struct binder_work *w;
3382 
3383 		buf_node = buffer->target_node;
3384 		binder_node_inner_lock(buf_node);
3385 		BUG_ON(!buf_node->has_async_transaction);
3386 		BUG_ON(buf_node->proc != proc);
3387 		w = binder_dequeue_work_head_ilocked(
3388 				&buf_node->async_todo);
3389 		if (!w) {
3390 			buf_node->has_async_transaction = false;
3391 		} else {
3392 			binder_enqueue_work_ilocked(
3393 					w, &proc->todo);
3394 			binder_wakeup_proc_ilocked(proc);
3395 		}
3396 		binder_node_inner_unlock(buf_node);
3397 	}
3398 	trace_binder_transaction_buffer_release(buffer);
3399 	binder_transaction_buffer_release(proc, buffer, NULL);
3400 	binder_alloc_free_buf(&proc->alloc, buffer);
3401 }
3402 
3403 static int binder_thread_write(struct binder_proc *proc,
3404 			struct binder_thread *thread,
3405 			binder_uintptr_t binder_buffer, size_t size,
3406 			binder_size_t *consumed)
3407 {
3408 	uint32_t cmd;
3409 	struct binder_context *context = proc->context;
3410 	void __user *buffer = (void __user *)(uintptr_t)binder_buffer;
3411 	void __user *ptr = buffer + *consumed;
3412 	void __user *end = buffer + size;
3413 
3414 	while (ptr < end && thread->return_error.cmd == BR_OK) {
3415 		int ret;
3416 
3417 		if (get_user(cmd, (uint32_t __user *)ptr))
3418 			return -EFAULT;
3419 		ptr += sizeof(uint32_t);
3420 		trace_binder_command(cmd);
3421 		if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.bc)) {
3422 			atomic_inc(&binder_stats.bc[_IOC_NR(cmd)]);
3423 			atomic_inc(&proc->stats.bc[_IOC_NR(cmd)]);
3424 			atomic_inc(&thread->stats.bc[_IOC_NR(cmd)]);
3425 		}
3426 		switch (cmd) {
3427 		case BC_INCREFS:
3428 		case BC_ACQUIRE:
3429 		case BC_RELEASE:
3430 		case BC_DECREFS: {
3431 			uint32_t target;
3432 			const char *debug_string;
3433 			bool strong = cmd == BC_ACQUIRE || cmd == BC_RELEASE;
3434 			bool increment = cmd == BC_INCREFS || cmd == BC_ACQUIRE;
3435 			struct binder_ref_data rdata;
3436 
3437 			if (get_user(target, (uint32_t __user *)ptr))
3438 				return -EFAULT;
3439 
3440 			ptr += sizeof(uint32_t);
3441 			ret = -1;
3442 			if (increment && !target) {
3443 				struct binder_node *ctx_mgr_node;
3444 				mutex_lock(&context->context_mgr_node_lock);
3445 				ctx_mgr_node = context->binder_context_mgr_node;
3446 				if (ctx_mgr_node)
3447 					ret = binder_inc_ref_for_node(
3448 							proc, ctx_mgr_node,
3449 							strong, NULL, &rdata);
3450 				mutex_unlock(&context->context_mgr_node_lock);
3451 			}
3452 			if (ret)
3453 				ret = binder_update_ref_for_handle(
3454 						proc, target, increment, strong,
3455 						&rdata);
3456 			if (!ret && rdata.desc != target) {
3457 				binder_user_error("%d:%d tried to acquire reference to desc %d, got %d instead\n",
3458 					proc->pid, thread->pid,
3459 					target, rdata.desc);
3460 			}
3461 			switch (cmd) {
3462 			case BC_INCREFS:
3463 				debug_string = "IncRefs";
3464 				break;
3465 			case BC_ACQUIRE:
3466 				debug_string = "Acquire";
3467 				break;
3468 			case BC_RELEASE:
3469 				debug_string = "Release";
3470 				break;
3471 			case BC_DECREFS:
3472 			default:
3473 				debug_string = "DecRefs";
3474 				break;
3475 			}
3476 			if (ret) {
3477 				binder_user_error("%d:%d %s %d refcount change on invalid ref %d ret %d\n",
3478 					proc->pid, thread->pid, debug_string,
3479 					strong, target, ret);
3480 				break;
3481 			}
3482 			binder_debug(BINDER_DEBUG_USER_REFS,
3483 				     "%d:%d %s ref %d desc %d s %d w %d\n",
3484 				     proc->pid, thread->pid, debug_string,
3485 				     rdata.debug_id, rdata.desc, rdata.strong,
3486 				     rdata.weak);
3487 			break;
3488 		}
3489 		case BC_INCREFS_DONE:
3490 		case BC_ACQUIRE_DONE: {
3491 			binder_uintptr_t node_ptr;
3492 			binder_uintptr_t cookie;
3493 			struct binder_node *node;
3494 			bool free_node;
3495 
3496 			if (get_user(node_ptr, (binder_uintptr_t __user *)ptr))
3497 				return -EFAULT;
3498 			ptr += sizeof(binder_uintptr_t);
3499 			if (get_user(cookie, (binder_uintptr_t __user *)ptr))
3500 				return -EFAULT;
3501 			ptr += sizeof(binder_uintptr_t);
3502 			node = binder_get_node(proc, node_ptr);
3503 			if (node == NULL) {
3504 				binder_user_error("%d:%d %s u%016llx no match\n",
3505 					proc->pid, thread->pid,
3506 					cmd == BC_INCREFS_DONE ?
3507 					"BC_INCREFS_DONE" :
3508 					"BC_ACQUIRE_DONE",
3509 					(u64)node_ptr);
3510 				break;
3511 			}
3512 			if (cookie != node->cookie) {
3513 				binder_user_error("%d:%d %s u%016llx node %d cookie mismatch %016llx != %016llx\n",
3514 					proc->pid, thread->pid,
3515 					cmd == BC_INCREFS_DONE ?
3516 					"BC_INCREFS_DONE" : "BC_ACQUIRE_DONE",
3517 					(u64)node_ptr, node->debug_id,
3518 					(u64)cookie, (u64)node->cookie);
3519 				binder_put_node(node);
3520 				break;
3521 			}
3522 			binder_node_inner_lock(node);
3523 			if (cmd == BC_ACQUIRE_DONE) {
3524 				if (node->pending_strong_ref == 0) {
3525 					binder_user_error("%d:%d BC_ACQUIRE_DONE node %d has no pending acquire request\n",
3526 						proc->pid, thread->pid,
3527 						node->debug_id);
3528 					binder_node_inner_unlock(node);
3529 					binder_put_node(node);
3530 					break;
3531 				}
3532 				node->pending_strong_ref = 0;
3533 			} else {
3534 				if (node->pending_weak_ref == 0) {
3535 					binder_user_error("%d:%d BC_INCREFS_DONE node %d has no pending increfs request\n",
3536 						proc->pid, thread->pid,
3537 						node->debug_id);
3538 					binder_node_inner_unlock(node);
3539 					binder_put_node(node);
3540 					break;
3541 				}
3542 				node->pending_weak_ref = 0;
3543 			}
3544 			free_node = binder_dec_node_nilocked(node,
3545 					cmd == BC_ACQUIRE_DONE, 0);
3546 			WARN_ON(free_node);
3547 			binder_debug(BINDER_DEBUG_USER_REFS,
3548 				     "%d:%d %s node %d ls %d lw %d tr %d\n",
3549 				     proc->pid, thread->pid,
3550 				     cmd == BC_INCREFS_DONE ? "BC_INCREFS_DONE" : "BC_ACQUIRE_DONE",
3551 				     node->debug_id, node->local_strong_refs,
3552 				     node->local_weak_refs, node->tmp_refs);
3553 			binder_node_inner_unlock(node);
3554 			binder_put_node(node);
3555 			break;
3556 		}
3557 		case BC_ATTEMPT_ACQUIRE:
3558 			pr_err("BC_ATTEMPT_ACQUIRE not supported\n");
3559 			return -EINVAL;
3560 		case BC_ACQUIRE_RESULT:
3561 			pr_err("BC_ACQUIRE_RESULT not supported\n");
3562 			return -EINVAL;
3563 
3564 		case BC_FREE_BUFFER: {
3565 			binder_uintptr_t data_ptr;
3566 			struct binder_buffer *buffer;
3567 
3568 			if (get_user(data_ptr, (binder_uintptr_t __user *)ptr))
3569 				return -EFAULT;
3570 			ptr += sizeof(binder_uintptr_t);
3571 
3572 			buffer = binder_alloc_prepare_to_free(&proc->alloc,
3573 							      data_ptr);
3574 			if (IS_ERR_OR_NULL(buffer)) {
3575 				if (PTR_ERR(buffer) == -EPERM) {
3576 					binder_user_error(
3577 						"%d:%d BC_FREE_BUFFER u%016llx matched unreturned or currently freeing buffer\n",
3578 						proc->pid, thread->pid,
3579 						(u64)data_ptr);
3580 				} else {
3581 					binder_user_error(
3582 						"%d:%d BC_FREE_BUFFER u%016llx no match\n",
3583 						proc->pid, thread->pid,
3584 						(u64)data_ptr);
3585 				}
3586 				break;
3587 			}
3588 			binder_debug(BINDER_DEBUG_FREE_BUFFER,
3589 				     "%d:%d BC_FREE_BUFFER u%016llx found buffer %d for %s transaction\n",
3590 				     proc->pid, thread->pid, (u64)data_ptr,
3591 				     buffer->debug_id,
3592 				     buffer->transaction ? "active" : "finished");
3593 			binder_free_buf(proc, buffer);
3594 			break;
3595 		}
3596 
3597 		case BC_TRANSACTION_SG:
3598 		case BC_REPLY_SG: {
3599 			struct binder_transaction_data_sg tr;
3600 
3601 			if (copy_from_user(&tr, ptr, sizeof(tr)))
3602 				return -EFAULT;
3603 			ptr += sizeof(tr);
3604 			binder_transaction(proc, thread, &tr.transaction_data,
3605 					   cmd == BC_REPLY_SG, tr.buffers_size);
3606 			break;
3607 		}
3608 		case BC_TRANSACTION:
3609 		case BC_REPLY: {
3610 			struct binder_transaction_data tr;
3611 
3612 			if (copy_from_user(&tr, ptr, sizeof(tr)))
3613 				return -EFAULT;
3614 			ptr += sizeof(tr);
3615 			binder_transaction(proc, thread, &tr,
3616 					   cmd == BC_REPLY, 0);
3617 			break;
3618 		}
3619 
3620 		case BC_REGISTER_LOOPER:
3621 			binder_debug(BINDER_DEBUG_THREADS,
3622 				     "%d:%d BC_REGISTER_LOOPER\n",
3623 				     proc->pid, thread->pid);
3624 			binder_inner_proc_lock(proc);
3625 			if (thread->looper & BINDER_LOOPER_STATE_ENTERED) {
3626 				thread->looper |= BINDER_LOOPER_STATE_INVALID;
3627 				binder_user_error("%d:%d ERROR: BC_REGISTER_LOOPER called after BC_ENTER_LOOPER\n",
3628 					proc->pid, thread->pid);
3629 			} else if (proc->requested_threads == 0) {
3630 				thread->looper |= BINDER_LOOPER_STATE_INVALID;
3631 				binder_user_error("%d:%d ERROR: BC_REGISTER_LOOPER called without request\n",
3632 					proc->pid, thread->pid);
3633 			} else {
3634 				proc->requested_threads--;
3635 				proc->requested_threads_started++;
3636 			}
3637 			thread->looper |= BINDER_LOOPER_STATE_REGISTERED;
3638 			binder_inner_proc_unlock(proc);
3639 			break;
3640 		case BC_ENTER_LOOPER:
3641 			binder_debug(BINDER_DEBUG_THREADS,
3642 				     "%d:%d BC_ENTER_LOOPER\n",
3643 				     proc->pid, thread->pid);
3644 			if (thread->looper & BINDER_LOOPER_STATE_REGISTERED) {
3645 				thread->looper |= BINDER_LOOPER_STATE_INVALID;
3646 				binder_user_error("%d:%d ERROR: BC_ENTER_LOOPER called after BC_REGISTER_LOOPER\n",
3647 					proc->pid, thread->pid);
3648 			}
3649 			thread->looper |= BINDER_LOOPER_STATE_ENTERED;
3650 			break;
3651 		case BC_EXIT_LOOPER:
3652 			binder_debug(BINDER_DEBUG_THREADS,
3653 				     "%d:%d BC_EXIT_LOOPER\n",
3654 				     proc->pid, thread->pid);
3655 			thread->looper |= BINDER_LOOPER_STATE_EXITED;
3656 			break;
3657 
3658 		case BC_REQUEST_DEATH_NOTIFICATION:
3659 		case BC_CLEAR_DEATH_NOTIFICATION: {
3660 			uint32_t target;
3661 			binder_uintptr_t cookie;
3662 			struct binder_ref *ref;
3663 			struct binder_ref_death *death = NULL;
3664 
3665 			if (get_user(target, (uint32_t __user *)ptr))
3666 				return -EFAULT;
3667 			ptr += sizeof(uint32_t);
3668 			if (get_user(cookie, (binder_uintptr_t __user *)ptr))
3669 				return -EFAULT;
3670 			ptr += sizeof(binder_uintptr_t);
3671 			if (cmd == BC_REQUEST_DEATH_NOTIFICATION) {
3672 				/*
3673 				 * Allocate memory for death notification
3674 				 * before taking lock
3675 				 */
3676 				death = kzalloc(sizeof(*death), GFP_KERNEL);
3677 				if (death == NULL) {
3678 					WARN_ON(thread->return_error.cmd !=
3679 						BR_OK);
3680 					thread->return_error.cmd = BR_ERROR;
3681 					binder_enqueue_thread_work(
3682 						thread,
3683 						&thread->return_error.work);
3684 					binder_debug(
3685 						BINDER_DEBUG_FAILED_TRANSACTION,
3686 						"%d:%d BC_REQUEST_DEATH_NOTIFICATION failed\n",
3687 						proc->pid, thread->pid);
3688 					break;
3689 				}
3690 			}
3691 			binder_proc_lock(proc);
3692 			ref = binder_get_ref_olocked(proc, target, false);
3693 			if (ref == NULL) {
3694 				binder_user_error("%d:%d %s invalid ref %d\n",
3695 					proc->pid, thread->pid,
3696 					cmd == BC_REQUEST_DEATH_NOTIFICATION ?
3697 					"BC_REQUEST_DEATH_NOTIFICATION" :
3698 					"BC_CLEAR_DEATH_NOTIFICATION",
3699 					target);
3700 				binder_proc_unlock(proc);
3701 				kfree(death);
3702 				break;
3703 			}
3704 
3705 			binder_debug(BINDER_DEBUG_DEATH_NOTIFICATION,
3706 				     "%d:%d %s %016llx ref %d desc %d s %d w %d for node %d\n",
3707 				     proc->pid, thread->pid,
3708 				     cmd == BC_REQUEST_DEATH_NOTIFICATION ?
3709 				     "BC_REQUEST_DEATH_NOTIFICATION" :
3710 				     "BC_CLEAR_DEATH_NOTIFICATION",
3711 				     (u64)cookie, ref->data.debug_id,
3712 				     ref->data.desc, ref->data.strong,
3713 				     ref->data.weak, ref->node->debug_id);
3714 
3715 			binder_node_lock(ref->node);
3716 			if (cmd == BC_REQUEST_DEATH_NOTIFICATION) {
3717 				if (ref->death) {
3718 					binder_user_error("%d:%d BC_REQUEST_DEATH_NOTIFICATION death notification already set\n",
3719 						proc->pid, thread->pid);
3720 					binder_node_unlock(ref->node);
3721 					binder_proc_unlock(proc);
3722 					kfree(death);
3723 					break;
3724 				}
3725 				binder_stats_created(BINDER_STAT_DEATH);
3726 				INIT_LIST_HEAD(&death->work.entry);
3727 				death->cookie = cookie;
3728 				ref->death = death;
3729 				if (ref->node->proc == NULL) {
3730 					ref->death->work.type = BINDER_WORK_DEAD_BINDER;
3731 
3732 					binder_inner_proc_lock(proc);
3733 					binder_enqueue_work_ilocked(
3734 						&ref->death->work, &proc->todo);
3735 					binder_wakeup_proc_ilocked(proc);
3736 					binder_inner_proc_unlock(proc);
3737 				}
3738 			} else {
3739 				if (ref->death == NULL) {
3740 					binder_user_error("%d:%d BC_CLEAR_DEATH_NOTIFICATION death notification not active\n",
3741 						proc->pid, thread->pid);
3742 					binder_node_unlock(ref->node);
3743 					binder_proc_unlock(proc);
3744 					break;
3745 				}
3746 				death = ref->death;
3747 				if (death->cookie != cookie) {
3748 					binder_user_error("%d:%d BC_CLEAR_DEATH_NOTIFICATION death notification cookie mismatch %016llx != %016llx\n",
3749 						proc->pid, thread->pid,
3750 						(u64)death->cookie,
3751 						(u64)cookie);
3752 					binder_node_unlock(ref->node);
3753 					binder_proc_unlock(proc);
3754 					break;
3755 				}
3756 				ref->death = NULL;
3757 				binder_inner_proc_lock(proc);
3758 				if (list_empty(&death->work.entry)) {
3759 					death->work.type = BINDER_WORK_CLEAR_DEATH_NOTIFICATION;
3760 					if (thread->looper &
3761 					    (BINDER_LOOPER_STATE_REGISTERED |
3762 					     BINDER_LOOPER_STATE_ENTERED))
3763 						binder_enqueue_thread_work_ilocked(
3764 								thread,
3765 								&death->work);
3766 					else {
3767 						binder_enqueue_work_ilocked(
3768 								&death->work,
3769 								&proc->todo);
3770 						binder_wakeup_proc_ilocked(
3771 								proc);
3772 					}
3773 				} else {
3774 					BUG_ON(death->work.type != BINDER_WORK_DEAD_BINDER);
3775 					death->work.type = BINDER_WORK_DEAD_BINDER_AND_CLEAR;
3776 				}
3777 				binder_inner_proc_unlock(proc);
3778 			}
3779 			binder_node_unlock(ref->node);
3780 			binder_proc_unlock(proc);
3781 		} break;
3782 		case BC_DEAD_BINDER_DONE: {
3783 			struct binder_work *w;
3784 			binder_uintptr_t cookie;
3785 			struct binder_ref_death *death = NULL;
3786 
3787 			if (get_user(cookie, (binder_uintptr_t __user *)ptr))
3788 				return -EFAULT;
3789 
3790 			ptr += sizeof(cookie);
3791 			binder_inner_proc_lock(proc);
3792 			list_for_each_entry(w, &proc->delivered_death,
3793 					    entry) {
3794 				struct binder_ref_death *tmp_death =
3795 					container_of(w,
3796 						     struct binder_ref_death,
3797 						     work);
3798 
3799 				if (tmp_death->cookie == cookie) {
3800 					death = tmp_death;
3801 					break;
3802 				}
3803 			}
3804 			binder_debug(BINDER_DEBUG_DEAD_BINDER,
3805 				     "%d:%d BC_DEAD_BINDER_DONE %016llx found %pK\n",
3806 				     proc->pid, thread->pid, (u64)cookie,
3807 				     death);
3808 			if (death == NULL) {
3809 				binder_user_error("%d:%d BC_DEAD_BINDER_DONE %016llx not found\n",
3810 					proc->pid, thread->pid, (u64)cookie);
3811 				binder_inner_proc_unlock(proc);
3812 				break;
3813 			}
3814 			binder_dequeue_work_ilocked(&death->work);
3815 			if (death->work.type == BINDER_WORK_DEAD_BINDER_AND_CLEAR) {
3816 				death->work.type = BINDER_WORK_CLEAR_DEATH_NOTIFICATION;
3817 				if (thread->looper &
3818 					(BINDER_LOOPER_STATE_REGISTERED |
3819 					 BINDER_LOOPER_STATE_ENTERED))
3820 					binder_enqueue_thread_work_ilocked(
3821 						thread, &death->work);
3822 				else {
3823 					binder_enqueue_work_ilocked(
3824 							&death->work,
3825 							&proc->todo);
3826 					binder_wakeup_proc_ilocked(proc);
3827 				}
3828 			}
3829 			binder_inner_proc_unlock(proc);
3830 		} break;
3831 
3832 		default:
3833 			pr_err("%d:%d unknown command %d\n",
3834 			       proc->pid, thread->pid, cmd);
3835 			return -EINVAL;
3836 		}
3837 		*consumed = ptr - buffer;
3838 	}
3839 	return 0;
3840 }
3841 
3842 static void binder_stat_br(struct binder_proc *proc,
3843 			   struct binder_thread *thread, uint32_t cmd)
3844 {
3845 	trace_binder_return(cmd);
3846 	if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.br)) {
3847 		atomic_inc(&binder_stats.br[_IOC_NR(cmd)]);
3848 		atomic_inc(&proc->stats.br[_IOC_NR(cmd)]);
3849 		atomic_inc(&thread->stats.br[_IOC_NR(cmd)]);
3850 	}
3851 }
3852 
3853 static int binder_put_node_cmd(struct binder_proc *proc,
3854 			       struct binder_thread *thread,
3855 			       void __user **ptrp,
3856 			       binder_uintptr_t node_ptr,
3857 			       binder_uintptr_t node_cookie,
3858 			       int node_debug_id,
3859 			       uint32_t cmd, const char *cmd_name)
3860 {
3861 	void __user *ptr = *ptrp;
3862 
3863 	if (put_user(cmd, (uint32_t __user *)ptr))
3864 		return -EFAULT;
3865 	ptr += sizeof(uint32_t);
3866 
3867 	if (put_user(node_ptr, (binder_uintptr_t __user *)ptr))
3868 		return -EFAULT;
3869 	ptr += sizeof(binder_uintptr_t);
3870 
3871 	if (put_user(node_cookie, (binder_uintptr_t __user *)ptr))
3872 		return -EFAULT;
3873 	ptr += sizeof(binder_uintptr_t);
3874 
3875 	binder_stat_br(proc, thread, cmd);
3876 	binder_debug(BINDER_DEBUG_USER_REFS, "%d:%d %s %d u%016llx c%016llx\n",
3877 		     proc->pid, thread->pid, cmd_name, node_debug_id,
3878 		     (u64)node_ptr, (u64)node_cookie);
3879 
3880 	*ptrp = ptr;
3881 	return 0;
3882 }
3883 
3884 static int binder_wait_for_work(struct binder_thread *thread,
3885 				bool do_proc_work)
3886 {
3887 	DEFINE_WAIT(wait);
3888 	struct binder_proc *proc = thread->proc;
3889 	int ret = 0;
3890 
3891 	freezer_do_not_count();
3892 	binder_inner_proc_lock(proc);
3893 	for (;;) {
3894 		prepare_to_wait(&thread->wait, &wait, TASK_INTERRUPTIBLE);
3895 		if (binder_has_work_ilocked(thread, do_proc_work))
3896 			break;
3897 		if (do_proc_work)
3898 			list_add(&thread->waiting_thread_node,
3899 				 &proc->waiting_threads);
3900 		binder_inner_proc_unlock(proc);
3901 		schedule();
3902 		binder_inner_proc_lock(proc);
3903 		list_del_init(&thread->waiting_thread_node);
3904 		if (signal_pending(current)) {
3905 			ret = -ERESTARTSYS;
3906 			break;
3907 		}
3908 	}
3909 	finish_wait(&thread->wait, &wait);
3910 	binder_inner_proc_unlock(proc);
3911 	freezer_count();
3912 
3913 	return ret;
3914 }
3915 
3916 /**
3917  * binder_apply_fd_fixups() - finish fd translation
3918  * @t:	binder transaction with list of fd fixups
3919  *
3920  * Now that we are in the context of the transaction target
3921  * process, we can allocate and install fds. Process the
3922  * list of fds to translate and fixup the buffer with the
3923  * new fds.
3924  *
3925  * If we fail to allocate an fd, then free the resources by
3926  * fput'ing files that have not been processed and ksys_close'ing
3927  * any fds that have already been allocated.
3928  */
3929 static int binder_apply_fd_fixups(struct binder_transaction *t)
3930 {
3931 	struct binder_txn_fd_fixup *fixup, *tmp;
3932 	int ret = 0;
3933 
3934 	list_for_each_entry(fixup, &t->fd_fixups, fixup_entry) {
3935 		int fd = get_unused_fd_flags(O_CLOEXEC);
3936 		u32 *fdp;
3937 
3938 		if (fd < 0) {
3939 			binder_debug(BINDER_DEBUG_TRANSACTION,
3940 				     "failed fd fixup txn %d fd %d\n",
3941 				     t->debug_id, fd);
3942 			ret = -ENOMEM;
3943 			break;
3944 		}
3945 		binder_debug(BINDER_DEBUG_TRANSACTION,
3946 			     "fd fixup txn %d fd %d\n",
3947 			     t->debug_id, fd);
3948 		trace_binder_transaction_fd_recv(t, fd, fixup->offset);
3949 		fd_install(fd, fixup->file);
3950 		fixup->file = NULL;
3951 		fdp = (u32 *)(t->buffer->data + fixup->offset);
3952 		/*
3953 		 * This store can cause problems for CPUs with a
3954 		 * VIVT cache (eg ARMv5) since the cache cannot
3955 		 * detect virtual aliases to the same physical cacheline.
3956 		 * To support VIVT, this address and the user-space VA
3957 		 * would both need to be flushed. Since this kernel
3958 		 * VA is not constructed via page_to_virt(), we can't
3959 		 * use flush_dcache_page() on it, so we'd have to use
3960 		 * an internal function. If devices with VIVT ever
3961 		 * need to run Android, we'll either need to go back
3962 		 * to patching the translated fd from the sender side
3963 		 * (using the non-standard kernel functions), or rework
3964 		 * how the kernel uses the buffer to use page_to_virt()
3965 		 * addresses instead of allocating in our own vm area.
3966 		 *
3967 		 * For now, we disable compilation if CONFIG_CPU_CACHE_VIVT.
3968 		 */
3969 		*fdp = fd;
3970 	}
3971 	list_for_each_entry_safe(fixup, tmp, &t->fd_fixups, fixup_entry) {
3972 		if (fixup->file) {
3973 			fput(fixup->file);
3974 		} else if (ret) {
3975 			u32 *fdp = (u32 *)(t->buffer->data + fixup->offset);
3976 
3977 			binder_deferred_fd_close(*fdp);
3978 		}
3979 		list_del(&fixup->fixup_entry);
3980 		kfree(fixup);
3981 	}
3982 
3983 	return ret;
3984 }
3985 
3986 static int binder_thread_read(struct binder_proc *proc,
3987 			      struct binder_thread *thread,
3988 			      binder_uintptr_t binder_buffer, size_t size,
3989 			      binder_size_t *consumed, int non_block)
3990 {
3991 	void __user *buffer = (void __user *)(uintptr_t)binder_buffer;
3992 	void __user *ptr = buffer + *consumed;
3993 	void __user *end = buffer + size;
3994 
3995 	int ret = 0;
3996 	int wait_for_proc_work;
3997 
3998 	if (*consumed == 0) {
3999 		if (put_user(BR_NOOP, (uint32_t __user *)ptr))
4000 			return -EFAULT;
4001 		ptr += sizeof(uint32_t);
4002 	}
4003 
4004 retry:
4005 	binder_inner_proc_lock(proc);
4006 	wait_for_proc_work = binder_available_for_proc_work_ilocked(thread);
4007 	binder_inner_proc_unlock(proc);
4008 
4009 	thread->looper |= BINDER_LOOPER_STATE_WAITING;
4010 
4011 	trace_binder_wait_for_work(wait_for_proc_work,
4012 				   !!thread->transaction_stack,
4013 				   !binder_worklist_empty(proc, &thread->todo));
4014 	if (wait_for_proc_work) {
4015 		if (!(thread->looper & (BINDER_LOOPER_STATE_REGISTERED |
4016 					BINDER_LOOPER_STATE_ENTERED))) {
4017 			binder_user_error("%d:%d ERROR: Thread waiting for process work before calling BC_REGISTER_LOOPER or BC_ENTER_LOOPER (state %x)\n",
4018 				proc->pid, thread->pid, thread->looper);
4019 			wait_event_interruptible(binder_user_error_wait,
4020 						 binder_stop_on_user_error < 2);
4021 		}
4022 		binder_set_nice(proc->default_priority);
4023 	}
4024 
4025 	if (non_block) {
4026 		if (!binder_has_work(thread, wait_for_proc_work))
4027 			ret = -EAGAIN;
4028 	} else {
4029 		ret = binder_wait_for_work(thread, wait_for_proc_work);
4030 	}
4031 
4032 	thread->looper &= ~BINDER_LOOPER_STATE_WAITING;
4033 
4034 	if (ret)
4035 		return ret;
4036 
4037 	while (1) {
4038 		uint32_t cmd;
4039 		struct binder_transaction_data tr;
4040 		struct binder_work *w = NULL;
4041 		struct list_head *list = NULL;
4042 		struct binder_transaction *t = NULL;
4043 		struct binder_thread *t_from;
4044 
4045 		binder_inner_proc_lock(proc);
4046 		if (!binder_worklist_empty_ilocked(&thread->todo))
4047 			list = &thread->todo;
4048 		else if (!binder_worklist_empty_ilocked(&proc->todo) &&
4049 			   wait_for_proc_work)
4050 			list = &proc->todo;
4051 		else {
4052 			binder_inner_proc_unlock(proc);
4053 
4054 			/* no data added */
4055 			if (ptr - buffer == 4 && !thread->looper_need_return)
4056 				goto retry;
4057 			break;
4058 		}
4059 
4060 		if (end - ptr < sizeof(tr) + 4) {
4061 			binder_inner_proc_unlock(proc);
4062 			break;
4063 		}
4064 		w = binder_dequeue_work_head_ilocked(list);
4065 		if (binder_worklist_empty_ilocked(&thread->todo))
4066 			thread->process_todo = false;
4067 
4068 		switch (w->type) {
4069 		case BINDER_WORK_TRANSACTION: {
4070 			binder_inner_proc_unlock(proc);
4071 			t = container_of(w, struct binder_transaction, work);
4072 		} break;
4073 		case BINDER_WORK_RETURN_ERROR: {
4074 			struct binder_error *e = container_of(
4075 					w, struct binder_error, work);
4076 
4077 			WARN_ON(e->cmd == BR_OK);
4078 			binder_inner_proc_unlock(proc);
4079 			if (put_user(e->cmd, (uint32_t __user *)ptr))
4080 				return -EFAULT;
4081 			cmd = e->cmd;
4082 			e->cmd = BR_OK;
4083 			ptr += sizeof(uint32_t);
4084 
4085 			binder_stat_br(proc, thread, cmd);
4086 		} break;
4087 		case BINDER_WORK_TRANSACTION_COMPLETE: {
4088 			binder_inner_proc_unlock(proc);
4089 			cmd = BR_TRANSACTION_COMPLETE;
4090 			if (put_user(cmd, (uint32_t __user *)ptr))
4091 				return -EFAULT;
4092 			ptr += sizeof(uint32_t);
4093 
4094 			binder_stat_br(proc, thread, cmd);
4095 			binder_debug(BINDER_DEBUG_TRANSACTION_COMPLETE,
4096 				     "%d:%d BR_TRANSACTION_COMPLETE\n",
4097 				     proc->pid, thread->pid);
4098 			kfree(w);
4099 			binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE);
4100 		} break;
4101 		case BINDER_WORK_NODE: {
4102 			struct binder_node *node = container_of(w, struct binder_node, work);
4103 			int strong, weak;
4104 			binder_uintptr_t node_ptr = node->ptr;
4105 			binder_uintptr_t node_cookie = node->cookie;
4106 			int node_debug_id = node->debug_id;
4107 			int has_weak_ref;
4108 			int has_strong_ref;
4109 			void __user *orig_ptr = ptr;
4110 
4111 			BUG_ON(proc != node->proc);
4112 			strong = node->internal_strong_refs ||
4113 					node->local_strong_refs;
4114 			weak = !hlist_empty(&node->refs) ||
4115 					node->local_weak_refs ||
4116 					node->tmp_refs || strong;
4117 			has_strong_ref = node->has_strong_ref;
4118 			has_weak_ref = node->has_weak_ref;
4119 
4120 			if (weak && !has_weak_ref) {
4121 				node->has_weak_ref = 1;
4122 				node->pending_weak_ref = 1;
4123 				node->local_weak_refs++;
4124 			}
4125 			if (strong && !has_strong_ref) {
4126 				node->has_strong_ref = 1;
4127 				node->pending_strong_ref = 1;
4128 				node->local_strong_refs++;
4129 			}
4130 			if (!strong && has_strong_ref)
4131 				node->has_strong_ref = 0;
4132 			if (!weak && has_weak_ref)
4133 				node->has_weak_ref = 0;
4134 			if (!weak && !strong) {
4135 				binder_debug(BINDER_DEBUG_INTERNAL_REFS,
4136 					     "%d:%d node %d u%016llx c%016llx deleted\n",
4137 					     proc->pid, thread->pid,
4138 					     node_debug_id,
4139 					     (u64)node_ptr,
4140 					     (u64)node_cookie);
4141 				rb_erase(&node->rb_node, &proc->nodes);
4142 				binder_inner_proc_unlock(proc);
4143 				binder_node_lock(node);
4144 				/*
4145 				 * Acquire the node lock before freeing the
4146 				 * node to serialize with other threads that
4147 				 * may have been holding the node lock while
4148 				 * decrementing this node (avoids race where
4149 				 * this thread frees while the other thread
4150 				 * is unlocking the node after the final
4151 				 * decrement)
4152 				 */
4153 				binder_node_unlock(node);
4154 				binder_free_node(node);
4155 			} else
4156 				binder_inner_proc_unlock(proc);
4157 
4158 			if (weak && !has_weak_ref)
4159 				ret = binder_put_node_cmd(
4160 						proc, thread, &ptr, node_ptr,
4161 						node_cookie, node_debug_id,
4162 						BR_INCREFS, "BR_INCREFS");
4163 			if (!ret && strong && !has_strong_ref)
4164 				ret = binder_put_node_cmd(
4165 						proc, thread, &ptr, node_ptr,
4166 						node_cookie, node_debug_id,
4167 						BR_ACQUIRE, "BR_ACQUIRE");
4168 			if (!ret && !strong && has_strong_ref)
4169 				ret = binder_put_node_cmd(
4170 						proc, thread, &ptr, node_ptr,
4171 						node_cookie, node_debug_id,
4172 						BR_RELEASE, "BR_RELEASE");
4173 			if (!ret && !weak && has_weak_ref)
4174 				ret = binder_put_node_cmd(
4175 						proc, thread, &ptr, node_ptr,
4176 						node_cookie, node_debug_id,
4177 						BR_DECREFS, "BR_DECREFS");
4178 			if (orig_ptr == ptr)
4179 				binder_debug(BINDER_DEBUG_INTERNAL_REFS,
4180 					     "%d:%d node %d u%016llx c%016llx state unchanged\n",
4181 					     proc->pid, thread->pid,
4182 					     node_debug_id,
4183 					     (u64)node_ptr,
4184 					     (u64)node_cookie);
4185 			if (ret)
4186 				return ret;
4187 		} break;
4188 		case BINDER_WORK_DEAD_BINDER:
4189 		case BINDER_WORK_DEAD_BINDER_AND_CLEAR:
4190 		case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: {
4191 			struct binder_ref_death *death;
4192 			uint32_t cmd;
4193 			binder_uintptr_t cookie;
4194 
4195 			death = container_of(w, struct binder_ref_death, work);
4196 			if (w->type == BINDER_WORK_CLEAR_DEATH_NOTIFICATION)
4197 				cmd = BR_CLEAR_DEATH_NOTIFICATION_DONE;
4198 			else
4199 				cmd = BR_DEAD_BINDER;
4200 			cookie = death->cookie;
4201 
4202 			binder_debug(BINDER_DEBUG_DEATH_NOTIFICATION,
4203 				     "%d:%d %s %016llx\n",
4204 				      proc->pid, thread->pid,
4205 				      cmd == BR_DEAD_BINDER ?
4206 				      "BR_DEAD_BINDER" :
4207 				      "BR_CLEAR_DEATH_NOTIFICATION_DONE",
4208 				      (u64)cookie);
4209 			if (w->type == BINDER_WORK_CLEAR_DEATH_NOTIFICATION) {
4210 				binder_inner_proc_unlock(proc);
4211 				kfree(death);
4212 				binder_stats_deleted(BINDER_STAT_DEATH);
4213 			} else {
4214 				binder_enqueue_work_ilocked(
4215 						w, &proc->delivered_death);
4216 				binder_inner_proc_unlock(proc);
4217 			}
4218 			if (put_user(cmd, (uint32_t __user *)ptr))
4219 				return -EFAULT;
4220 			ptr += sizeof(uint32_t);
4221 			if (put_user(cookie,
4222 				     (binder_uintptr_t __user *)ptr))
4223 				return -EFAULT;
4224 			ptr += sizeof(binder_uintptr_t);
4225 			binder_stat_br(proc, thread, cmd);
4226 			if (cmd == BR_DEAD_BINDER)
4227 				goto done; /* DEAD_BINDER notifications can cause transactions */
4228 		} break;
4229 		default:
4230 			binder_inner_proc_unlock(proc);
4231 			pr_err("%d:%d: bad work type %d\n",
4232 			       proc->pid, thread->pid, w->type);
4233 			break;
4234 		}
4235 
4236 		if (!t)
4237 			continue;
4238 
4239 		BUG_ON(t->buffer == NULL);
4240 		if (t->buffer->target_node) {
4241 			struct binder_node *target_node = t->buffer->target_node;
4242 
4243 			tr.target.ptr = target_node->ptr;
4244 			tr.cookie =  target_node->cookie;
4245 			t->saved_priority = task_nice(current);
4246 			if (t->priority < target_node->min_priority &&
4247 			    !(t->flags & TF_ONE_WAY))
4248 				binder_set_nice(t->priority);
4249 			else if (!(t->flags & TF_ONE_WAY) ||
4250 				 t->saved_priority > target_node->min_priority)
4251 				binder_set_nice(target_node->min_priority);
4252 			cmd = BR_TRANSACTION;
4253 		} else {
4254 			tr.target.ptr = 0;
4255 			tr.cookie = 0;
4256 			cmd = BR_REPLY;
4257 		}
4258 		tr.code = t->code;
4259 		tr.flags = t->flags;
4260 		tr.sender_euid = from_kuid(current_user_ns(), t->sender_euid);
4261 
4262 		t_from = binder_get_txn_from(t);
4263 		if (t_from) {
4264 			struct task_struct *sender = t_from->proc->tsk;
4265 
4266 			tr.sender_pid = task_tgid_nr_ns(sender,
4267 							task_active_pid_ns(current));
4268 		} else {
4269 			tr.sender_pid = 0;
4270 		}
4271 
4272 		ret = binder_apply_fd_fixups(t);
4273 		if (ret) {
4274 			struct binder_buffer *buffer = t->buffer;
4275 			bool oneway = !!(t->flags & TF_ONE_WAY);
4276 			int tid = t->debug_id;
4277 
4278 			if (t_from)
4279 				binder_thread_dec_tmpref(t_from);
4280 			buffer->transaction = NULL;
4281 			binder_cleanup_transaction(t, "fd fixups failed",
4282 						   BR_FAILED_REPLY);
4283 			binder_free_buf(proc, buffer);
4284 			binder_debug(BINDER_DEBUG_FAILED_TRANSACTION,
4285 				     "%d:%d %stransaction %d fd fixups failed %d/%d, line %d\n",
4286 				     proc->pid, thread->pid,
4287 				     oneway ? "async " :
4288 					(cmd == BR_REPLY ? "reply " : ""),
4289 				     tid, BR_FAILED_REPLY, ret, __LINE__);
4290 			if (cmd == BR_REPLY) {
4291 				cmd = BR_FAILED_REPLY;
4292 				if (put_user(cmd, (uint32_t __user *)ptr))
4293 					return -EFAULT;
4294 				ptr += sizeof(uint32_t);
4295 				binder_stat_br(proc, thread, cmd);
4296 				break;
4297 			}
4298 			continue;
4299 		}
4300 		tr.data_size = t->buffer->data_size;
4301 		tr.offsets_size = t->buffer->offsets_size;
4302 		tr.data.ptr.buffer = (binder_uintptr_t)
4303 			((uintptr_t)t->buffer->data +
4304 			binder_alloc_get_user_buffer_offset(&proc->alloc));
4305 		tr.data.ptr.offsets = tr.data.ptr.buffer +
4306 					ALIGN(t->buffer->data_size,
4307 					    sizeof(void *));
4308 
4309 		if (put_user(cmd, (uint32_t __user *)ptr)) {
4310 			if (t_from)
4311 				binder_thread_dec_tmpref(t_from);
4312 
4313 			binder_cleanup_transaction(t, "put_user failed",
4314 						   BR_FAILED_REPLY);
4315 
4316 			return -EFAULT;
4317 		}
4318 		ptr += sizeof(uint32_t);
4319 		if (copy_to_user(ptr, &tr, sizeof(tr))) {
4320 			if (t_from)
4321 				binder_thread_dec_tmpref(t_from);
4322 
4323 			binder_cleanup_transaction(t, "copy_to_user failed",
4324 						   BR_FAILED_REPLY);
4325 
4326 			return -EFAULT;
4327 		}
4328 		ptr += sizeof(tr);
4329 
4330 		trace_binder_transaction_received(t);
4331 		binder_stat_br(proc, thread, cmd);
4332 		binder_debug(BINDER_DEBUG_TRANSACTION,
4333 			     "%d:%d %s %d %d:%d, cmd %d size %zd-%zd ptr %016llx-%016llx\n",
4334 			     proc->pid, thread->pid,
4335 			     (cmd == BR_TRANSACTION) ? "BR_TRANSACTION" :
4336 			     "BR_REPLY",
4337 			     t->debug_id, t_from ? t_from->proc->pid : 0,
4338 			     t_from ? t_from->pid : 0, cmd,
4339 			     t->buffer->data_size, t->buffer->offsets_size,
4340 			     (u64)tr.data.ptr.buffer, (u64)tr.data.ptr.offsets);
4341 
4342 		if (t_from)
4343 			binder_thread_dec_tmpref(t_from);
4344 		t->buffer->allow_user_free = 1;
4345 		if (cmd == BR_TRANSACTION && !(t->flags & TF_ONE_WAY)) {
4346 			binder_inner_proc_lock(thread->proc);
4347 			t->to_parent = thread->transaction_stack;
4348 			t->to_thread = thread;
4349 			thread->transaction_stack = t;
4350 			binder_inner_proc_unlock(thread->proc);
4351 		} else {
4352 			binder_free_transaction(t);
4353 		}
4354 		break;
4355 	}
4356 
4357 done:
4358 
4359 	*consumed = ptr - buffer;
4360 	binder_inner_proc_lock(proc);
4361 	if (proc->requested_threads == 0 &&
4362 	    list_empty(&thread->proc->waiting_threads) &&
4363 	    proc->requested_threads_started < proc->max_threads &&
4364 	    (thread->looper & (BINDER_LOOPER_STATE_REGISTERED |
4365 	     BINDER_LOOPER_STATE_ENTERED)) /* the user-space code fails to */
4366 	     /*spawn a new thread if we leave this out */) {
4367 		proc->requested_threads++;
4368 		binder_inner_proc_unlock(proc);
4369 		binder_debug(BINDER_DEBUG_THREADS,
4370 			     "%d:%d BR_SPAWN_LOOPER\n",
4371 			     proc->pid, thread->pid);
4372 		if (put_user(BR_SPAWN_LOOPER, (uint32_t __user *)buffer))
4373 			return -EFAULT;
4374 		binder_stat_br(proc, thread, BR_SPAWN_LOOPER);
4375 	} else
4376 		binder_inner_proc_unlock(proc);
4377 	return 0;
4378 }
4379 
4380 static void binder_release_work(struct binder_proc *proc,
4381 				struct list_head *list)
4382 {
4383 	struct binder_work *w;
4384 
4385 	while (1) {
4386 		w = binder_dequeue_work_head(proc, list);
4387 		if (!w)
4388 			return;
4389 
4390 		switch (w->type) {
4391 		case BINDER_WORK_TRANSACTION: {
4392 			struct binder_transaction *t;
4393 
4394 			t = container_of(w, struct binder_transaction, work);
4395 
4396 			binder_cleanup_transaction(t, "process died.",
4397 						   BR_DEAD_REPLY);
4398 		} break;
4399 		case BINDER_WORK_RETURN_ERROR: {
4400 			struct binder_error *e = container_of(
4401 					w, struct binder_error, work);
4402 
4403 			binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
4404 				"undelivered TRANSACTION_ERROR: %u\n",
4405 				e->cmd);
4406 		} break;
4407 		case BINDER_WORK_TRANSACTION_COMPLETE: {
4408 			binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
4409 				"undelivered TRANSACTION_COMPLETE\n");
4410 			kfree(w);
4411 			binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE);
4412 		} break;
4413 		case BINDER_WORK_DEAD_BINDER_AND_CLEAR:
4414 		case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: {
4415 			struct binder_ref_death *death;
4416 
4417 			death = container_of(w, struct binder_ref_death, work);
4418 			binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
4419 				"undelivered death notification, %016llx\n",
4420 				(u64)death->cookie);
4421 			kfree(death);
4422 			binder_stats_deleted(BINDER_STAT_DEATH);
4423 		} break;
4424 		default:
4425 			pr_err("unexpected work type, %d, not freed\n",
4426 			       w->type);
4427 			break;
4428 		}
4429 	}
4430 
4431 }
4432 
4433 static struct binder_thread *binder_get_thread_ilocked(
4434 		struct binder_proc *proc, struct binder_thread *new_thread)
4435 {
4436 	struct binder_thread *thread = NULL;
4437 	struct rb_node *parent = NULL;
4438 	struct rb_node **p = &proc->threads.rb_node;
4439 
4440 	while (*p) {
4441 		parent = *p;
4442 		thread = rb_entry(parent, struct binder_thread, rb_node);
4443 
4444 		if (current->pid < thread->pid)
4445 			p = &(*p)->rb_left;
4446 		else if (current->pid > thread->pid)
4447 			p = &(*p)->rb_right;
4448 		else
4449 			return thread;
4450 	}
4451 	if (!new_thread)
4452 		return NULL;
4453 	thread = new_thread;
4454 	binder_stats_created(BINDER_STAT_THREAD);
4455 	thread->proc = proc;
4456 	thread->pid = current->pid;
4457 	atomic_set(&thread->tmp_ref, 0);
4458 	init_waitqueue_head(&thread->wait);
4459 	INIT_LIST_HEAD(&thread->todo);
4460 	rb_link_node(&thread->rb_node, parent, p);
4461 	rb_insert_color(&thread->rb_node, &proc->threads);
4462 	thread->looper_need_return = true;
4463 	thread->return_error.work.type = BINDER_WORK_RETURN_ERROR;
4464 	thread->return_error.cmd = BR_OK;
4465 	thread->reply_error.work.type = BINDER_WORK_RETURN_ERROR;
4466 	thread->reply_error.cmd = BR_OK;
4467 	INIT_LIST_HEAD(&new_thread->waiting_thread_node);
4468 	return thread;
4469 }
4470 
4471 static struct binder_thread *binder_get_thread(struct binder_proc *proc)
4472 {
4473 	struct binder_thread *thread;
4474 	struct binder_thread *new_thread;
4475 
4476 	binder_inner_proc_lock(proc);
4477 	thread = binder_get_thread_ilocked(proc, NULL);
4478 	binder_inner_proc_unlock(proc);
4479 	if (!thread) {
4480 		new_thread = kzalloc(sizeof(*thread), GFP_KERNEL);
4481 		if (new_thread == NULL)
4482 			return NULL;
4483 		binder_inner_proc_lock(proc);
4484 		thread = binder_get_thread_ilocked(proc, new_thread);
4485 		binder_inner_proc_unlock(proc);
4486 		if (thread != new_thread)
4487 			kfree(new_thread);
4488 	}
4489 	return thread;
4490 }
4491 
4492 static void binder_free_proc(struct binder_proc *proc)
4493 {
4494 	BUG_ON(!list_empty(&proc->todo));
4495 	BUG_ON(!list_empty(&proc->delivered_death));
4496 	binder_alloc_deferred_release(&proc->alloc);
4497 	put_task_struct(proc->tsk);
4498 	binder_stats_deleted(BINDER_STAT_PROC);
4499 	kfree(proc);
4500 }
4501 
4502 static void binder_free_thread(struct binder_thread *thread)
4503 {
4504 	BUG_ON(!list_empty(&thread->todo));
4505 	binder_stats_deleted(BINDER_STAT_THREAD);
4506 	binder_proc_dec_tmpref(thread->proc);
4507 	kfree(thread);
4508 }
4509 
4510 static int binder_thread_release(struct binder_proc *proc,
4511 				 struct binder_thread *thread)
4512 {
4513 	struct binder_transaction *t;
4514 	struct binder_transaction *send_reply = NULL;
4515 	int active_transactions = 0;
4516 	struct binder_transaction *last_t = NULL;
4517 
4518 	binder_inner_proc_lock(thread->proc);
4519 	/*
4520 	 * take a ref on the proc so it survives
4521 	 * after we remove this thread from proc->threads.
4522 	 * The corresponding dec is when we actually
4523 	 * free the thread in binder_free_thread()
4524 	 */
4525 	proc->tmp_ref++;
4526 	/*
4527 	 * take a ref on this thread to ensure it
4528 	 * survives while we are releasing it
4529 	 */
4530 	atomic_inc(&thread->tmp_ref);
4531 	rb_erase(&thread->rb_node, &proc->threads);
4532 	t = thread->transaction_stack;
4533 	if (t) {
4534 		spin_lock(&t->lock);
4535 		if (t->to_thread == thread)
4536 			send_reply = t;
4537 	} else {
4538 		__acquire(&t->lock);
4539 	}
4540 	thread->is_dead = true;
4541 
4542 	while (t) {
4543 		last_t = t;
4544 		active_transactions++;
4545 		binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
4546 			     "release %d:%d transaction %d %s, still active\n",
4547 			      proc->pid, thread->pid,
4548 			     t->debug_id,
4549 			     (t->to_thread == thread) ? "in" : "out");
4550 
4551 		if (t->to_thread == thread) {
4552 			t->to_proc = NULL;
4553 			t->to_thread = NULL;
4554 			if (t->buffer) {
4555 				t->buffer->transaction = NULL;
4556 				t->buffer = NULL;
4557 			}
4558 			t = t->to_parent;
4559 		} else if (t->from == thread) {
4560 			t->from = NULL;
4561 			t = t->from_parent;
4562 		} else
4563 			BUG();
4564 		spin_unlock(&last_t->lock);
4565 		if (t)
4566 			spin_lock(&t->lock);
4567 		else
4568 			__acquire(&t->lock);
4569 	}
4570 	/* annotation for sparse, lock not acquired in last iteration above */
4571 	__release(&t->lock);
4572 
4573 	/*
4574 	 * If this thread used poll, make sure we remove the waitqueue
4575 	 * from any epoll data structures holding it with POLLFREE.
4576 	 * waitqueue_active() is safe to use here because we're holding
4577 	 * the inner lock.
4578 	 */
4579 	if ((thread->looper & BINDER_LOOPER_STATE_POLL) &&
4580 	    waitqueue_active(&thread->wait)) {
4581 		wake_up_poll(&thread->wait, EPOLLHUP | POLLFREE);
4582 	}
4583 
4584 	binder_inner_proc_unlock(thread->proc);
4585 
4586 	/*
4587 	 * This is needed to avoid races between wake_up_poll() above and
4588 	 * and ep_remove_waitqueue() called for other reasons (eg the epoll file
4589 	 * descriptor being closed); ep_remove_waitqueue() holds an RCU read
4590 	 * lock, so we can be sure it's done after calling synchronize_rcu().
4591 	 */
4592 	if (thread->looper & BINDER_LOOPER_STATE_POLL)
4593 		synchronize_rcu();
4594 
4595 	if (send_reply)
4596 		binder_send_failed_reply(send_reply, BR_DEAD_REPLY);
4597 	binder_release_work(proc, &thread->todo);
4598 	binder_thread_dec_tmpref(thread);
4599 	return active_transactions;
4600 }
4601 
4602 static __poll_t binder_poll(struct file *filp,
4603 				struct poll_table_struct *wait)
4604 {
4605 	struct binder_proc *proc = filp->private_data;
4606 	struct binder_thread *thread = NULL;
4607 	bool wait_for_proc_work;
4608 
4609 	thread = binder_get_thread(proc);
4610 	if (!thread)
4611 		return POLLERR;
4612 
4613 	binder_inner_proc_lock(thread->proc);
4614 	thread->looper |= BINDER_LOOPER_STATE_POLL;
4615 	wait_for_proc_work = binder_available_for_proc_work_ilocked(thread);
4616 
4617 	binder_inner_proc_unlock(thread->proc);
4618 
4619 	poll_wait(filp, &thread->wait, wait);
4620 
4621 	if (binder_has_work(thread, wait_for_proc_work))
4622 		return EPOLLIN;
4623 
4624 	return 0;
4625 }
4626 
4627 static int binder_ioctl_write_read(struct file *filp,
4628 				unsigned int cmd, unsigned long arg,
4629 				struct binder_thread *thread)
4630 {
4631 	int ret = 0;
4632 	struct binder_proc *proc = filp->private_data;
4633 	unsigned int size = _IOC_SIZE(cmd);
4634 	void __user *ubuf = (void __user *)arg;
4635 	struct binder_write_read bwr;
4636 
4637 	if (size != sizeof(struct binder_write_read)) {
4638 		ret = -EINVAL;
4639 		goto out;
4640 	}
4641 	if (copy_from_user(&bwr, ubuf, sizeof(bwr))) {
4642 		ret = -EFAULT;
4643 		goto out;
4644 	}
4645 	binder_debug(BINDER_DEBUG_READ_WRITE,
4646 		     "%d:%d write %lld at %016llx, read %lld at %016llx\n",
4647 		     proc->pid, thread->pid,
4648 		     (u64)bwr.write_size, (u64)bwr.write_buffer,
4649 		     (u64)bwr.read_size, (u64)bwr.read_buffer);
4650 
4651 	if (bwr.write_size > 0) {
4652 		ret = binder_thread_write(proc, thread,
4653 					  bwr.write_buffer,
4654 					  bwr.write_size,
4655 					  &bwr.write_consumed);
4656 		trace_binder_write_done(ret);
4657 		if (ret < 0) {
4658 			bwr.read_consumed = 0;
4659 			if (copy_to_user(ubuf, &bwr, sizeof(bwr)))
4660 				ret = -EFAULT;
4661 			goto out;
4662 		}
4663 	}
4664 	if (bwr.read_size > 0) {
4665 		ret = binder_thread_read(proc, thread, bwr.read_buffer,
4666 					 bwr.read_size,
4667 					 &bwr.read_consumed,
4668 					 filp->f_flags & O_NONBLOCK);
4669 		trace_binder_read_done(ret);
4670 		binder_inner_proc_lock(proc);
4671 		if (!binder_worklist_empty_ilocked(&proc->todo))
4672 			binder_wakeup_proc_ilocked(proc);
4673 		binder_inner_proc_unlock(proc);
4674 		if (ret < 0) {
4675 			if (copy_to_user(ubuf, &bwr, sizeof(bwr)))
4676 				ret = -EFAULT;
4677 			goto out;
4678 		}
4679 	}
4680 	binder_debug(BINDER_DEBUG_READ_WRITE,
4681 		     "%d:%d wrote %lld of %lld, read return %lld of %lld\n",
4682 		     proc->pid, thread->pid,
4683 		     (u64)bwr.write_consumed, (u64)bwr.write_size,
4684 		     (u64)bwr.read_consumed, (u64)bwr.read_size);
4685 	if (copy_to_user(ubuf, &bwr, sizeof(bwr))) {
4686 		ret = -EFAULT;
4687 		goto out;
4688 	}
4689 out:
4690 	return ret;
4691 }
4692 
4693 static int binder_ioctl_set_ctx_mgr(struct file *filp)
4694 {
4695 	int ret = 0;
4696 	struct binder_proc *proc = filp->private_data;
4697 	struct binder_context *context = proc->context;
4698 	struct binder_node *new_node;
4699 	kuid_t curr_euid = current_euid();
4700 
4701 	mutex_lock(&context->context_mgr_node_lock);
4702 	if (context->binder_context_mgr_node) {
4703 		pr_err("BINDER_SET_CONTEXT_MGR already set\n");
4704 		ret = -EBUSY;
4705 		goto out;
4706 	}
4707 	ret = security_binder_set_context_mgr(proc->tsk);
4708 	if (ret < 0)
4709 		goto out;
4710 	if (uid_valid(context->binder_context_mgr_uid)) {
4711 		if (!uid_eq(context->binder_context_mgr_uid, curr_euid)) {
4712 			pr_err("BINDER_SET_CONTEXT_MGR bad uid %d != %d\n",
4713 			       from_kuid(&init_user_ns, curr_euid),
4714 			       from_kuid(&init_user_ns,
4715 					 context->binder_context_mgr_uid));
4716 			ret = -EPERM;
4717 			goto out;
4718 		}
4719 	} else {
4720 		context->binder_context_mgr_uid = curr_euid;
4721 	}
4722 	new_node = binder_new_node(proc, NULL);
4723 	if (!new_node) {
4724 		ret = -ENOMEM;
4725 		goto out;
4726 	}
4727 	binder_node_lock(new_node);
4728 	new_node->local_weak_refs++;
4729 	new_node->local_strong_refs++;
4730 	new_node->has_strong_ref = 1;
4731 	new_node->has_weak_ref = 1;
4732 	context->binder_context_mgr_node = new_node;
4733 	binder_node_unlock(new_node);
4734 	binder_put_node(new_node);
4735 out:
4736 	mutex_unlock(&context->context_mgr_node_lock);
4737 	return ret;
4738 }
4739 
4740 static int binder_ioctl_get_node_info_for_ref(struct binder_proc *proc,
4741 		struct binder_node_info_for_ref *info)
4742 {
4743 	struct binder_node *node;
4744 	struct binder_context *context = proc->context;
4745 	__u32 handle = info->handle;
4746 
4747 	if (info->strong_count || info->weak_count || info->reserved1 ||
4748 	    info->reserved2 || info->reserved3) {
4749 		binder_user_error("%d BINDER_GET_NODE_INFO_FOR_REF: only handle may be non-zero.",
4750 				  proc->pid);
4751 		return -EINVAL;
4752 	}
4753 
4754 	/* This ioctl may only be used by the context manager */
4755 	mutex_lock(&context->context_mgr_node_lock);
4756 	if (!context->binder_context_mgr_node ||
4757 		context->binder_context_mgr_node->proc != proc) {
4758 		mutex_unlock(&context->context_mgr_node_lock);
4759 		return -EPERM;
4760 	}
4761 	mutex_unlock(&context->context_mgr_node_lock);
4762 
4763 	node = binder_get_node_from_ref(proc, handle, true, NULL);
4764 	if (!node)
4765 		return -EINVAL;
4766 
4767 	info->strong_count = node->local_strong_refs +
4768 		node->internal_strong_refs;
4769 	info->weak_count = node->local_weak_refs;
4770 
4771 	binder_put_node(node);
4772 
4773 	return 0;
4774 }
4775 
4776 static int binder_ioctl_get_node_debug_info(struct binder_proc *proc,
4777 				struct binder_node_debug_info *info)
4778 {
4779 	struct rb_node *n;
4780 	binder_uintptr_t ptr = info->ptr;
4781 
4782 	memset(info, 0, sizeof(*info));
4783 
4784 	binder_inner_proc_lock(proc);
4785 	for (n = rb_first(&proc->nodes); n != NULL; n = rb_next(n)) {
4786 		struct binder_node *node = rb_entry(n, struct binder_node,
4787 						    rb_node);
4788 		if (node->ptr > ptr) {
4789 			info->ptr = node->ptr;
4790 			info->cookie = node->cookie;
4791 			info->has_strong_ref = node->has_strong_ref;
4792 			info->has_weak_ref = node->has_weak_ref;
4793 			break;
4794 		}
4795 	}
4796 	binder_inner_proc_unlock(proc);
4797 
4798 	return 0;
4799 }
4800 
4801 static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
4802 {
4803 	int ret;
4804 	struct binder_proc *proc = filp->private_data;
4805 	struct binder_thread *thread;
4806 	unsigned int size = _IOC_SIZE(cmd);
4807 	void __user *ubuf = (void __user *)arg;
4808 
4809 	/*pr_info("binder_ioctl: %d:%d %x %lx\n",
4810 			proc->pid, current->pid, cmd, arg);*/
4811 
4812 	binder_selftest_alloc(&proc->alloc);
4813 
4814 	trace_binder_ioctl(cmd, arg);
4815 
4816 	ret = wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
4817 	if (ret)
4818 		goto err_unlocked;
4819 
4820 	thread = binder_get_thread(proc);
4821 	if (thread == NULL) {
4822 		ret = -ENOMEM;
4823 		goto err;
4824 	}
4825 
4826 	switch (cmd) {
4827 	case BINDER_WRITE_READ:
4828 		ret = binder_ioctl_write_read(filp, cmd, arg, thread);
4829 		if (ret)
4830 			goto err;
4831 		break;
4832 	case BINDER_SET_MAX_THREADS: {
4833 		int max_threads;
4834 
4835 		if (copy_from_user(&max_threads, ubuf,
4836 				   sizeof(max_threads))) {
4837 			ret = -EINVAL;
4838 			goto err;
4839 		}
4840 		binder_inner_proc_lock(proc);
4841 		proc->max_threads = max_threads;
4842 		binder_inner_proc_unlock(proc);
4843 		break;
4844 	}
4845 	case BINDER_SET_CONTEXT_MGR:
4846 		ret = binder_ioctl_set_ctx_mgr(filp);
4847 		if (ret)
4848 			goto err;
4849 		break;
4850 	case BINDER_THREAD_EXIT:
4851 		binder_debug(BINDER_DEBUG_THREADS, "%d:%d exit\n",
4852 			     proc->pid, thread->pid);
4853 		binder_thread_release(proc, thread);
4854 		thread = NULL;
4855 		break;
4856 	case BINDER_VERSION: {
4857 		struct binder_version __user *ver = ubuf;
4858 
4859 		if (size != sizeof(struct binder_version)) {
4860 			ret = -EINVAL;
4861 			goto err;
4862 		}
4863 		if (put_user(BINDER_CURRENT_PROTOCOL_VERSION,
4864 			     &ver->protocol_version)) {
4865 			ret = -EINVAL;
4866 			goto err;
4867 		}
4868 		break;
4869 	}
4870 	case BINDER_GET_NODE_INFO_FOR_REF: {
4871 		struct binder_node_info_for_ref info;
4872 
4873 		if (copy_from_user(&info, ubuf, sizeof(info))) {
4874 			ret = -EFAULT;
4875 			goto err;
4876 		}
4877 
4878 		ret = binder_ioctl_get_node_info_for_ref(proc, &info);
4879 		if (ret < 0)
4880 			goto err;
4881 
4882 		if (copy_to_user(ubuf, &info, sizeof(info))) {
4883 			ret = -EFAULT;
4884 			goto err;
4885 		}
4886 
4887 		break;
4888 	}
4889 	case BINDER_GET_NODE_DEBUG_INFO: {
4890 		struct binder_node_debug_info info;
4891 
4892 		if (copy_from_user(&info, ubuf, sizeof(info))) {
4893 			ret = -EFAULT;
4894 			goto err;
4895 		}
4896 
4897 		ret = binder_ioctl_get_node_debug_info(proc, &info);
4898 		if (ret < 0)
4899 			goto err;
4900 
4901 		if (copy_to_user(ubuf, &info, sizeof(info))) {
4902 			ret = -EFAULT;
4903 			goto err;
4904 		}
4905 		break;
4906 	}
4907 	default:
4908 		ret = -EINVAL;
4909 		goto err;
4910 	}
4911 	ret = 0;
4912 err:
4913 	if (thread)
4914 		thread->looper_need_return = false;
4915 	wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
4916 	if (ret && ret != -ERESTARTSYS)
4917 		pr_info("%d:%d ioctl %x %lx returned %d\n", proc->pid, current->pid, cmd, arg, ret);
4918 err_unlocked:
4919 	trace_binder_ioctl_done(ret);
4920 	return ret;
4921 }
4922 
4923 static void binder_vma_open(struct vm_area_struct *vma)
4924 {
4925 	struct binder_proc *proc = vma->vm_private_data;
4926 
4927 	binder_debug(BINDER_DEBUG_OPEN_CLOSE,
4928 		     "%d open vm area %lx-%lx (%ld K) vma %lx pagep %lx\n",
4929 		     proc->pid, vma->vm_start, vma->vm_end,
4930 		     (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
4931 		     (unsigned long)pgprot_val(vma->vm_page_prot));
4932 }
4933 
4934 static void binder_vma_close(struct vm_area_struct *vma)
4935 {
4936 	struct binder_proc *proc = vma->vm_private_data;
4937 
4938 	binder_debug(BINDER_DEBUG_OPEN_CLOSE,
4939 		     "%d close vm area %lx-%lx (%ld K) vma %lx pagep %lx\n",
4940 		     proc->pid, vma->vm_start, vma->vm_end,
4941 		     (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
4942 		     (unsigned long)pgprot_val(vma->vm_page_prot));
4943 	binder_alloc_vma_close(&proc->alloc);
4944 }
4945 
4946 static vm_fault_t binder_vm_fault(struct vm_fault *vmf)
4947 {
4948 	return VM_FAULT_SIGBUS;
4949 }
4950 
4951 static const struct vm_operations_struct binder_vm_ops = {
4952 	.open = binder_vma_open,
4953 	.close = binder_vma_close,
4954 	.fault = binder_vm_fault,
4955 };
4956 
4957 static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
4958 {
4959 	int ret;
4960 	struct binder_proc *proc = filp->private_data;
4961 	const char *failure_string;
4962 
4963 	if (proc->tsk != current->group_leader)
4964 		return -EINVAL;
4965 
4966 	if ((vma->vm_end - vma->vm_start) > SZ_4M)
4967 		vma->vm_end = vma->vm_start + SZ_4M;
4968 
4969 	binder_debug(BINDER_DEBUG_OPEN_CLOSE,
4970 		     "%s: %d %lx-%lx (%ld K) vma %lx pagep %lx\n",
4971 		     __func__, proc->pid, vma->vm_start, vma->vm_end,
4972 		     (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
4973 		     (unsigned long)pgprot_val(vma->vm_page_prot));
4974 
4975 	if (vma->vm_flags & FORBIDDEN_MMAP_FLAGS) {
4976 		ret = -EPERM;
4977 		failure_string = "bad vm_flags";
4978 		goto err_bad_arg;
4979 	}
4980 	vma->vm_flags |= VM_DONTCOPY | VM_MIXEDMAP;
4981 	vma->vm_flags &= ~VM_MAYWRITE;
4982 
4983 	vma->vm_ops = &binder_vm_ops;
4984 	vma->vm_private_data = proc;
4985 
4986 	ret = binder_alloc_mmap_handler(&proc->alloc, vma);
4987 	if (ret)
4988 		return ret;
4989 	return 0;
4990 
4991 err_bad_arg:
4992 	pr_err("%s: %d %lx-%lx %s failed %d\n", __func__,
4993 	       proc->pid, vma->vm_start, vma->vm_end, failure_string, ret);
4994 	return ret;
4995 }
4996 
4997 static int binder_open(struct inode *nodp, struct file *filp)
4998 {
4999 	struct binder_proc *proc;
5000 	struct binder_device *binder_dev;
5001 
5002 	binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d:%d\n", __func__,
5003 		     current->group_leader->pid, current->pid);
5004 
5005 	proc = kzalloc(sizeof(*proc), GFP_KERNEL);
5006 	if (proc == NULL)
5007 		return -ENOMEM;
5008 	spin_lock_init(&proc->inner_lock);
5009 	spin_lock_init(&proc->outer_lock);
5010 	get_task_struct(current->group_leader);
5011 	proc->tsk = current->group_leader;
5012 	INIT_LIST_HEAD(&proc->todo);
5013 	proc->default_priority = task_nice(current);
5014 	/* binderfs stashes devices in i_private */
5015 	if (is_binderfs_device(nodp))
5016 		binder_dev = nodp->i_private;
5017 	else
5018 		binder_dev = container_of(filp->private_data,
5019 					  struct binder_device, miscdev);
5020 	proc->context = &binder_dev->context;
5021 	binder_alloc_init(&proc->alloc);
5022 
5023 	binder_stats_created(BINDER_STAT_PROC);
5024 	proc->pid = current->group_leader->pid;
5025 	INIT_LIST_HEAD(&proc->delivered_death);
5026 	INIT_LIST_HEAD(&proc->waiting_threads);
5027 	filp->private_data = proc;
5028 
5029 	mutex_lock(&binder_procs_lock);
5030 	hlist_add_head(&proc->proc_node, &binder_procs);
5031 	mutex_unlock(&binder_procs_lock);
5032 
5033 	if (binder_debugfs_dir_entry_proc) {
5034 		char strbuf[11];
5035 
5036 		snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
5037 		/*
5038 		 * proc debug entries are shared between contexts, so
5039 		 * this will fail if the process tries to open the driver
5040 		 * again with a different context. The priting code will
5041 		 * anyway print all contexts that a given PID has, so this
5042 		 * is not a problem.
5043 		 */
5044 		proc->debugfs_entry = debugfs_create_file(strbuf, 0444,
5045 			binder_debugfs_dir_entry_proc,
5046 			(void *)(unsigned long)proc->pid,
5047 			&proc_fops);
5048 	}
5049 
5050 	return 0;
5051 }
5052 
5053 static int binder_flush(struct file *filp, fl_owner_t id)
5054 {
5055 	struct binder_proc *proc = filp->private_data;
5056 
5057 	binder_defer_work(proc, BINDER_DEFERRED_FLUSH);
5058 
5059 	return 0;
5060 }
5061 
5062 static void binder_deferred_flush(struct binder_proc *proc)
5063 {
5064 	struct rb_node *n;
5065 	int wake_count = 0;
5066 
5067 	binder_inner_proc_lock(proc);
5068 	for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) {
5069 		struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node);
5070 
5071 		thread->looper_need_return = true;
5072 		if (thread->looper & BINDER_LOOPER_STATE_WAITING) {
5073 			wake_up_interruptible(&thread->wait);
5074 			wake_count++;
5075 		}
5076 	}
5077 	binder_inner_proc_unlock(proc);
5078 
5079 	binder_debug(BINDER_DEBUG_OPEN_CLOSE,
5080 		     "binder_flush: %d woke %d threads\n", proc->pid,
5081 		     wake_count);
5082 }
5083 
5084 static int binder_release(struct inode *nodp, struct file *filp)
5085 {
5086 	struct binder_proc *proc = filp->private_data;
5087 
5088 	debugfs_remove(proc->debugfs_entry);
5089 	binder_defer_work(proc, BINDER_DEFERRED_RELEASE);
5090 
5091 	return 0;
5092 }
5093 
5094 static int binder_node_release(struct binder_node *node, int refs)
5095 {
5096 	struct binder_ref *ref;
5097 	int death = 0;
5098 	struct binder_proc *proc = node->proc;
5099 
5100 	binder_release_work(proc, &node->async_todo);
5101 
5102 	binder_node_lock(node);
5103 	binder_inner_proc_lock(proc);
5104 	binder_dequeue_work_ilocked(&node->work);
5105 	/*
5106 	 * The caller must have taken a temporary ref on the node,
5107 	 */
5108 	BUG_ON(!node->tmp_refs);
5109 	if (hlist_empty(&node->refs) && node->tmp_refs == 1) {
5110 		binder_inner_proc_unlock(proc);
5111 		binder_node_unlock(node);
5112 		binder_free_node(node);
5113 
5114 		return refs;
5115 	}
5116 
5117 	node->proc = NULL;
5118 	node->local_strong_refs = 0;
5119 	node->local_weak_refs = 0;
5120 	binder_inner_proc_unlock(proc);
5121 
5122 	spin_lock(&binder_dead_nodes_lock);
5123 	hlist_add_head(&node->dead_node, &binder_dead_nodes);
5124 	spin_unlock(&binder_dead_nodes_lock);
5125 
5126 	hlist_for_each_entry(ref, &node->refs, node_entry) {
5127 		refs++;
5128 		/*
5129 		 * Need the node lock to synchronize
5130 		 * with new notification requests and the
5131 		 * inner lock to synchronize with queued
5132 		 * death notifications.
5133 		 */
5134 		binder_inner_proc_lock(ref->proc);
5135 		if (!ref->death) {
5136 			binder_inner_proc_unlock(ref->proc);
5137 			continue;
5138 		}
5139 
5140 		death++;
5141 
5142 		BUG_ON(!list_empty(&ref->death->work.entry));
5143 		ref->death->work.type = BINDER_WORK_DEAD_BINDER;
5144 		binder_enqueue_work_ilocked(&ref->death->work,
5145 					    &ref->proc->todo);
5146 		binder_wakeup_proc_ilocked(ref->proc);
5147 		binder_inner_proc_unlock(ref->proc);
5148 	}
5149 
5150 	binder_debug(BINDER_DEBUG_DEAD_BINDER,
5151 		     "node %d now dead, refs %d, death %d\n",
5152 		     node->debug_id, refs, death);
5153 	binder_node_unlock(node);
5154 	binder_put_node(node);
5155 
5156 	return refs;
5157 }
5158 
5159 static void binder_deferred_release(struct binder_proc *proc)
5160 {
5161 	struct binder_context *context = proc->context;
5162 	struct rb_node *n;
5163 	int threads, nodes, incoming_refs, outgoing_refs, active_transactions;
5164 
5165 	mutex_lock(&binder_procs_lock);
5166 	hlist_del(&proc->proc_node);
5167 	mutex_unlock(&binder_procs_lock);
5168 
5169 	mutex_lock(&context->context_mgr_node_lock);
5170 	if (context->binder_context_mgr_node &&
5171 	    context->binder_context_mgr_node->proc == proc) {
5172 		binder_debug(BINDER_DEBUG_DEAD_BINDER,
5173 			     "%s: %d context_mgr_node gone\n",
5174 			     __func__, proc->pid);
5175 		context->binder_context_mgr_node = NULL;
5176 	}
5177 	mutex_unlock(&context->context_mgr_node_lock);
5178 	binder_inner_proc_lock(proc);
5179 	/*
5180 	 * Make sure proc stays alive after we
5181 	 * remove all the threads
5182 	 */
5183 	proc->tmp_ref++;
5184 
5185 	proc->is_dead = true;
5186 	threads = 0;
5187 	active_transactions = 0;
5188 	while ((n = rb_first(&proc->threads))) {
5189 		struct binder_thread *thread;
5190 
5191 		thread = rb_entry(n, struct binder_thread, rb_node);
5192 		binder_inner_proc_unlock(proc);
5193 		threads++;
5194 		active_transactions += binder_thread_release(proc, thread);
5195 		binder_inner_proc_lock(proc);
5196 	}
5197 
5198 	nodes = 0;
5199 	incoming_refs = 0;
5200 	while ((n = rb_first(&proc->nodes))) {
5201 		struct binder_node *node;
5202 
5203 		node = rb_entry(n, struct binder_node, rb_node);
5204 		nodes++;
5205 		/*
5206 		 * take a temporary ref on the node before
5207 		 * calling binder_node_release() which will either
5208 		 * kfree() the node or call binder_put_node()
5209 		 */
5210 		binder_inc_node_tmpref_ilocked(node);
5211 		rb_erase(&node->rb_node, &proc->nodes);
5212 		binder_inner_proc_unlock(proc);
5213 		incoming_refs = binder_node_release(node, incoming_refs);
5214 		binder_inner_proc_lock(proc);
5215 	}
5216 	binder_inner_proc_unlock(proc);
5217 
5218 	outgoing_refs = 0;
5219 	binder_proc_lock(proc);
5220 	while ((n = rb_first(&proc->refs_by_desc))) {
5221 		struct binder_ref *ref;
5222 
5223 		ref = rb_entry(n, struct binder_ref, rb_node_desc);
5224 		outgoing_refs++;
5225 		binder_cleanup_ref_olocked(ref);
5226 		binder_proc_unlock(proc);
5227 		binder_free_ref(ref);
5228 		binder_proc_lock(proc);
5229 	}
5230 	binder_proc_unlock(proc);
5231 
5232 	binder_release_work(proc, &proc->todo);
5233 	binder_release_work(proc, &proc->delivered_death);
5234 
5235 	binder_debug(BINDER_DEBUG_OPEN_CLOSE,
5236 		     "%s: %d threads %d, nodes %d (ref %d), refs %d, active transactions %d\n",
5237 		     __func__, proc->pid, threads, nodes, incoming_refs,
5238 		     outgoing_refs, active_transactions);
5239 
5240 	binder_proc_dec_tmpref(proc);
5241 }
5242 
5243 static void binder_deferred_func(struct work_struct *work)
5244 {
5245 	struct binder_proc *proc;
5246 
5247 	int defer;
5248 
5249 	do {
5250 		mutex_lock(&binder_deferred_lock);
5251 		if (!hlist_empty(&binder_deferred_list)) {
5252 			proc = hlist_entry(binder_deferred_list.first,
5253 					struct binder_proc, deferred_work_node);
5254 			hlist_del_init(&proc->deferred_work_node);
5255 			defer = proc->deferred_work;
5256 			proc->deferred_work = 0;
5257 		} else {
5258 			proc = NULL;
5259 			defer = 0;
5260 		}
5261 		mutex_unlock(&binder_deferred_lock);
5262 
5263 		if (defer & BINDER_DEFERRED_FLUSH)
5264 			binder_deferred_flush(proc);
5265 
5266 		if (defer & BINDER_DEFERRED_RELEASE)
5267 			binder_deferred_release(proc); /* frees proc */
5268 	} while (proc);
5269 }
5270 static DECLARE_WORK(binder_deferred_work, binder_deferred_func);
5271 
5272 static void
5273 binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer)
5274 {
5275 	mutex_lock(&binder_deferred_lock);
5276 	proc->deferred_work |= defer;
5277 	if (hlist_unhashed(&proc->deferred_work_node)) {
5278 		hlist_add_head(&proc->deferred_work_node,
5279 				&binder_deferred_list);
5280 		schedule_work(&binder_deferred_work);
5281 	}
5282 	mutex_unlock(&binder_deferred_lock);
5283 }
5284 
5285 static void print_binder_transaction_ilocked(struct seq_file *m,
5286 					     struct binder_proc *proc,
5287 					     const char *prefix,
5288 					     struct binder_transaction *t)
5289 {
5290 	struct binder_proc *to_proc;
5291 	struct binder_buffer *buffer = t->buffer;
5292 
5293 	spin_lock(&t->lock);
5294 	to_proc = t->to_proc;
5295 	seq_printf(m,
5296 		   "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d",
5297 		   prefix, t->debug_id, t,
5298 		   t->from ? t->from->proc->pid : 0,
5299 		   t->from ? t->from->pid : 0,
5300 		   to_proc ? to_proc->pid : 0,
5301 		   t->to_thread ? t->to_thread->pid : 0,
5302 		   t->code, t->flags, t->priority, t->need_reply);
5303 	spin_unlock(&t->lock);
5304 
5305 	if (proc != to_proc) {
5306 		/*
5307 		 * Can only safely deref buffer if we are holding the
5308 		 * correct proc inner lock for this node
5309 		 */
5310 		seq_puts(m, "\n");
5311 		return;
5312 	}
5313 
5314 	if (buffer == NULL) {
5315 		seq_puts(m, " buffer free\n");
5316 		return;
5317 	}
5318 	if (buffer->target_node)
5319 		seq_printf(m, " node %d", buffer->target_node->debug_id);
5320 	seq_printf(m, " size %zd:%zd data %pK\n",
5321 		   buffer->data_size, buffer->offsets_size,
5322 		   buffer->data);
5323 }
5324 
5325 static void print_binder_work_ilocked(struct seq_file *m,
5326 				     struct binder_proc *proc,
5327 				     const char *prefix,
5328 				     const char *transaction_prefix,
5329 				     struct binder_work *w)
5330 {
5331 	struct binder_node *node;
5332 	struct binder_transaction *t;
5333 
5334 	switch (w->type) {
5335 	case BINDER_WORK_TRANSACTION:
5336 		t = container_of(w, struct binder_transaction, work);
5337 		print_binder_transaction_ilocked(
5338 				m, proc, transaction_prefix, t);
5339 		break;
5340 	case BINDER_WORK_RETURN_ERROR: {
5341 		struct binder_error *e = container_of(
5342 				w, struct binder_error, work);
5343 
5344 		seq_printf(m, "%stransaction error: %u\n",
5345 			   prefix, e->cmd);
5346 	} break;
5347 	case BINDER_WORK_TRANSACTION_COMPLETE:
5348 		seq_printf(m, "%stransaction complete\n", prefix);
5349 		break;
5350 	case BINDER_WORK_NODE:
5351 		node = container_of(w, struct binder_node, work);
5352 		seq_printf(m, "%snode work %d: u%016llx c%016llx\n",
5353 			   prefix, node->debug_id,
5354 			   (u64)node->ptr, (u64)node->cookie);
5355 		break;
5356 	case BINDER_WORK_DEAD_BINDER:
5357 		seq_printf(m, "%shas dead binder\n", prefix);
5358 		break;
5359 	case BINDER_WORK_DEAD_BINDER_AND_CLEAR:
5360 		seq_printf(m, "%shas cleared dead binder\n", prefix);
5361 		break;
5362 	case BINDER_WORK_CLEAR_DEATH_NOTIFICATION:
5363 		seq_printf(m, "%shas cleared death notification\n", prefix);
5364 		break;
5365 	default:
5366 		seq_printf(m, "%sunknown work: type %d\n", prefix, w->type);
5367 		break;
5368 	}
5369 }
5370 
5371 static void print_binder_thread_ilocked(struct seq_file *m,
5372 					struct binder_thread *thread,
5373 					int print_always)
5374 {
5375 	struct binder_transaction *t;
5376 	struct binder_work *w;
5377 	size_t start_pos = m->count;
5378 	size_t header_pos;
5379 
5380 	seq_printf(m, "  thread %d: l %02x need_return %d tr %d\n",
5381 			thread->pid, thread->looper,
5382 			thread->looper_need_return,
5383 			atomic_read(&thread->tmp_ref));
5384 	header_pos = m->count;
5385 	t = thread->transaction_stack;
5386 	while (t) {
5387 		if (t->from == thread) {
5388 			print_binder_transaction_ilocked(m, thread->proc,
5389 					"    outgoing transaction", t);
5390 			t = t->from_parent;
5391 		} else if (t->to_thread == thread) {
5392 			print_binder_transaction_ilocked(m, thread->proc,
5393 						 "    incoming transaction", t);
5394 			t = t->to_parent;
5395 		} else {
5396 			print_binder_transaction_ilocked(m, thread->proc,
5397 					"    bad transaction", t);
5398 			t = NULL;
5399 		}
5400 	}
5401 	list_for_each_entry(w, &thread->todo, entry) {
5402 		print_binder_work_ilocked(m, thread->proc, "    ",
5403 					  "    pending transaction", w);
5404 	}
5405 	if (!print_always && m->count == header_pos)
5406 		m->count = start_pos;
5407 }
5408 
5409 static void print_binder_node_nilocked(struct seq_file *m,
5410 				       struct binder_node *node)
5411 {
5412 	struct binder_ref *ref;
5413 	struct binder_work *w;
5414 	int count;
5415 
5416 	count = 0;
5417 	hlist_for_each_entry(ref, &node->refs, node_entry)
5418 		count++;
5419 
5420 	seq_printf(m, "  node %d: u%016llx c%016llx hs %d hw %d ls %d lw %d is %d iw %d tr %d",
5421 		   node->debug_id, (u64)node->ptr, (u64)node->cookie,
5422 		   node->has_strong_ref, node->has_weak_ref,
5423 		   node->local_strong_refs, node->local_weak_refs,
5424 		   node->internal_strong_refs, count, node->tmp_refs);
5425 	if (count) {
5426 		seq_puts(m, " proc");
5427 		hlist_for_each_entry(ref, &node->refs, node_entry)
5428 			seq_printf(m, " %d", ref->proc->pid);
5429 	}
5430 	seq_puts(m, "\n");
5431 	if (node->proc) {
5432 		list_for_each_entry(w, &node->async_todo, entry)
5433 			print_binder_work_ilocked(m, node->proc, "    ",
5434 					  "    pending async transaction", w);
5435 	}
5436 }
5437 
5438 static void print_binder_ref_olocked(struct seq_file *m,
5439 				     struct binder_ref *ref)
5440 {
5441 	binder_node_lock(ref->node);
5442 	seq_printf(m, "  ref %d: desc %d %snode %d s %d w %d d %pK\n",
5443 		   ref->data.debug_id, ref->data.desc,
5444 		   ref->node->proc ? "" : "dead ",
5445 		   ref->node->debug_id, ref->data.strong,
5446 		   ref->data.weak, ref->death);
5447 	binder_node_unlock(ref->node);
5448 }
5449 
5450 static void print_binder_proc(struct seq_file *m,
5451 			      struct binder_proc *proc, int print_all)
5452 {
5453 	struct binder_work *w;
5454 	struct rb_node *n;
5455 	size_t start_pos = m->count;
5456 	size_t header_pos;
5457 	struct binder_node *last_node = NULL;
5458 
5459 	seq_printf(m, "proc %d\n", proc->pid);
5460 	seq_printf(m, "context %s\n", proc->context->name);
5461 	header_pos = m->count;
5462 
5463 	binder_inner_proc_lock(proc);
5464 	for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n))
5465 		print_binder_thread_ilocked(m, rb_entry(n, struct binder_thread,
5466 						rb_node), print_all);
5467 
5468 	for (n = rb_first(&proc->nodes); n != NULL; n = rb_next(n)) {
5469 		struct binder_node *node = rb_entry(n, struct binder_node,
5470 						    rb_node);
5471 		if (!print_all && !node->has_async_transaction)
5472 			continue;
5473 
5474 		/*
5475 		 * take a temporary reference on the node so it
5476 		 * survives and isn't removed from the tree
5477 		 * while we print it.
5478 		 */
5479 		binder_inc_node_tmpref_ilocked(node);
5480 		/* Need to drop inner lock to take node lock */
5481 		binder_inner_proc_unlock(proc);
5482 		if (last_node)
5483 			binder_put_node(last_node);
5484 		binder_node_inner_lock(node);
5485 		print_binder_node_nilocked(m, node);
5486 		binder_node_inner_unlock(node);
5487 		last_node = node;
5488 		binder_inner_proc_lock(proc);
5489 	}
5490 	binder_inner_proc_unlock(proc);
5491 	if (last_node)
5492 		binder_put_node(last_node);
5493 
5494 	if (print_all) {
5495 		binder_proc_lock(proc);
5496 		for (n = rb_first(&proc->refs_by_desc);
5497 		     n != NULL;
5498 		     n = rb_next(n))
5499 			print_binder_ref_olocked(m, rb_entry(n,
5500 							    struct binder_ref,
5501 							    rb_node_desc));
5502 		binder_proc_unlock(proc);
5503 	}
5504 	binder_alloc_print_allocated(m, &proc->alloc);
5505 	binder_inner_proc_lock(proc);
5506 	list_for_each_entry(w, &proc->todo, entry)
5507 		print_binder_work_ilocked(m, proc, "  ",
5508 					  "  pending transaction", w);
5509 	list_for_each_entry(w, &proc->delivered_death, entry) {
5510 		seq_puts(m, "  has delivered dead binder\n");
5511 		break;
5512 	}
5513 	binder_inner_proc_unlock(proc);
5514 	if (!print_all && m->count == header_pos)
5515 		m->count = start_pos;
5516 }
5517 
5518 static const char * const binder_return_strings[] = {
5519 	"BR_ERROR",
5520 	"BR_OK",
5521 	"BR_TRANSACTION",
5522 	"BR_REPLY",
5523 	"BR_ACQUIRE_RESULT",
5524 	"BR_DEAD_REPLY",
5525 	"BR_TRANSACTION_COMPLETE",
5526 	"BR_INCREFS",
5527 	"BR_ACQUIRE",
5528 	"BR_RELEASE",
5529 	"BR_DECREFS",
5530 	"BR_ATTEMPT_ACQUIRE",
5531 	"BR_NOOP",
5532 	"BR_SPAWN_LOOPER",
5533 	"BR_FINISHED",
5534 	"BR_DEAD_BINDER",
5535 	"BR_CLEAR_DEATH_NOTIFICATION_DONE",
5536 	"BR_FAILED_REPLY"
5537 };
5538 
5539 static const char * const binder_command_strings[] = {
5540 	"BC_TRANSACTION",
5541 	"BC_REPLY",
5542 	"BC_ACQUIRE_RESULT",
5543 	"BC_FREE_BUFFER",
5544 	"BC_INCREFS",
5545 	"BC_ACQUIRE",
5546 	"BC_RELEASE",
5547 	"BC_DECREFS",
5548 	"BC_INCREFS_DONE",
5549 	"BC_ACQUIRE_DONE",
5550 	"BC_ATTEMPT_ACQUIRE",
5551 	"BC_REGISTER_LOOPER",
5552 	"BC_ENTER_LOOPER",
5553 	"BC_EXIT_LOOPER",
5554 	"BC_REQUEST_DEATH_NOTIFICATION",
5555 	"BC_CLEAR_DEATH_NOTIFICATION",
5556 	"BC_DEAD_BINDER_DONE",
5557 	"BC_TRANSACTION_SG",
5558 	"BC_REPLY_SG",
5559 };
5560 
5561 static const char * const binder_objstat_strings[] = {
5562 	"proc",
5563 	"thread",
5564 	"node",
5565 	"ref",
5566 	"death",
5567 	"transaction",
5568 	"transaction_complete"
5569 };
5570 
5571 static void print_binder_stats(struct seq_file *m, const char *prefix,
5572 			       struct binder_stats *stats)
5573 {
5574 	int i;
5575 
5576 	BUILD_BUG_ON(ARRAY_SIZE(stats->bc) !=
5577 		     ARRAY_SIZE(binder_command_strings));
5578 	for (i = 0; i < ARRAY_SIZE(stats->bc); i++) {
5579 		int temp = atomic_read(&stats->bc[i]);
5580 
5581 		if (temp)
5582 			seq_printf(m, "%s%s: %d\n", prefix,
5583 				   binder_command_strings[i], temp);
5584 	}
5585 
5586 	BUILD_BUG_ON(ARRAY_SIZE(stats->br) !=
5587 		     ARRAY_SIZE(binder_return_strings));
5588 	for (i = 0; i < ARRAY_SIZE(stats->br); i++) {
5589 		int temp = atomic_read(&stats->br[i]);
5590 
5591 		if (temp)
5592 			seq_printf(m, "%s%s: %d\n", prefix,
5593 				   binder_return_strings[i], temp);
5594 	}
5595 
5596 	BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) !=
5597 		     ARRAY_SIZE(binder_objstat_strings));
5598 	BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) !=
5599 		     ARRAY_SIZE(stats->obj_deleted));
5600 	for (i = 0; i < ARRAY_SIZE(stats->obj_created); i++) {
5601 		int created = atomic_read(&stats->obj_created[i]);
5602 		int deleted = atomic_read(&stats->obj_deleted[i]);
5603 
5604 		if (created || deleted)
5605 			seq_printf(m, "%s%s: active %d total %d\n",
5606 				prefix,
5607 				binder_objstat_strings[i],
5608 				created - deleted,
5609 				created);
5610 	}
5611 }
5612 
5613 static void print_binder_proc_stats(struct seq_file *m,
5614 				    struct binder_proc *proc)
5615 {
5616 	struct binder_work *w;
5617 	struct binder_thread *thread;
5618 	struct rb_node *n;
5619 	int count, strong, weak, ready_threads;
5620 	size_t free_async_space =
5621 		binder_alloc_get_free_async_space(&proc->alloc);
5622 
5623 	seq_printf(m, "proc %d\n", proc->pid);
5624 	seq_printf(m, "context %s\n", proc->context->name);
5625 	count = 0;
5626 	ready_threads = 0;
5627 	binder_inner_proc_lock(proc);
5628 	for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n))
5629 		count++;
5630 
5631 	list_for_each_entry(thread, &proc->waiting_threads, waiting_thread_node)
5632 		ready_threads++;
5633 
5634 	seq_printf(m, "  threads: %d\n", count);
5635 	seq_printf(m, "  requested threads: %d+%d/%d\n"
5636 			"  ready threads %d\n"
5637 			"  free async space %zd\n", proc->requested_threads,
5638 			proc->requested_threads_started, proc->max_threads,
5639 			ready_threads,
5640 			free_async_space);
5641 	count = 0;
5642 	for (n = rb_first(&proc->nodes); n != NULL; n = rb_next(n))
5643 		count++;
5644 	binder_inner_proc_unlock(proc);
5645 	seq_printf(m, "  nodes: %d\n", count);
5646 	count = 0;
5647 	strong = 0;
5648 	weak = 0;
5649 	binder_proc_lock(proc);
5650 	for (n = rb_first(&proc->refs_by_desc); n != NULL; n = rb_next(n)) {
5651 		struct binder_ref *ref = rb_entry(n, struct binder_ref,
5652 						  rb_node_desc);
5653 		count++;
5654 		strong += ref->data.strong;
5655 		weak += ref->data.weak;
5656 	}
5657 	binder_proc_unlock(proc);
5658 	seq_printf(m, "  refs: %d s %d w %d\n", count, strong, weak);
5659 
5660 	count = binder_alloc_get_allocated_count(&proc->alloc);
5661 	seq_printf(m, "  buffers: %d\n", count);
5662 
5663 	binder_alloc_print_pages(m, &proc->alloc);
5664 
5665 	count = 0;
5666 	binder_inner_proc_lock(proc);
5667 	list_for_each_entry(w, &proc->todo, entry) {
5668 		if (w->type == BINDER_WORK_TRANSACTION)
5669 			count++;
5670 	}
5671 	binder_inner_proc_unlock(proc);
5672 	seq_printf(m, "  pending transactions: %d\n", count);
5673 
5674 	print_binder_stats(m, "  ", &proc->stats);
5675 }
5676 
5677 
5678 static int state_show(struct seq_file *m, void *unused)
5679 {
5680 	struct binder_proc *proc;
5681 	struct binder_node *node;
5682 	struct binder_node *last_node = NULL;
5683 
5684 	seq_puts(m, "binder state:\n");
5685 
5686 	spin_lock(&binder_dead_nodes_lock);
5687 	if (!hlist_empty(&binder_dead_nodes))
5688 		seq_puts(m, "dead nodes:\n");
5689 	hlist_for_each_entry(node, &binder_dead_nodes, dead_node) {
5690 		/*
5691 		 * take a temporary reference on the node so it
5692 		 * survives and isn't removed from the list
5693 		 * while we print it.
5694 		 */
5695 		node->tmp_refs++;
5696 		spin_unlock(&binder_dead_nodes_lock);
5697 		if (last_node)
5698 			binder_put_node(last_node);
5699 		binder_node_lock(node);
5700 		print_binder_node_nilocked(m, node);
5701 		binder_node_unlock(node);
5702 		last_node = node;
5703 		spin_lock(&binder_dead_nodes_lock);
5704 	}
5705 	spin_unlock(&binder_dead_nodes_lock);
5706 	if (last_node)
5707 		binder_put_node(last_node);
5708 
5709 	mutex_lock(&binder_procs_lock);
5710 	hlist_for_each_entry(proc, &binder_procs, proc_node)
5711 		print_binder_proc(m, proc, 1);
5712 	mutex_unlock(&binder_procs_lock);
5713 
5714 	return 0;
5715 }
5716 
5717 static int stats_show(struct seq_file *m, void *unused)
5718 {
5719 	struct binder_proc *proc;
5720 
5721 	seq_puts(m, "binder stats:\n");
5722 
5723 	print_binder_stats(m, "", &binder_stats);
5724 
5725 	mutex_lock(&binder_procs_lock);
5726 	hlist_for_each_entry(proc, &binder_procs, proc_node)
5727 		print_binder_proc_stats(m, proc);
5728 	mutex_unlock(&binder_procs_lock);
5729 
5730 	return 0;
5731 }
5732 
5733 static int transactions_show(struct seq_file *m, void *unused)
5734 {
5735 	struct binder_proc *proc;
5736 
5737 	seq_puts(m, "binder transactions:\n");
5738 	mutex_lock(&binder_procs_lock);
5739 	hlist_for_each_entry(proc, &binder_procs, proc_node)
5740 		print_binder_proc(m, proc, 0);
5741 	mutex_unlock(&binder_procs_lock);
5742 
5743 	return 0;
5744 }
5745 
5746 static int proc_show(struct seq_file *m, void *unused)
5747 {
5748 	struct binder_proc *itr;
5749 	int pid = (unsigned long)m->private;
5750 
5751 	mutex_lock(&binder_procs_lock);
5752 	hlist_for_each_entry(itr, &binder_procs, proc_node) {
5753 		if (itr->pid == pid) {
5754 			seq_puts(m, "binder proc state:\n");
5755 			print_binder_proc(m, itr, 1);
5756 		}
5757 	}
5758 	mutex_unlock(&binder_procs_lock);
5759 
5760 	return 0;
5761 }
5762 
5763 static void print_binder_transaction_log_entry(struct seq_file *m,
5764 					struct binder_transaction_log_entry *e)
5765 {
5766 	int debug_id = READ_ONCE(e->debug_id_done);
5767 	/*
5768 	 * read barrier to guarantee debug_id_done read before
5769 	 * we print the log values
5770 	 */
5771 	smp_rmb();
5772 	seq_printf(m,
5773 		   "%d: %s from %d:%d to %d:%d context %s node %d handle %d size %d:%d ret %d/%d l=%d",
5774 		   e->debug_id, (e->call_type == 2) ? "reply" :
5775 		   ((e->call_type == 1) ? "async" : "call "), e->from_proc,
5776 		   e->from_thread, e->to_proc, e->to_thread, e->context_name,
5777 		   e->to_node, e->target_handle, e->data_size, e->offsets_size,
5778 		   e->return_error, e->return_error_param,
5779 		   e->return_error_line);
5780 	/*
5781 	 * read-barrier to guarantee read of debug_id_done after
5782 	 * done printing the fields of the entry
5783 	 */
5784 	smp_rmb();
5785 	seq_printf(m, debug_id && debug_id == READ_ONCE(e->debug_id_done) ?
5786 			"\n" : " (incomplete)\n");
5787 }
5788 
5789 static int transaction_log_show(struct seq_file *m, void *unused)
5790 {
5791 	struct binder_transaction_log *log = m->private;
5792 	unsigned int log_cur = atomic_read(&log->cur);
5793 	unsigned int count;
5794 	unsigned int cur;
5795 	int i;
5796 
5797 	count = log_cur + 1;
5798 	cur = count < ARRAY_SIZE(log->entry) && !log->full ?
5799 		0 : count % ARRAY_SIZE(log->entry);
5800 	if (count > ARRAY_SIZE(log->entry) || log->full)
5801 		count = ARRAY_SIZE(log->entry);
5802 	for (i = 0; i < count; i++) {
5803 		unsigned int index = cur++ % ARRAY_SIZE(log->entry);
5804 
5805 		print_binder_transaction_log_entry(m, &log->entry[index]);
5806 	}
5807 	return 0;
5808 }
5809 
5810 const struct file_operations binder_fops = {
5811 	.owner = THIS_MODULE,
5812 	.poll = binder_poll,
5813 	.unlocked_ioctl = binder_ioctl,
5814 	.compat_ioctl = binder_ioctl,
5815 	.mmap = binder_mmap,
5816 	.open = binder_open,
5817 	.flush = binder_flush,
5818 	.release = binder_release,
5819 };
5820 
5821 DEFINE_SHOW_ATTRIBUTE(state);
5822 DEFINE_SHOW_ATTRIBUTE(stats);
5823 DEFINE_SHOW_ATTRIBUTE(transactions);
5824 DEFINE_SHOW_ATTRIBUTE(transaction_log);
5825 
5826 static int __init init_binder_device(const char *name)
5827 {
5828 	int ret;
5829 	struct binder_device *binder_device;
5830 
5831 	binder_device = kzalloc(sizeof(*binder_device), GFP_KERNEL);
5832 	if (!binder_device)
5833 		return -ENOMEM;
5834 
5835 	binder_device->miscdev.fops = &binder_fops;
5836 	binder_device->miscdev.minor = MISC_DYNAMIC_MINOR;
5837 	binder_device->miscdev.name = name;
5838 
5839 	binder_device->context.binder_context_mgr_uid = INVALID_UID;
5840 	binder_device->context.name = name;
5841 	mutex_init(&binder_device->context.context_mgr_node_lock);
5842 
5843 	ret = misc_register(&binder_device->miscdev);
5844 	if (ret < 0) {
5845 		kfree(binder_device);
5846 		return ret;
5847 	}
5848 
5849 	hlist_add_head(&binder_device->hlist, &binder_devices);
5850 
5851 	return ret;
5852 }
5853 
5854 static int __init binder_init(void)
5855 {
5856 	int ret;
5857 	char *device_name, *device_names, *device_tmp;
5858 	struct binder_device *device;
5859 	struct hlist_node *tmp;
5860 
5861 	ret = binder_alloc_shrinker_init();
5862 	if (ret)
5863 		return ret;
5864 
5865 	atomic_set(&binder_transaction_log.cur, ~0U);
5866 	atomic_set(&binder_transaction_log_failed.cur, ~0U);
5867 
5868 	binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
5869 	if (binder_debugfs_dir_entry_root)
5870 		binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
5871 						 binder_debugfs_dir_entry_root);
5872 
5873 	if (binder_debugfs_dir_entry_root) {
5874 		debugfs_create_file("state",
5875 				    0444,
5876 				    binder_debugfs_dir_entry_root,
5877 				    NULL,
5878 				    &state_fops);
5879 		debugfs_create_file("stats",
5880 				    0444,
5881 				    binder_debugfs_dir_entry_root,
5882 				    NULL,
5883 				    &stats_fops);
5884 		debugfs_create_file("transactions",
5885 				    0444,
5886 				    binder_debugfs_dir_entry_root,
5887 				    NULL,
5888 				    &transactions_fops);
5889 		debugfs_create_file("transaction_log",
5890 				    0444,
5891 				    binder_debugfs_dir_entry_root,
5892 				    &binder_transaction_log,
5893 				    &transaction_log_fops);
5894 		debugfs_create_file("failed_transaction_log",
5895 				    0444,
5896 				    binder_debugfs_dir_entry_root,
5897 				    &binder_transaction_log_failed,
5898 				    &transaction_log_fops);
5899 	}
5900 
5901 	/*
5902 	 * Copy the module_parameter string, because we don't want to
5903 	 * tokenize it in-place.
5904 	 */
5905 	device_names = kstrdup(binder_devices_param, GFP_KERNEL);
5906 	if (!device_names) {
5907 		ret = -ENOMEM;
5908 		goto err_alloc_device_names_failed;
5909 	}
5910 
5911 	device_tmp = device_names;
5912 	while ((device_name = strsep(&device_tmp, ","))) {
5913 		ret = init_binder_device(device_name);
5914 		if (ret)
5915 			goto err_init_binder_device_failed;
5916 	}
5917 
5918 	return ret;
5919 
5920 err_init_binder_device_failed:
5921 	hlist_for_each_entry_safe(device, tmp, &binder_devices, hlist) {
5922 		misc_deregister(&device->miscdev);
5923 		hlist_del(&device->hlist);
5924 		kfree(device);
5925 	}
5926 
5927 	kfree(device_names);
5928 
5929 err_alloc_device_names_failed:
5930 	debugfs_remove_recursive(binder_debugfs_dir_entry_root);
5931 
5932 	return ret;
5933 }
5934 
5935 device_initcall(binder_init);
5936 
5937 #define CREATE_TRACE_POINTS
5938 #include "binder_trace.h"
5939 
5940 MODULE_LICENSE("GPL v2");
5941