Skip to content

Commit e0fd4d4

Browse files
eslammedhatKAGA-KOKO
authored andcommitted
posix-timers: Plug potential memory leak in do_timer_create()
When posix timer creation is set to allocate a given timer ID and the access to the user space value faults, the function terminates without freeing the already allocated posix timer structure. Move the allocation after the user space access to cure that. [ tglx: Massaged change log ] Fixes: ec2d0c0 ("posix-timers: Provide a mechanism to allocate a given timer ID") Reported-by: syzbot+9c47ad18f978d4394986@syzkaller.appspotmail.com Suggested-by: Cyrill Gorcunov <gorcunov@gmail.com> Signed-off-by: Eslam Khafagy <eslam.medhat1993@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Frederic Weisbecker <frederic@kernel.org> Link: https://patch.msgid.link/20251114122739.994326-1-eslam.medhat1993@gmail.com Closes: https://lore.kernel.org/all/69155df4.a70a0220.3124cb.0017.GAE@google.com/T/
1 parent e9a6fb0 commit e0fd4d4

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

kernel/time/posix-timers.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,12 +475,6 @@ static int do_timer_create(clockid_t which_clock, struct sigevent *event,
475475
if (!kc->timer_create)
476476
return -EOPNOTSUPP;
477477

478-
new_timer = alloc_posix_timer();
479-
if (unlikely(!new_timer))
480-
return -EAGAIN;
481-
482-
spin_lock_init(&new_timer->it_lock);
483-
484478
/* Special case for CRIU to restore timers with a given timer ID. */
485479
if (unlikely(current->signal->timer_create_restore_ids)) {
486480
if (copy_from_user(&req_id, created_timer_id, sizeof(req_id)))
@@ -490,6 +484,12 @@ static int do_timer_create(clockid_t which_clock, struct sigevent *event,
490484
return -EINVAL;
491485
}
492486

487+
new_timer = alloc_posix_timer();
488+
if (unlikely(!new_timer))
489+
return -EAGAIN;
490+
491+
spin_lock_init(&new_timer->it_lock);
492+
493493
/*
494494
* Add the timer to the hash table. The timer is not yet valid
495495
* after insertion, but has a unique ID allocated.

0 commit comments

Comments
 (0)