mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Staging: binder: Prevent the wrong thread from adding a transaction to the stack.
If a thread is part of a transaction stack, it is only allowed to make another call if it was the target of the top transaction on the stack. Signed-off-by: Arve Hjønnevåg <arve@android.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
7af7467efa
commit
0cf24a7dc9
@ -1343,6 +1343,17 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread,
|
|||||||
if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) {
|
if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) {
|
||||||
struct binder_transaction *tmp;
|
struct binder_transaction *tmp;
|
||||||
tmp = thread->transaction_stack;
|
tmp = thread->transaction_stack;
|
||||||
|
if (tmp->to_thread != thread) {
|
||||||
|
binder_user_error("binder: %d:%d got new "
|
||||||
|
"transaction with bad transaction stack"
|
||||||
|
", transaction %d has target %d:%d\n",
|
||||||
|
proc->pid, thread->pid, tmp->debug_id,
|
||||||
|
tmp->to_proc ? tmp->to_proc->pid : 0,
|
||||||
|
tmp->to_thread ?
|
||||||
|
tmp->to_thread->pid : 0);
|
||||||
|
return_error = BR_FAILED_REPLY;
|
||||||
|
goto err_bad_call_stack;
|
||||||
|
}
|
||||||
while (tmp) {
|
while (tmp) {
|
||||||
if (tmp->from && tmp->from->proc == target_proc)
|
if (tmp->from && tmp->from->proc == target_proc)
|
||||||
target_thread = tmp->from;
|
target_thread = tmp->from;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user