From 469afaf8d52624e980c7ed8748ad66f9e3c33b78 Mon Sep 17 00:00:00 2001 From: Seung-Woo Kim Date: Thu, 2 Jan 2025 11:49:32 +0900 Subject: [PATCH] pass: Check supported modules with macro instead of array Supported modules in array causes global-buffer-overflow. Fix to check supported modules with macro. Change-Id: I4cc710a60471a9d4f8903c52c8f0a1bf9b1bba2a Signed-off-by: Seung-Woo Kim --- src/pass/pass.c | 83 ++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/src/pass/pass.c b/src/pass/pass.c index aa4ca04..4f7b53d 100644 --- a/src/pass/pass.c +++ b/src/pass/pass.c @@ -48,41 +48,39 @@ #define PASS_JSON_PATH "/hal/etc/pass/pass.json" -/** - * @brief Specify the supported modules according to the type of h/w - * resource. - */ -static uint64 supported_module[] = { - [PASS_RESOURCE_UNKNOWN] = 0, - [PASS_RESOURCE_CPU_ID] = PASS_MODULE_PARSER - | PASS_MODULE_RESCON - | PASS_MODULE_RESMON - | PASS_MODULE_PMQOS - | PASS_MODULE_CPUHP - | PASS_MODULE_THERMAL, - - [PASS_RESOURCE_BUS_ID] = PASS_MODULE_PARSER - | PASS_MODULE_RESCON - | PASS_MODULE_RESMON - | PASS_MODULE_PMQOS, - - [PASS_RESOURCE_GPU_ID] = PASS_MODULE_PARSER - | PASS_MODULE_RESCON - | PASS_MODULE_RESMON - | PASS_MODULE_PMQOS - | PASS_MODULE_THERMAL, - - [PASS_RESOURCE_MEMORY_ID] = PASS_MODULE_PARSER - | PASS_MODULE_RESCON - | PASS_MODULE_RESMON - | PASS_MODULE_PMQOS, - - [PASS_RESOURCE_BATTERY_ID] = PASS_MODULE_PARSER - | PASS_MODULE_RESCON - | PASS_MODULE_RESMON - | PASS_MODULE_PMQOS - | PASS_MODULE_THERMAL, -}; +#define PASS_RESOURCE_CPU_SUPPORTED_MODULES \ + ( PASS_MODULE_PARSER \ + | PASS_MODULE_RESCON \ + | PASS_MODULE_RESMON \ + | PASS_MODULE_PMQOS \ + | PASS_MODULE_CPUHP \ + | PASS_MODULE_THERMAL ) + +#define PASS_RESOURCE_BUS_SUPPORTED_MODULES \ + ( PASS_MODULE_PARSER \ + | PASS_MODULE_RESCON \ + | PASS_MODULE_RESMON \ + | PASS_MODULE_PMQOS ) + +#define PASS_RESOURCE_GPU_SUPPORTED_MODULES \ + ( PASS_MODULE_PARSER \ + | PASS_MODULE_RESCON \ + | PASS_MODULE_RESMON \ + | PASS_MODULE_PMQOS \ + | PASS_MODULE_THERMAL ) + +#define PASS_RESOURCE_MEMORY_SUPPORTED_MODULES \ + ( PASS_MODULE_PARSER \ + | PASS_MODULE_RESCON \ + | PASS_MODULE_RESMON \ + | PASS_MODULE_PMQOS ) + +#define PASS_RESOURCE_BATTERY_SUPPORTED_MODULES \ + ( PASS_MODULE_PARSER \ + | PASS_MODULE_RESCON \ + | PASS_MODULE_RESMON \ + | PASS_MODULE_PMQOS \ + | PASS_MODULE_THERMAL ) extern int pass_cpuhp_init(struct pass_resource *res); extern int pass_cpuhp_exit(struct pass_resource *res); @@ -192,7 +190,20 @@ static struct gdbus_signal_info g_gdbus_signal_infos[] = { static bool is_supported_module(struct pass_resource *res, enum pass_module_type type) { - return !!(supported_module[res->config_data.res_type] & type); + switch (res->config_data.res_type) { + case PASS_RESOURCE_CPU_ID: + return !!(PASS_RESOURCE_CPU_SUPPORTED_MODULES & type); + case PASS_RESOURCE_BUS_ID: + return !!(PASS_RESOURCE_BUS_SUPPORTED_MODULES & type); + case PASS_RESOURCE_GPU_ID: + return !!(PASS_RESOURCE_GPU_SUPPORTED_MODULES & type); + case PASS_RESOURCE_MEMORY_ID: + return !!(PASS_RESOURCE_MEMORY_SUPPORTED_MODULES & type); + case PASS_RESOURCE_BATTERY_ID: + return !!(PASS_RESOURCE_BATTERY_SUPPORTED_MODULES & type); + default: + return false; + } } /** -- 2.34.1