• Vasily Averin's avatar
    pstore: pstore_ftrace_seq_next should increase position index · 6c871b73
    Vasily Averin authored
    In Aug 2018 NeilBrown noticed
    commit 1f4aace6 ("fs/seq_file.c: simplify seq_file iteration code and interface")
    "Some ->next functions do not increment *pos when they return NULL...
    Note that such ->next functions are buggy and should be fixed.
    A simple demonstration is
    
     dd if=/proc/swaps bs=1000 skip=1
    
    Choose any block size larger than the size of /proc/swaps. This will
    always show the whole last line of /proc/swaps"
    
    /proc/swaps output was fixed recently, however there are lot of other
    affected files, and one of them is related to pstore subsystem.
    
    If .next function does not change position index, following .show function
    will repeat output related to current position index.
    
    There are at least 2 related problems:
    - read after lseek beyond end of file, described above by NeilBrown
      "dd if=<AFFECTED_FILE> bs=1000 skip=1" will generate whole last list
    - read after lseek on in middle of last line will output expected rest of
      last line but then repeat whole last line once again.
    
    If .show() function generates multy-line output (like
    pstore_ftrace_seq_show() does ?) following bash script cycles endlessly
    
     $ q=;while read -r r;do echo "$((++q)) $r";done < AFFECTED_FILE
    
    Unfortunately I'm not familiar enough to pstore subsystem and was unable
    to find affected pstore-related file on my test node.
    
    If .next function does not change position index, following .show function
    will repeat output related to current position index.
    
    Cc: stable@vger.kernel.org
    Fixes: 1f4aace6 ("fs/seq_file.c: simplify seq_file iteration code ...")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=206283Signed-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
    Link: https://lore.kernel.org/r/4e49830d-4c88-0171-ee24-1ee540028dad@virtuozzo.com
    [kees: with robustness tweak from Joel Fernandes <joelaf@google.com>]
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    6c871b73
inode.c 9.72 KB