Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54812d33 authored by Akhil P Oommen's avatar Akhil P Oommen
Browse files

staging: android: sync: fix list corruption in fence struct



Fence lock is not taken in sync_print_fence() while calling
sync_print_pt() which in turn calls fence_is_signaled() to check the
status of each fence before printing. This creates a race condition
that corrupts fence data structure when another thread calls
fence_is_signaled_locked() on the same fence. Since we don't need to
signal the fence while logging, it can be fixed by simply checking fence
flag status directly instead of calling fence_is_signaled_locked().

Change-Id: I1b4732cf3779a5b75a372e11170b438a4deabe67
Signed-off-by: default avatarAkhil P Oommen <akhilpo@codeaurora.org>
parent ccde34ff
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ static void sync_print_pt(struct seq_file *s, struct sync_pt *pt, bool fence)
	int status = 1;
	struct sync_timeline *parent = sync_pt_parent(pt);

	if (fence_is_signaled_locked(&pt->base))
	if (test_bit(FENCE_FLAG_SIGNALED_BIT, &pt->base.flags))
		status = pt->base.status;

	seq_printf(s, "  %s%spt %s",