diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c index aa3120104a51..46ee10551c63 100644 --- a/kernel/time/posix-timers.c +++ b/kernel/time/posix-timers.c @@ -483,11 +483,15 @@ static int do_timer_create(clockid_t which_clock, struct sigevent *event, /* Special case for CRIU to restore timers with a given timer ID. */ if (unlikely(current->signal->timer_create_restore_ids)) { - if (copy_from_user(&req_id, created_timer_id, sizeof(req_id))) + if (copy_from_user(&req_id, created_timer_id, sizeof(req_id))) { + posixtimer_free_timer(new_timer); return -EFAULT; + } /* Valid IDs are 0..INT_MAX */ - if ((unsigned int)req_id > INT_MAX) + if ((unsigned int)req_id > INT_MAX) { + posixtimer_free_timer(new_timer); return -EINVAL; + } } /*