diff options
| -rw-r--r-- | drivers/staging/android/binder.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 91a96292e6b..b0127a3290d 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c | |||
| @@ -1343,6 +1343,17 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread, | |||
| 1343 | if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { | 1343 | if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { |
| 1344 | struct binder_transaction *tmp; | 1344 | struct binder_transaction *tmp; |
| 1345 | tmp = thread->transaction_stack; | 1345 | tmp = thread->transaction_stack; |
| 1346 | if (tmp->to_thread != thread) { | ||
| 1347 | binder_user_error("binder: %d:%d got new " | ||
| 1348 | "transaction with bad transaction stack" | ||
| 1349 | ", transaction %d has target %d:%d\n", | ||
| 1350 | proc->pid, thread->pid, tmp->debug_id, | ||
| 1351 | tmp->to_proc ? tmp->to_proc->pid : 0, | ||
| 1352 | tmp->to_thread ? | ||
| 1353 | tmp->to_thread->pid : 0); | ||
| 1354 | return_error = BR_FAILED_REPLY; | ||
| 1355 | goto err_bad_call_stack; | ||
| 1356 | } | ||
| 1346 | while (tmp) { | 1357 | while (tmp) { |
| 1347 | if (tmp->from && tmp->from->proc == target_proc) | 1358 | if (tmp->from && tmp->from->proc == target_proc) |
| 1348 | target_thread = tmp->from; | 1359 | target_thread = tmp->from; |
