• Stanislaw Gruszka's avatar
    sched/cputime: Do not scale when utime == 0 · 5a8e01f8
    Stanislaw Gruszka authored
    scale_stime() silently assumes that stime < rtime, otherwise
    when stime == rtime and both values are big enough (operations
    on them do not fit in 32 bits), the resulting scaling stime can
    be bigger than rtime. In consequence utime = rtime - stime
    results in negative value.
    
    User space visible symptoms of the bug are overflowed TIME
    values on ps/top, for example:
    
     $ ps aux | grep rcu
     root         8  0.0  0.0      0     0 ?        S    12:42   0:00 [rcuc/0]
     root         9  0.0  0.0      0     0 ?        S    12:42   0:00 [rcub/0]
     root        10 62422329  0.0  0     0 ?        R    12:42 21114581:37 [rcu_preempt]
     root        11  0.1  0.0      0     0 ?        S    12:42   0:02 [rcuop/0]
     root        12 62422329  0.0  0     0 ?        S    12:42 21114581:35 [rcuop/1]
     root        10 62422329  0.0  0     0 ?        R    12:42 21114581:37 [rcu_preempt]
    
    or overflowed utime values read directly from /proc/$PID/stat
    
    Reference:
    
      https://lkml.org/lkml/2013/8/20/259Reported-and-tested-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Signed-off-by: default avatarStanislaw Gruszka <sgruszka@redhat.com>
    Cc: stable@vger.kernel.org
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Link: http://lkml.kernel.org/r/20130904131602.GC2564@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    5a8e01f8
cputime.c 21.2 KB