diff options
author | Andrew Morton <akpm@linux-foundation.org> | 2022-10-16 16:06:53 -0700 |
---|---|---|
committer | Andrew Morton <akpm@linux-foundation.org> | 2022-10-16 16:06:53 -0700 |
commit | 280330fac48280e16454cfa46c368af4812ad79c (patch) | |
tree | 18b9ed796c57e3929e50b9b03f2c6501740b03d6 /drivers/android/binder.c | |
parent | d0d51a97063db4704a5ef6bc978dddab1636a306 (diff) | |
parent | 4fe89d07dcc2804c8b562f6c7896a45643d34b2f (diff) |
Merge branch 'master' into mm-hotfixes-stable
Diffstat (limited to 'drivers/android/binder.c')
-rw-r--r-- | drivers/android/binder.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/android/binder.c b/drivers/android/binder.c index c964d7c8c384..6428f6be69e3 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1385,6 +1385,18 @@ static int binder_inc_ref_for_node(struct binder_proc *proc, } ret = binder_inc_ref_olocked(ref, strong, target_list); *rdata = ref->data; + if (ret && ref == new_ref) { + /* + * Cleanup the failed reference here as the target + * could now be dead and have already released its + * references by now. Calling on the new reference + * with strong=0 and a tmp_refs will not decrement + * the node. The new_ref gets kfree'd below. + */ + binder_cleanup_ref_olocked(new_ref); + ref = NULL; + } + binder_proc_unlock(proc); if (new_ref && ref != new_ref) /* |