Commit e2c278bc37b5 for kernel

commit e2c278bc37b52222e53d5f88971ffcfacd6c97be
Merge: 2d2fe9fd50b5 c47a7b11bcb3
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Fri Oct 16 14:27:22 2026 -1000

    Merge tag 'trace-v7.3-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace

    Pull tracing fixes from Steven Rostedt:

     - Fix NULL dereference when copying histogram field variable

       If event_hist_trigger_parse() creates an action that uses one of
       pseudo fields for its keys, the hist_data field element will have a
       NULL for its field member. When looking to match that key, the lookup
       uses key_field->field->name which will dereference a NULL pointer.
       Instead use the helper function that handles such cases:
       expr_field_str().

     - Take the trace_types_lock when dropping the buffer_meta reference

       The tracing_buffer_meta_open() error return drops the trace_array
       reference with __trace_array_put() instead of trace_array_put() where
       the former doesn't take the lock and the latter does.

     - Fix NULL pointer dereference when reading per_cpu/cpuN/buffer_meta

       These files are created for every possible CPU. But it only contains
       data for CPUs that have come online. If one is read for a CPU that
       hasn't come online yet, it triggers a NULL pointer dereference.

       Have reading of CPUs that have not come on line yet return -ENODEV.

     - Fix an out-of-bounds shift in the log2 histogram modifier

       Histograms can take a log2 modifier to have the buckets defined by
       log2 increments. If a shift is greater than ULONG_MAX or above 2^63,
       the key falls into a lower order bucket.

       Use order_base_2() instead of "ilog2(n - 1) + 1" to have all
       overflowed keys go into the top bucket.

     - Fix the persistent ring buffer rb_meta_subbuf_idx() accounting

       The algorithm for finding the index of a sub-buffer in a persistent
       ring buffer buffer did not take into account the meta data at the
       beginning of the buffer causing the wrong index to be returned.

       As rb_subbufs_from_meta() does the proper accounting to find the
       first sub-buffer, use that function instead of repeating the logic
       (incorrectly) and make the calculations based off of that.

     - Fix the symbol name checks for the remote buffer code

       The remote ring buffer has a build time check to make sure its not
       using any code that will not be in the hypervisor. For various
       architectures, there has been false positive reports from this
       checker.

       Fix them.

     - Fix false warning in ring_buffer_map_get_reader()

       There is a WARN_ON() after rb_get_reader_page() if no reader is
       returned. But there are legitimate cases where this can happen.
       Remove the WARN_ON() and also a check that covers one of the
       legitimate cases that tries to exit out early. There's no need for
       the check if it just simply allows the return of NULL from
       rb_get_reader_page().

     - Fix the ignored return value from resize_buffer_duplicate_size()

       Some clean up of the code in tracing_snapshot_write() removed
       checking the return value of resize_buffer_duplicate_size() and if
       that failed it would not be detected.

     - Fix the histogram timestamps for buffered events

       The histogram timestamps are taken from the events that are recorded.
       It currently reads ring_buffer_event_time_stamp() but if the event is
       buffered it does not read it properly. Use tracing_event_time_stamp()
       which handles both buffered and normal events.

     - Do not initialize tracefs if tracing is disabled at boot

       If tracing fails to allocate or some other error is detected,
       tracing_disabled is set. Do not initialize tracefs in this case as it
       may expect data to be initialized but is not.

     - Free eventfs inode after an RCU grace period

       Currently eventfs_inodes are freed after a SRCU grace period as the
       iterations in the code use SRCU. There are locations that the inode
       may still be accessed from the VFS that uses RCU which does not have
       the same synchronization as SRCU. Add an RCU wait before free eventfs
       inodes.

     - Do not fail persistent and remote buffers under memory pressure

       As persistent and remote buffers have their own pre-allocated memory,
       there's no reason to check how much memory is available before
       created them. By checking the memory pressure, these buffers may fail
       to be created even though their memory is already present.

     - Account for subbuffer size when checking how much memory is available

       Before allocating a ring buffer, the size is checked against the
       current memory pressure of the system. But it assumes every
       sub-buffer is of page size. This is no longer the case. Use the
       actual sub-buffer size when calculating how much memory will be used.

     - Reject non-stack fields for synthetic stacktrace fields

       Stack traces are special fields and the checks currently do not do
       enough to make sure that the fields being processed as stack traces
       are indeed stack traces. Update the logic to properly detect what is
       or is not a stack trace.

     - Fix a crash in print_graph_function_event()

       When a tracer does not define static or default flags the
       tr->current_trace_flags is set to NULL. If the ring buffer is not
       cleared when switching tracers, the previous tracers events could be
       read. The function_graph entries will dereference the
       tr->current_trace_flags and cause a crash.

       Set the tr->current_trace_flags to a empty set of flags to prevent it
       from being NULL.

     - Separate tracing filter predicate count from allocation

       The amount allocated for the predicate program is the number of
       predicates defined plus two for adding "true" and "false" at the end.
       The nr_preds is incremented by two to accommodate the booleans but is
       then used as the limit check for number of predicates. This is
       incorrect as it is now two higher than what is expected.

       Use a separate variable for the size of the predicate array.

     - Fix the filter operator stack check

       The operator stack increments the pointer and then writes the content
       onto the stack. The check for overflow compared the current pointer
       to see if it was greater than the stack size before doing so. This is
       an off by 2 error as the write will be at the size - 1 and the
       compare is done before the increment. Adjust the check accordingly.

    * tag 'trace-v7.3-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
      tracing: Check operator stack capacity before pushing
      tracing: Keep the predicate limit separate from program capacity
      tracing: Fix crash in print_graph_function_event()
      tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields
      ring-buffer: Use subbuf_order in available memory estimation
      ring-buffer: Skip si_mem_available() for persistent and remote buffers
      eventfs: Free the eventfs_inode after an rcu grace period too
      tracing: Do not initialize tracefs work if tracing is disabled
      tracing: Fix hist trigger timestamps for buffered events
      tracing: Fix ignored return value of resize_buffer_duplicate_size()
      ring-buffer: Fix false warning in ring_buffer_map_get_reader()
      tracing: Fix simple_ring_buffer undef check on sparc64
      tracing: Fix simple_ring_buffer undef check on parisc
      tracing: Fix empty symbol names in simple_ring_buffer undef check
      ring-buffer: Fix the sub-buffer array base in rb_meta_subbuf_idx()
      tracing: Fix the shift out of bounds in the log2 histogram modifier
      ring-buffer: Do not show buffer_meta for CPUs without a buffer
      tracing: Take trace_types_lock when dropping the buffer_meta reference
      tracing: Fix NULL dereference when copying keys for a field variable