android_kernel_oneplus_msm8998/kernel/trace
Elazar Leibovich 11988047b3 tracing: Fix partial reading of trace event's id file
commit cbe08bcbbe787315c425dde284dcb715cfbf3f39 upstream.

When reading only part of the id file, the ppos isn't tracked correctly.
This is taken care by simple_read_from_buffer.

Reading a single byte, and then the next byte would result EOF.

While this seems like not a big deal, this breaks abstractions that
reads information from files unbuffered. See for example
https://github.com/golang/go/issues/29399

This code was mentioned as problematic in
commit cd458ba9d5
("tracing: Do not (ab)use trace_seq in event_id_read()")

An example C code that show this bug is:

  #include <stdio.h>
  #include <stdint.h>

  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
  #include <unistd.h>

  int main(int argc, char **argv) {
    if (argc < 2)
      return 1;
    int fd = open(argv[1], O_RDONLY);
    char c;
    read(fd, &c, 1);
    printf("First  %c\n", c);
    read(fd, &c, 1);
    printf("Second %c\n", c);
  }

Then run with, e.g.

  sudo ./a.out /sys/kernel/debug/tracing/events/tcp/tcp_set_state/id

You'll notice you're getting the first character twice, instead of the
first two characters in the id file.

Link: http://lkml.kernel.org/r/20181231115837.4932-1-elazar@lightbitslabs.com

Cc: Orit Wasserman <orit.was@gmail.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: stable@vger.kernel.org
Fixes: 23725aeeab ("ftrace: provide an id file for each event")
Signed-off-by: Elazar Leibovich <elazar@lightbitslabs.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-06-11 12:23:46 +02:00
..
blktrace.c tracing/blktrace: Fix to allow setting same value 2018-09-09 20:04:34 +02:00
bpf_trace.c bpf: fix check of allowed specifiers in bpf_trace_printk 2018-12-17 21:55:10 +01:00
ftrace.c kprobes: Mark ftrace mcount handler functions nokprobe 2019-04-27 09:34:02 +02:00
Kconfig
Makefile
power-traces.c
ring_buffer.c trace: Fix preempt_enable_no_resched() abuse 2019-05-16 19:44:43 +02:00
ring_buffer_benchmark.c
rpm-traces.c
trace.c tracing: kdb: Fix ftdump to not sleep 2019-04-27 09:33:48 +02:00
trace.h
trace_benchmark.c
trace_benchmark.h
trace_branch.c
trace_clock.c
trace_entries.h
trace_event_perf.c
trace_events.c tracing: Fix partial reading of trace event's id file 2019-06-11 12:23:46 +02:00
trace_events_filter.c tracing: Fix regex_match_front() to not over compare the test string 2018-05-16 10:06:51 +02:00
trace_events_filter_test.h
trace_events_trigger.c tracing: Fix memory leak in set_trigger_filter() 2018-12-21 14:09:51 +01:00
trace_export.c
trace_functions.c
trace_functions_graph.c tracing: Fix missing return symbol in function_graph output 2018-07-11 16:03:48 +02:00
trace_irqsoff.c
trace_kdb.c tracing: kdb: Fix ftdump to not sleep 2019-04-27 09:33:48 +02:00
trace_kprobe.c tracing: Quiet gcc warning about maybe unused link variable 2018-08-06 16:24:30 +02:00
trace_mmiotrace.c
trace_nop.c
trace_output.c
trace_output.h
trace_printk.c
trace_probe.c tracing: probeevent: Fix to support minus offset from symbol 2018-03-28 18:40:15 +02:00
trace_probe.h tracing: probeevent: Fix to support minus offset from symbol 2018-03-28 18:40:15 +02:00
trace_sched_switch.c
trace_sched_wakeup.c
trace_selftest.c ftrace: Fix selftest goto location on error 2017-09-27 11:00:16 +02:00
trace_selftest_dynamic.c
trace_seq.c
trace_stack.c
trace_stat.c
trace_stat.h
trace_syscalls.c
trace_uprobe.c tracing/uprobes: Fix output for multiple string arguments 2019-02-20 10:13:22 +01:00