diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pass/pass-resmon.c | 13 | ||||
-rw-r--r-- | src/pass/pass-resmon.h | 5 |
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 |