diff options
author | Spade Lee <spadelee@google.com> | 2024-02-08 03:00:55 +0000 |
---|---|---|
committer | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2024-02-27 17:55:45 +0000 |
commit | 3e11fbce6336e9ffc25ef864ee19b72bb3517e90 (patch) | |
tree | fc3d1988d68f9f92196b5d3dc4777db328cff514 | |
parent | bd396302ff65cac3f4e9b2dd6c3483b135e7bcf9 (diff) | |
download | gs-android-gs-bluejay-5.10-android14-qpr3-beta.tar.gz |
gvotable: get result lock before iterating the entriesandroid-u-qpr3-beta-2.1_r0.7android-u-qpr3-beta-2.1_r0.5android-u-qpr3-beta-2.1_r0.3android-u-qpr3-beta-2.1_r0.2android-u-qpr3-beta-2.1_r0.1android-gs-tangorpro-5.10-android14-qpr3-betaandroid-gs-raviole-5.10-android14-qpr3-betaandroid-gs-lynx-5.10-android14-qpr3-betaandroid-gs-felix-5.10-android14-qpr3-betaandroid-gs-bluejay-5.10-android14-qpr3-beta
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.c | 5 |
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); |