summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpade Lee <spadelee@google.com>2024-02-08 03:00:55 +0000
committerTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2024-02-27 17:55:45 +0000
commit3e11fbce6336e9ffc25ef864ee19b72bb3517e90 (patch)
treefc3d1988d68f9f92196b5d3dc4777db328cff514
parentbd396302ff65cac3f4e9b2dd6c3483b135e7bcf9 (diff)
downloadgs-android-gs-bluejay-5.10-android14-qpr3-beta.tar.gz
gvotable_election_for_each() tries to get all enabled votes as input to callback, but votes might be deleted(null pointer) during iterating. Should get result lock to avoid it. Bug: 322656989 Test: not reproduce kernel panic for hours. Change-Id: I58b660c1de8210aa804230a9e53f57ea7f4aeca7 Signed-off-by: Spade Lee <spadelee@google.com>
-rw-r--r--drivers/misc/gvotable.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/misc/gvotable.c b/drivers/misc/gvotable.c
index 2f245965a81e..947393b174fc 100644
--- a/drivers/misc/gvotable.c
+++ b/drivers/misc/gvotable.c
@@ -422,7 +422,8 @@ int gvotable_election_for_each(struct gvotable_election *el,
return ret;
}
- /* TODO: LOCK list? */
+ gvotable_lock_result(el);
+
list_for_each_entry(ballot, &el->votes, list) {
if (!ballot->enabled)
continue;
@@ -433,6 +434,8 @@ int gvotable_election_for_each(struct gvotable_election *el,
break;
}
+ gvotable_unlock_result(el);
+
return ret;
}
EXPORT_SYMBOL_GPL(gvotable_election_for_each);