Skip to content

Commit 2d1746e

Browse files
aleastogregkh
authored andcommitted
binder: Address corner cases in deferred copy and fixup
When handling BINDER_TYPE_FDA object we are pushing a parent fixup with a certain skip_size but no scatter-gather copy object, since the copy is handled standalone. If BINDER_TYPE_FDA is the last children the scatter-gather copy loop will never stop to skip it, thus we are left with an item in the parent fixup list. This will trigger the BUG_ON(). This is reproducible in android when playing a video. We receive a transaction that looks like this: obj[0] BINDER_TYPE_PTR, parent obj[1] BINDER_TYPE_PTR, child obj[2] BINDER_TYPE_PTR, child obj[3] BINDER_TYPE_FDA, child Fixes: 09184ae ("binder: defer copies of pre-patched txn data") Acked-by: Todd Kjos <tkjos@google.com> Cc: stable <stable@kernel.org> Signed-off-by: Alessandro Astone <ales.astone@gmail.com> Link: https://lore.kernel.org/r/20220415120015.52684-2-ales.astone@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 89b3896 commit 2d1746e

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

drivers/android/binder.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2295,6 +2295,7 @@ static int binder_do_deferred_txn_copies(struct binder_alloc *alloc,
22952295
{
22962296
int ret = 0;
22972297
struct binder_sg_copy *sgc, *tmpsgc;
2298+
struct binder_ptr_fixup *tmppf;
22982299
struct binder_ptr_fixup *pf =
22992300
list_first_entry_or_null(pf_head, struct binder_ptr_fixup,
23002301
node);
@@ -2349,7 +2350,11 @@ static int binder_do_deferred_txn_copies(struct binder_alloc *alloc,
23492350
list_del(&sgc->node);
23502351
kfree(sgc);
23512352
}
2352-
BUG_ON(!list_empty(pf_head));
2353+
list_for_each_entry_safe(pf, tmppf, pf_head, node) {
2354+
BUG_ON(pf->skip_size == 0);
2355+
list_del(&pf->node);
2356+
kfree(pf);
2357+
}
23532358
BUG_ON(!list_empty(sgc_head));
23542359

23552360
return ret > 0 ? -EINVAL : ret;

0 commit comments

Comments
 (0)