lkml.org 
[lkml]   [2023]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch 15/20] posix-timers: Add proper comments in do_timer_create()
    Date
    The comment about timer lifetime at the end of the function is misplaced
    and uncomprehensible.

    Make it understandable and put it at the right place. Add a new comment
    about the visibility of the new timer ID to user space.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    kernel/time/posix-timers.c | 20 +++++++++++---------
    1 file changed, 11 insertions(+), 9 deletions(-)

    --- a/kernel/time/posix-timers.c
    +++ b/kernel/time/posix-timers.c
    @@ -528,12 +528,17 @@ static int do_timer_create(clockid_t whi
    new_timer->sigq->info.si_tid = new_timer->it_id;
    new_timer->sigq->info.si_code = SI_TIMER;

    - if (copy_to_user(created_timer_id,
    - &new_timer_id, sizeof (new_timer_id))) {
    + if (copy_to_user(created_timer_id, &new_timer_id, sizeof (new_timer_id))) {
    error = -EFAULT;
    goto out;
    }
    -
    + /*
    + * After succesful copy out, the timer ID is visible to user space
    + * now but not yet valid because new_timer::signal is still NULL.
    + *
    + * Complete the initialization with the clock specific create
    + * callback.
    + */
    error = kc->timer_create(new_timer);
    if (error)
    goto out;
    @@ -543,14 +548,11 @@ static int do_timer_create(clockid_t whi
    WRITE_ONCE(new_timer->it_signal, current->signal);
    list_add(&new_timer->list, &current->signal->posix_timers);
    spin_unlock_irq(&current->sighand->siglock);
    -
    - return 0;
    /*
    - * In the case of the timer belonging to another task, after
    - * the task is unlocked, the timer is owned by the other task
    - * and may cease to exist at any time. Don't use or modify
    - * new_timer after the unlock call.
    + * After unlocking sighand::siglock @new_timer is subject to
    + * concurrent removal and cannot be touched anymore
    */
    + return 0;
    out:
    posix_timer_unhash_and_free(new_timer);
    return error;
    \
     
     \ /
      Last update: 2023-04-25 20:51    [W:3.242 / U:0.840 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site