Commit 278924cb authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-v5.12-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull workqueue tracing fix from Steven Rostedt:
 "Fix workqueue trace event unsafe string reference

  After adding a verifier to test all strings printed in trace events to
  make sure they either point to a string on the ring buffer, or to read
  only core kernel memory, it triggered on a workqueue trace event. The
  trace event workqueue_queue_work references the allocated name of the
  workqueue in the output. If the workqueue is freed before the trace is
  read, then the trace will dereference freed memory.

  Update the trace event to use the __string(), __assign_str(), and
  __get_str() helpers to handle such cases"

* tag 'trace-v5.12-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  workqueue/tracing: Copy workqueue name to buffer in trace event
parents ec857209 83b62687
...@@ -30,7 +30,7 @@ TRACE_EVENT(workqueue_queue_work, ...@@ -30,7 +30,7 @@ TRACE_EVENT(workqueue_queue_work,
TP_STRUCT__entry( TP_STRUCT__entry(
__field( void *, work ) __field( void *, work )
__field( void *, function) __field( void *, function)
__field( const char *, workqueue) __string( workqueue, pwq->wq->name)
__field( unsigned int, req_cpu ) __field( unsigned int, req_cpu )
__field( unsigned int, cpu ) __field( unsigned int, cpu )
), ),
...@@ -38,13 +38,13 @@ TRACE_EVENT(workqueue_queue_work, ...@@ -38,13 +38,13 @@ TRACE_EVENT(workqueue_queue_work,
TP_fast_assign( TP_fast_assign(
__entry->work = work; __entry->work = work;
__entry->function = work->func; __entry->function = work->func;
__entry->workqueue = pwq->wq->name; __assign_str(workqueue, pwq->wq->name);
__entry->req_cpu = req_cpu; __entry->req_cpu = req_cpu;
__entry->cpu = pwq->pool->cpu; __entry->cpu = pwq->pool->cpu;
), ),
TP_printk("work struct=%p function=%ps workqueue=%s req_cpu=%u cpu=%u", TP_printk("work struct=%p function=%ps workqueue=%s req_cpu=%u cpu=%u",
__entry->work, __entry->function, __entry->workqueue, __entry->work, __entry->function, __get_str(workqueue),
__entry->req_cpu, __entry->cpu) __entry->req_cpu, __entry->cpu)
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment