Patch "perf lock contention: Add a missing NULL check" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    perf lock contention: Add a missing NULL check

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     perf-lock-contention-add-a-missing-null-check.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cfb4ae6f584aef4be02e0e78b439cdb042f963fa
Author: Namhyung Kim <namhyung@xxxxxxxxxx>
Date:   Tue Apr 9 15:55:42 2024 -0700

    perf lock contention: Add a missing NULL check
    
    [ Upstream commit f3408580bac8ce5cd76e7391e529c0a22e7c7eb2 ]
    
    I got a report for a failure in BPF verifier on a recent kernel with
    perf lock contention command.  It checks task->sighand->siglock without
    checking if sighand is NULL or not.  Let's add one.
    
      ; if (&curr->sighand->siglock == (void *)lock)
      265: (79) r1 = *(u64 *)(r0 +2624)     ; frame1: R0_w=trusted_ptr_task_struct(off=0,imm=0)
                                            ;         R1_w=rcu_ptr_or_null_sighand_struct(off=0,imm=0)
      266: (b7) r2 = 0                      ; frame1: R2_w=0
      267: (0f) r1 += r2
      R1 pointer arithmetic on rcu_ptr_or_null_ prohibited, null-check it first
      processed 164 insns (limit 1000000) max_states_per_insn 1 total_states 15 peak_states 15 mark_read 5
      -- END PROG LOAD LOG --
      libbpf: prog 'contention_end': failed to load: -13
      libbpf: failed to load object 'lock_contention_bpf'
      libbpf: failed to load BPF skeleton 'lock_contention_bpf': -13
      Failed to load lock-contention BPF skeleton
      lock contention BPF setup failed
      lock contention did not detect any lock contention
    
    Fixes: 1811e82767dcc ("perf lock contention: Track and show siglock with address")
    Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>
    Acked-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Cc: Song Liu <song@xxxxxxxxxx>
    Cc: bpf@xxxxxxxxxxxxxxx
    Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240409225542.1870999-1-namhyung@xxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/perf/util/bpf_skel/lock_contention.bpf.c b/tools/perf/util/bpf_skel/lock_contention.bpf.c
index 8d3cfbb3cc65b..473106c72c695 100644
--- a/tools/perf/util/bpf_skel/lock_contention.bpf.c
+++ b/tools/perf/util/bpf_skel/lock_contention.bpf.c
@@ -238,6 +238,7 @@ static inline __u32 check_lock_type(__u64 lock, __u32 flags)
 	struct task_struct *curr;
 	struct mm_struct___old *mm_old;
 	struct mm_struct___new *mm_new;
+	struct sighand_struct *sighand;
 
 	switch (flags) {
 	case LCB_F_READ:  /* rwsem */
@@ -259,7 +260,9 @@ static inline __u32 check_lock_type(__u64 lock, __u32 flags)
 		break;
 	case LCB_F_SPIN:  /* spinlock */
 		curr = bpf_get_current_task_btf();
-		if (&curr->sighand->siglock == (void *)lock)
+		sighand = curr->sighand;
+
+		if (sighand && &sighand->siglock == (void *)lock)
 			return LCD_F_SIGHAND_LOCK;
 		break;
 	default:




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux