tracing: eval_map_next() should always increase position index
authorVasily Averin <vvs@virtuozzo.com>
Fri, 24 Jan 2020 07:03:01 +0000 (10:03 +0300)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 30 Jan 2020 14:46:27 +0000 (09:46 -0500)
if seq_file .next fuction does not change position index,
read after some lseek can generate unexpected output.

Link: http://lkml.kernel.org/r/7ad85b22-1866-977c-db17-88ac438bc764@virtuozzo.com
Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
[ This is not a bug fix, it just makes it "technically correct"
  which is why I applied it. NULL is only returned on an anomaly
  which triggers a WARN_ON ]
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace.c

index 6a28b1b9bf42c45888869200323c2f47c2116ab6..8d144fd94aa88f51bf0d9e1c8972f2b7f1326a76 100644 (file)
@@ -5399,14 +5399,12 @@ static void *eval_map_next(struct seq_file *m, void *v, loff_t *pos)
         * Paranoid! If ptr points to end, we don't want to increment past it.
         * This really should never happen.
         */
+       (*pos)++;
        ptr = update_eval_map(ptr);
        if (WARN_ON_ONCE(!ptr))
                return NULL;
 
        ptr++;
-
-       (*pos)++;
-
        ptr = update_eval_map(ptr);
 
        return ptr;