diff options
| author | Akhil P Oommen <akhilpo@codeaurora.org> | 2017-06-07 16:13:37 +0530 |
|---|---|---|
| committer | Akhil P Oommen <akhilpo@codeaurora.org> | 2017-07-10 15:28:49 +0530 |
| commit | 54812d339b9a62be48d12ee5136c34882e8c2e8c (patch) | |
| tree | a43f54c1e820ec870e6af12756f5fe4e9a1ce5cd | |
| parent | ccde34ffb3f4e58f6885a6489c7e2eaeb7eca5e9 (diff) | |
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: Akhil P Oommen <akhilpo@codeaurora.org>
| -rw-r--r-- | drivers/staging/android/sync_debug.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c index aaa96c3df45b..5fbd3766b981 100644 --- a/drivers/staging/android/sync_debug.c +++ b/drivers/staging/android/sync_debug.c @@ -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", |
