• Vasily Averin's avatar
    cgroup: cgroup_procs_next should increase position index · ff79a4a7
    Vasily Averin authored
    commit 2d4ecb03 upstream.
    
    If seq_file .next fuction does not change position index,
    read after some lseek can generate unexpected output:
    
    1) dd bs=1 skip output of each 2nd elements
    $ dd if=/sys/fs/cgroup/cgroup.procs bs=8 count=1
    2
    3
    4
    5
    1+0 records in
    1+0 records out
    8 bytes copied, 0,000267297 s, 29,9 kB/s
    [test@localhost ~]$ dd if=/sys/fs/cgroup/cgroup.procs bs=1 count=8
    2
    4 <<< NB! 3 was skipped
    6 <<<    ... and 5 too
    8 <<<    ... and 7
    8+0 records in
    8+0 records out
    8 bytes copied, 5,2123e-05 s, 153 kB/s
    
     This happen because __cgroup_procs_start() makes an extra
     extra cgroup_procs_next() call
    
    2) read after lseek beyond end of file generates whole last line.
    3) read after lseek into middle of last line generates
    expected rest of last line and unexpected whole line once again.
    
    Additionally patch removes an extra position index changes in
    __cgroup_procs_start()
    
    Cc: stable@vger.kernel.org
    https://bugzilla.kernel.org/show_bug.cgi?id=206283Signed-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ff79a4a7
cgroup.c 160 KB