• Frederic Weisbecker's avatar
    posix-timers: correctly get dying task time sample in posix_cpu_timer_schedule() · 76cdcdd9
    Frederic Weisbecker authored
    In order to re-arm a timer after it fired, we take a sample of the current
    process or thread cputime.
    
    If the task is dying though, we don't arm anything but we cache the
    remaining timer expiration delta for further reads.
    
    Something similar is performed in posix_cpu_timer_get() but here we forget
    to take the process wide cputime sample before caching it.
    
    As a result we are storing random stack content, leading every further
    reads of that timer to return junk values.
    
    Fix this by taking the appropriate sample in the case of process wide
    timers.
    
    This probably doesn't matter much in practice because, at this stage, the
    thread is the last one in the group and we reached exit_notify().  This
    implies that we called exit_itimers() and there should be no more timers
    to handle for that task.
    
    So this is likely dead code anyway but let's fix the current logic
    and the warning that came along:
    
        kernel/posix-cpu-timers.c: In function 'posix_cpu_timer_schedule':
        kernel/posix-cpu-timers.c:1127: warning: 'now' may be used uninitialized in this function
    
    Then we can start to think further about cleaning up that code.
    Reported-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reported-by: default avatarChen Gang <gang.chen@asianux.com>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Stanislaw Gruszka <sgruszka@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Chen Gang <gang.chen@asianux.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
    Cc: Olivier Langlois <olivier@trillion01.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    76cdcdd9
posix-cpu-timers.c 39.5 KB