ret = -EINVAL;
goto error;
}
+
+ if (lum->u.filter.reloc_offset > lum->u.filter.data_size - 1) {
+ ERR("Filter reloc offset %u is not within data\n",
+ lum->u.filter.reloc_offset);
+ ret = -EINVAL;
+ goto error;
+ }
+
bytecode = zmalloc(sizeof(*bytecode) + lum->u.filter.data_size);
if (!bytecode) {
ret = -ENOMEM;
}
bytecode->len = lum->u.filter.data_size;
bytecode->reloc_offset = lum->u.filter.reloc_offset;
- fprintf(stderr, "RECV len %d rel %d\n",
- lum->u.filter.data_size,
- lum->u.filter.reloc_offset);
if (ops->cmd) {
ret = ops->cmd(lum->handle, lum->cmd,
(unsigned long) bytecode,
{
struct timespec constructor_timeout;
sigset_t sig_all_blocked, orig_parent_mask;
+ pthread_attr_t thread_attr;
int timeout_mode;
int ret;
ERR("pthread_sigmask: %s", strerror(ret));
}
- ret = pthread_create(&global_apps.ust_listener, NULL,
+ ret = pthread_attr_init(&thread_attr);
+ if (ret) {
+ ERR("pthread_attr_init: %s", strerror(ret));
+ }
+ ret = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
+ if (ret) {
+ ERR("pthread_attr_setdetachstate: %s", strerror(ret));
+ }
+
+ ret = pthread_create(&global_apps.ust_listener, &thread_attr,
ust_listener_thread, &global_apps);
if (ret) {
ERR("pthread_create global: %s", strerror(ret));
}
if (local_apps.allowed) {
- ret = pthread_create(&local_apps.ust_listener, NULL,
+ ret = pthread_create(&local_apps.ust_listener, &thread_attr,
ust_listener_thread, &local_apps);
if (ret) {
ERR("pthread_create local: %s", strerror(ret));
} else {
handle_register_done(&local_apps);
}
+ ret = pthread_attr_destroy(&thread_attr);
+ if (ret) {
+ ERR("pthread_attr_destroy: %s", strerror(ret));
+ }
/* Restore original signal mask in parent */
ret = pthread_sigmask(SIG_SETMASK, &orig_parent_mask, NULL);