1. 03 Jan, 2024 2 commits
    • Richard Fitzgerald's avatar
      kunit: Allow passing function pointer to kunit_activate_static_stub() · fcbac39b
      Richard Fitzgerald authored
      Swap the arguments to typecheck_fn() in kunit_activate_static_stub()
      so that real_fn_addr can be either the function itself or a pointer
      to that function.
      
      This is useful to simplify redirecting static functions in a module.
      Having to pass the actual function meant that it must be exported
      from the module. Either making the 'static' and EXPORT_SYMBOL*()
      conditional (which makes the code messy), or change it to always
      exported (which increases the export namespace and prevents the
      compiler inlining a trivial stub function in non-test builds).
      
      With the original definition of kunit_activate_static_stub() the
      address of real_fn_addr was passed to typecheck_fn() as the type to
      be passed. This meant that if real_fn_addr was a pointer-to-function
      it would resolve to a ** instead of a *, giving an error like this:
      
         error: initialization of ‘int (**)(int)’ from incompatible pointer
         type ‘int (*)(int)’ [-Werror=incompatible-pointer-types]
         kunit_activate_static_stub(test, add_one_fn_ptr, subtract_one);
            |                             ^~~~~~~~~~~~
         ./include/linux/typecheck.h:21:25: note: in definition of macro
         ‘typecheck_fn’
         21 | ({ typeof(type) __tmp = function; \
      
      Swapping the arguments to typecheck_fn makes it take the type of a
      pointer to the replacement function. Either a function or a pointer
      to function can be assigned to that. For example:
      
      static int some_function(int x)
      {
          /* whatever */
      }
      
      int (* some_function_ptr)(int) = some_function;
      
      static int replacement(int x)
      {
          /* whatever */
      }
      
      Then:
        kunit_activate_static_stub(test, some_function, replacement);
      yields:
        typecheck_fn(typeof(&replacement), some_function);
      
      and:
        kunit_activate_static_stub(test, some_function_ptr, replacement);
      yields:
        typecheck_fn(typeof(&replacement), some_function_ptr);
      
      The two typecheck_fn() then resolve to:
      
        int (*__tmp)(int) = some_function;
      and
        int (*__tmp)(int) = some_function_ptr;
      
      Both of these are valid. In the first case the compiler inserts
      an implicit '&' to take the address of the supplied function, and
      in the second case the RHS is already a pointer to the same type.
      Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
      Reviewed-by: default avatarRae Moar <rmoar@google.com>
      Reviewed-by: default avatarDavid Gow <davidgow@google.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      fcbac39b
    • Richard Fitzgerald's avatar
      kunit: Fix NULL-dereference in kunit_init_suite() if suite->log is NULL · a0b84213
      Richard Fitzgerald authored
      suite->log must be checked for NULL before passing it to
      string_stream_clear(). This was done in kunit_init_test() but was missing
      from kunit_init_suite().
      Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
      Fixes: 6d696c4695c5 ("kunit: add ability to run tests after boot using debugfs")
      Reviewed-by: default avatarRae Moar <rmoar@google.com>
      Acked-by: default avatarDavid Gow <davidgow@google.com>
      Reviewed-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      a0b84213
  2. 18 Dec, 2023 22 commits
  3. 17 Dec, 2023 10 commits
  4. 16 Dec, 2023 3 commits
    • Linus Torvalds's avatar
      Merge tag 'trace-v6.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace · 3b8a9b2e
      Linus Torvalds authored
      Pull tracing fixes from Steven Rostedt:
      
       - Fix eventfs to check creating new files for events with names greater
         than NAME_MAX. The eventfs lookup needs to check the return result of
         simple_lookup().
      
       - Fix the ring buffer to check the proper max data size. Events must be
         able to fit on the ring buffer sub-buffer, if it cannot, then it
         fails to be written and the logic to add the event is avoided. The
         code to check if an event can fit failed to add the possible absolute
         timestamp which may make the event not be able to fit. This causes
         the ring buffer to go into an infinite loop trying to find a
         sub-buffer that would fit the event. Luckily, there's a check that
         will bail out if it looped over a 1000 times and it also warns.
      
         The real fix is not to add the absolute timestamp to an event that is
         starting at the beginning of a sub-buffer because it uses the
         sub-buffer timestamp.
      
         By avoiding the timestamp at the start of the sub-buffer allows
         events that pass the first check to always find a sub-buffer that it
         can fit on.
      
       - Have large events that do not fit on a trace_seq to print "LINE TOO
         BIG" like it does for the trace_pipe instead of what it does now
         which is to silently drop the output.
      
       - Fix a memory leak of forgetting to free the spare page that is saved
         by a trace instance.
      
       - Update the size of the snapshot buffer when the main buffer is
         updated if the snapshot buffer is allocated.
      
       - Fix ring buffer timestamp logic by removing all the places that tried
         to put the before_stamp back to the write stamp so that the next
         event doesn't add an absolute timestamp. But each of these updates
         added a race where by making the two timestamp equal, it was
         validating the write_stamp so that it can be incorrectly used for
         calculating the delta of an event.
      
       - There's a temp buffer used for printing the event that was using the
         event data size for allocation when it needed to use the size of the
         entire event (meta-data and payload data)
      
       - For hardening, use "%.*s" for printing the trace_marker output, to
         limit the amount that is printed by the size of the event. This was
         discovered by development that added a bug that truncated the '\0'
         and caused a crash.
      
       - Fix a use-after-free bug in the use of the histogram files when an
         instance is being removed.
      
       - Remove a useless update in the rb_try_to_discard of the write_stamp.
         The before_stamp was already changed to force the next event to add
         an absolute timestamp that the write_stamp is not used. But the
         write_stamp is modified again using an unneeded 64-bit cmpxchg.
      
       - Fix several races in the 32-bit implementation of the
         rb_time_cmpxchg() that does a 64-bit cmpxchg.
      
       - While looking at fixing the 64-bit cmpxchg, I noticed that because
         the ring buffer uses normal cmpxchg, and this can be done in NMI
         context, there's some architectures that do not have a working
         cmpxchg in NMI context. For these architectures, fail recording
         events that happen in NMI context.
      
      * tag 'trace-v6.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
        ring-buffer: Do not record in NMI if the arch does not support cmpxchg in NMI
        ring-buffer: Have rb_time_cmpxchg() set the msb counter too
        ring-buffer: Fix 32-bit rb_time_read() race with rb_time_cmpxchg()
        ring-buffer: Fix a race in rb_time_cmpxchg() for 32 bit archs
        ring-buffer: Remove useless update to write_stamp in rb_try_to_discard()
        ring-buffer: Do not try to put back write_stamp
        tracing: Fix uaf issue when open the hist or hist_debug file
        tracing: Add size check when printing trace_marker output
        ring-buffer: Have saved event hold the entire event
        ring-buffer: Do not update before stamp when switching sub-buffers
        tracing: Update snapshot buffer on resize if it is allocated
        ring-buffer: Fix memory leak of free page
        eventfs: Fix events beyond NAME_MAX blocking tasks
        tracing: Have large events show up as '[LINE TOO BIG]' instead of nothing
        ring-buffer: Fix writing to the buffer with max_data_size
      3b8a9b2e
    • Linus Torvalds's avatar
      Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux · c8e97fc6
      Linus Torvalds authored
      Pull arm64 fixes from Catalin Marinas:
      
       - Arm CMN perf: fix the DTC allocation failure path which can end up
         erroneously clearing live counters
      
       - arm64/mm: fix hugetlb handling of the dirty page state leading to a
         continuous fault loop in user on hardware without dirty bit
         management (DBM). That's caused by the dirty+writeable information
         not being properly preserved across a series of mprotect(PROT_NONE),
         mprotect(PROT_READ|PROT_WRITE)
      
      * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
        arm64: mm: Always make sw-dirty PTEs hw-dirty in pte_modify
        perf/arm-cmn: Fail DTC counter allocation correctly
      c8e97fc6
    • Linus Torvalds's avatar
      Merge tag 'pci-v6.7-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci · 2e3f280b
      Linus Torvalds authored
      Pull pci fixes from Bjorn Helgaas:
      
       - Limit Max_Read_Request_Size (MRRS) on some MIPS Loongson systems
         because they don't all support MRRS > 256, and firmware doesn't
         always initialize it correctly, which meant some PCIe devices didn't
         work (Jiaxun Yang)
      
       - Add and use pci_enable_link_state_locked() to prevent potential
         deadlocks in vmd and qcom drivers (Johan Hovold)
      
       - Revert recent (v6.5) acpiphp resource assignment changes that fixed
         issues with hot-adding devices on a root bus or with large BARs, but
         introduced new issues with GPU initialization and hot-adding SCSI
         disks in QEMU VMs and (Bjorn Helgaas)
      
      * tag 'pci-v6.7-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci:
        Revert "PCI: acpiphp: Reassign resources on bridge if necessary"
        PCI/ASPM: Add pci_disable_link_state_locked() lockdep assert
        PCI/ASPM: Clean up __pci_disable_link_state() 'sem' parameter
        PCI: qcom: Clean up ASPM comment
        PCI: qcom: Fix potential deadlock when enabling ASPM
        PCI: vmd: Fix potential deadlock when enabling ASPM
        PCI/ASPM: Add pci_enable_link_state_locked()
        PCI: loongson: Limit MRRS to 256
      2e3f280b
  5. 15 Dec, 2023 3 commits