• Eric Biederman's avatar
    seq_file: properly cope with pread · 8f19d472
    Eric Biederman authored
    Currently seq_read assumes that the offset passed to it is always the
    offset it passed to user space.  In the case pread this assumption is
    broken and we do the wrong thing when presented with pread.
    
    To solve this I introduce an offset cache inside of struct seq_file so we
    know where our logical file position is.  Then in seq_read if we try to
    read from another offset we reset our data structures and attempt to go to
    the offset user space wanted.
    
    [akpm@linux-foundation.org: restore FMODE_PWRITE]
    [pjt@google.com: seq_open needs its fmode opened up to take advantage of this]
    Signed-off-by: default avatarEric Biederman <ebiederm@xmission.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Paul Turner <pjt@google.com>
    Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x, 2.6.27.x, 2.6.28.x]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8f19d472
seq_file.c 14.3 KB