summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChanwoo Choi <cw00.choi@samsung.com>2023-03-09 06:12:59 +0900
committerChanwoo Choi <cw00.choi@samsung.com>2023-03-17 14:24:21 +0900
commitafd2a33254dbad893c399e5fa5ab8159a65531fd (patch)
tree77f2402dbd1f9ab2f8837113405d1f03d5e7b4ff /src
parentabb4200900d44b00a70758b35b5b8f2b6e425170 (diff)
downloadpass-afd2a33254dbad893c399e5fa5ab8159a65531fd.tar.gz
pass-afd2a33254dbad893c399e5fa5ab8159a65531fd.tar.bz2
pass-afd2a33254dbad893c399e5fa5ab8159a65531fd.zip
pass: resmon: Add missing exception handling to check parameter
Add missing exception handling to check whether parameter is valid or not And fix the wrong function prototype of pass_resmon_unregister_uevent with the the wrong error log information. Change-Id: I50d857d00bec6fd4f2404f05a8f392dd36d062b3 Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Diffstat (limited to 'src')
-rw-r--r--src/pass/pass-resmon.c13
-rw-r--r--src/pass/pass-resmon.h5
2 files changed, 14 insertions, 4 deletions
diff --git a/src/pass/pass-resmon.c b/src/pass/pass-resmon.c
index 516bd79..2191452 100644
--- a/src/pass/pass-resmon.c
+++ b/src/pass/pass-resmon.c
@@ -120,6 +120,9 @@ static int resmon_timer_add(struct resmon *monitor, unsigned int interval)
if (resmon_find_monitor(resmon, RESMON_TIMER, monitor->id))
return -EINVAL;
+ if (interval <= 0 || interval >= UINT_MAX)
+ return -EINVAL;
+
monitor->id = add_timer_handler(interval, resmon_timer_func, monitor);
if (!monitor->id)
return -EPERM;
@@ -153,6 +156,9 @@ static int resmon_timer_update_interval(struct resmon *monitor,
if (!resmon_find_monitor(resmon, RESMON_TIMER, monitor->id))
return -EINVAL;
+ if (interval <= 0 || interval >= UINT_MAX)
+ return -EINVAL;
+
/* Update timer interval of timer-based resmon */
delete_timer_handler(monitor->id);
@@ -304,6 +310,10 @@ int pass_resmon_register_timer(struct pass_resource *res,
/* Get instance of struct resmon_ops according to resmon_src_type */
monitor->ops = resmon_get_ops(src_type);
+ if (!monitor->ops) {
+ ret = -EINVAL;
+ goto err;
+ }
/* Add timer-based resource monitor */
ret = resmon_timer_add(monitor, timer_interval);
@@ -556,6 +566,7 @@ int pass_resmon_register_uevent(struct pass_resource *res,
if (!monitor)
return -ENOMEM;
+ monitor->res = res;
monitor->resmon = resmon;
monitor->src_type = src_type;
monitor->user_func = user_func;
@@ -599,7 +610,7 @@ int pass_resmon_unregister_uevent(struct pass_resource *res, guint id)
monitor = resmon_find_monitor(res->resmon, RESMON_UEVENT, id);
if (!monitor) {
- _E("failed to find monitor (res_name: %s, type: %d)\n",
+ _E("failed to find monitor (res_name: %s, id: %d)\n",
res->config_data.res_name, id);
return -EINVAL;
}
diff --git a/src/pass/pass-resmon.h b/src/pass/pass-resmon.h
index d23381e..93f4588 100644
--- a/src/pass/pass-resmon.h
+++ b/src/pass/pass-resmon.h
@@ -165,10 +165,9 @@ int pass_resmon_register_uevent(struct pass_resource *res,
* pass_resmon_unregister_uevent - Unregister uevent-based resource monitor
*
* @res: the instance of struct pass_resource
- * @src_type: the type of resource monitor among 'enum resmon_src_type'.
+ * @id: Uevent ID of resource monitor source
*/
-int pass_resmon_unregister_uevent(struct pass_resource *res,
- enum resmon_src_type src_type);
+int pass_resmon_unregister_uevent(struct pass_resource *res, guint id);
/**
* @brief Prepare PASS_MODULE_RESMON(Resource Monitor) module