summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Park <youngeun.park@arm.com>2023-08-16 09:01:21 +0100
committerJoerg Wagner <jorwag@google.com>2023-10-16 08:03:20 +0000
commit341562a4de3c72d7b9f732b079cbb6115a774ad3 (patch)
treed8df3aa15593fe29df15e8af4054c7f93de3a17f
parent66e3cfcb83ec915197447615af85351a8aed4679 (diff)
downloadgpu-android-gs-shusky-5.15-android14-qpr1.tar.gz
If a slot number parsed from trace data exceeds the number of supported CSG slots, the trace data must be discarded. Otherwise the access to the invalid memory address could happen. Bug: 304341806 Provenance: https://code.ipdelivery.arm.com/c/GPU/mali-ddk/+/6057 Signed-off-by: Jörg Wagner <jorwag@google.com> Change-Id: I8e702e7487f2bea3618f2fe8ad696a1b546f10f2
-rw-r--r--mali_kbase/csf/mali_kbase_csf_scheduler.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/mali_kbase/csf/mali_kbase_csf_scheduler.c b/mali_kbase/csf/mali_kbase_csf_scheduler.c
index ccac7c8..8450012 100644
--- a/mali_kbase/csf/mali_kbase_csf_scheduler.c
+++ b/mali_kbase/csf/mali_kbase_csf_scheduler.c
@@ -335,11 +335,17 @@ static bool gpu_metrics_read_event(struct kbase_device *kbdev, struct kbase_cont
if (kbase_csf_firmware_trace_buffer_read_data(tb, (u8 *)&e, GPU_METRICS_EVENT_SIZE) ==
GPU_METRICS_EVENT_SIZE) {
const u8 slot = GPU_METRICS_CSG_GET(e.csg_slot_act);
- struct kbase_queue_group *group =
- kbdev->csf.scheduler.csg_slots[slot].resident_group;
+ struct kbase_queue_group *group;
+
+ if (WARN_ON_ONCE(slot >= kbdev->csf.global_iface.group_num)) {
+ dev_err(kbdev->dev, "invalid CSG slot (%u)", slot);
+ return false;
+ }
+
+ group = kbdev->csf.scheduler.csg_slots[slot].resident_group;
if (unlikely(!group)) {
- dev_err(kbdev->dev, "failed to find CSG group from CSG slot(%u)", slot);
+ dev_err(kbdev->dev, "failed to find CSG group from CSG slot (%u)", slot);
return false;
}