diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-12-03 07:56:15 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-12-03 07:56:15 +0100 |
commit | 22fee7d3851314f8384c9d44233bb86a2862ed64 (patch) | |
tree | f080b7f8b8f4e24e3e349a4c45ce9463718716f8 /drivers/android/binder.c | |
parent | b5570ca7c475bffbc5fc2e9af994dc6d249eb13e (diff) | |
parent | 2595646791c319cadfdbf271563aac97d0843dc7 (diff) | |
download | talos-obmc-linux-22fee7d3851314f8384c9d44233bb86a2862ed64.tar.gz talos-obmc-linux-22fee7d3851314f8384c9d44233bb86a2862ed64.zip |
Merge 4.20-rc5 into char-misc-next
We need the fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/android/binder.c')
-rw-r--r-- | drivers/android/binder.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 54fdd99df9be..9f2059d24ae2 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3004,7 +3004,6 @@ static void binder_transaction(struct binder_proc *proc, t->buffer = NULL; goto err_binder_alloc_buf_failed; } - t->buffer->allow_user_free = 0; t->buffer->debug_id = t->debug_id; t->buffer->transaction = t; t->buffer->target_node = target_node; @@ -3540,14 +3539,18 @@ static int binder_thread_write(struct binder_proc *proc, buffer = binder_alloc_prepare_to_free(&proc->alloc, data_ptr); - if (buffer == NULL) { - binder_user_error("%d:%d BC_FREE_BUFFER u%016llx no match\n", - proc->pid, thread->pid, (u64)data_ptr); - break; - } - if (!buffer->allow_user_free) { - binder_user_error("%d:%d BC_FREE_BUFFER u%016llx matched unreturned buffer\n", - proc->pid, thread->pid, (u64)data_ptr); + if (IS_ERR_OR_NULL(buffer)) { + if (PTR_ERR(buffer) == -EPERM) { + binder_user_error( + "%d:%d BC_FREE_BUFFER u%016llx matched unreturned or currently freeing buffer\n", + proc->pid, thread->pid, + (u64)data_ptr); + } else { + binder_user_error( + "%d:%d BC_FREE_BUFFER u%016llx no match\n", + proc->pid, thread->pid, + (u64)data_ptr); + } break; } binder_debug(BINDER_DEBUG_FREE_BUFFER, |