pass: Check supported modules with macro instead of array 01/317701/1 accepted/tizen/9.0/unified/20250107.160057
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Thu, 2 Jan 2025 02:49:32 +0000 (11:49 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 7 Jan 2025 02:22:55 +0000 (02:22 +0000)
Supported modules in array causes global-buffer-overflow.
Fix to check supported modules with macro.

Change-Id: I4cc710a60471a9d4f8903c52c8f0a1bf9b1bba2a
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
(cherry picked from commit 469afaf8d52624e980c7ed8748ad66f9e3c33b78)

src/pass/pass.c

index aa4ca04c568a7307f34bd325016c26ced1763d31..4f7b53dbe9aaadba388820e4abdc3895708daeb4 100644 (file)
 
 #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;
+       }
 }
 
 /**