• Vasily Averin's avatar
    keys: Fix proc_keys_next to increase position index · 86d32f9a
    Vasily Averin authored
    If seq_file .next function does not change position index,
    read after some lseek can generate unexpected output:
    
        $ dd if=/proc/keys bs=1  # full usual output
        0f6bfdf5 I--Q---     2 perm 3f010000  1000  1000 user      4af2f79ab8848d0a: 740
        1fb91b32 I--Q---     3 perm 1f3f0000  1000 65534 keyring   _uid.1000: 2
        27589480 I--Q---     1 perm 0b0b0000     0     0 user      invocation_id: 16
        2f33ab67 I--Q---   152 perm 3f030000     0     0 keyring   _ses: 2
        33f1d8fa I--Q---     4 perm 3f030000  1000  1000 keyring   _ses: 1
        3d427fda I--Q---     2 perm 3f010000  1000  1000 user      69ec44aec7678e5a: 740
        3ead4096 I--Q---     1 perm 1f3f0000  1000 65534 keyring   _uid_ses.1000: 1
        521+0 records in
        521+0 records out
        521 bytes copied, 0,00123769 s, 421 kB/s
    
    But a read after lseek in middle of last line results in the partial
    last line and then a repeat of the final line:
    
        $ dd if=/proc/keys bs=500 skip=1
        dd: /proc/keys: cannot skip to specified offset
        g   _uid_ses.1000: 1
        3ead4096 I--Q---     1 perm 1f3f0000  1000 65534 keyring   _uid_ses.1000: 1
        0+1 records in
        0+1 records out
        97 bytes copied, 0,000135035 s, 718 kB/s
    
    and a read after lseek beyond end of file results in the last line being
    shown:
    
        $ dd if=/proc/keys bs=1000 skip=1   # read after lseek beyond end of file
        dd: /proc/keys: cannot skip to specified offset
        3ead4096 I--Q---     1 perm 1f3f0000  1000 65534 keyring   _uid_ses.1000: 1
        0+1 records in
        0+1 records out
        76 bytes copied, 0,000119981 s, 633 kB/s
    
    See https://bugzilla.kernel.org/show_bug.cgi?id=206283
    
    Fixes: 1f4aace6 ("fs/seq_file.c: simplify seq_file iteration code ...")
    Signed-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Reviewed-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    86d32f9a
proc.c 7.74 KB