]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Mon, 20 Jun 2022 07:16:32 +0000 (03:16 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 20 Jun 2022 07:16:32 +0000 (03:16 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/faddr2line-fix-overlapping-text-section-failures-the.patch [new file with mode: 0644]
queue-4.19/irqchip-gic-realview-fix-refcount-leak-in-realview_g.patch [new file with mode: 0644]
queue-4.19/irqchip-gic-v3-fix-refcount-leak-in-gic_populate_ppi.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/faddr2line-fix-overlapping-text-section-failures-the.patch b/queue-4.19/faddr2line-fix-overlapping-text-section-failures-the.patch
new file mode 100644 (file)
index 0000000..476c8d2
--- /dev/null
@@ -0,0 +1,139 @@
+From 055b6d77e5be25328499a6ff007196d108b4a857 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Jun 2022 17:42:22 -0700
+Subject: faddr2line: Fix overlapping text section failures, the sequel
+
+From: Josh Poimboeuf <jpoimboe@kernel.org>
+
+[ Upstream commit dcea997beed694cbd8705100ca1a6eb0d886de69 ]
+
+If a function lives in a section other than .text, but .text also exists
+in the object, faddr2line may wrongly assume .text.  This can result in
+comically wrong output.  For example:
+
+  $ scripts/faddr2line vmlinux.o enter_from_user_mode+0x1c
+  enter_from_user_mode+0x1c/0x30:
+  find_next_bit at /home/jpoimboe/git/linux/./include/linux/find.h:40
+  (inlined by) perf_clear_dirty_counters at /home/jpoimboe/git/linux/arch/x86/events/core.c:2504
+
+Fix it by passing the section name to addr2line, unless the object file
+is vmlinux, in which case the symbol table uses absolute addresses.
+
+Fixes: 1d1a0e7c5100 ("scripts/faddr2line: Fix overlapping text section failures")
+Reported-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
+Link: https://lore.kernel.org/r/7d25bc1408bd3a750ac26e60d2f2815a5f4a8363.1654130536.git.jpoimboe@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ scripts/faddr2line | 45 ++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 34 insertions(+), 11 deletions(-)
+
+diff --git a/scripts/faddr2line b/scripts/faddr2line
+index 226c3f559dc5..2571caac3156 100755
+--- a/scripts/faddr2line
++++ b/scripts/faddr2line
+@@ -95,17 +95,25 @@ __faddr2line() {
+       local print_warnings=$4
+       local sym_name=${func_addr%+*}
+-      local offset=${func_addr#*+}
+-      offset=${offset%/*}
++      local func_offset=${func_addr#*+}
++      func_offset=${func_offset%/*}
+       local user_size=
++      local file_type
++      local is_vmlinux=0
+       [[ $func_addr =~ "/" ]] && user_size=${func_addr#*/}
+-      if [[ -z $sym_name ]] || [[ -z $offset ]] || [[ $sym_name = $func_addr ]]; then
++      if [[ -z $sym_name ]] || [[ -z $func_offset ]] || [[ $sym_name = $func_addr ]]; then
+               warn "bad func+offset $func_addr"
+               DONE=1
+               return
+       fi
++      # vmlinux uses absolute addresses in the section table rather than
++      # section offsets.
++      local file_type=$(${READELF} --file-header $objfile |
++              ${AWK} '$1 == "Type:" { print $2; exit }')
++      [[ $file_type = "EXEC" ]] && is_vmlinux=1
++
+       # Go through each of the object's symbols which match the func name.
+       # In rare cases there might be duplicates, in which case we print all
+       # matches.
+@@ -114,9 +122,11 @@ __faddr2line() {
+               local sym_addr=0x${fields[1]}
+               local sym_elf_size=${fields[2]}
+               local sym_sec=${fields[6]}
++              local sec_size
++              local sec_name
+               # Get the section size:
+-              local sec_size=$(${READELF} --section-headers --wide $objfile |
++              sec_size=$(${READELF} --section-headers --wide $objfile |
+                       sed 's/\[ /\[/' |
+                       ${AWK} -v sec=$sym_sec '$1 == "[" sec "]" { print "0x" $6; exit }')
+@@ -126,6 +136,17 @@ __faddr2line() {
+                       return
+               fi
++              # Get the section name:
++              sec_name=$(${READELF} --section-headers --wide $objfile |
++                      sed 's/\[ /\[/' |
++                      ${AWK} -v sec=$sym_sec '$1 == "[" sec "]" { print $2; exit }')
++
++              if [[ -z $sec_name ]]; then
++                      warn "bad section name: section: $sym_sec"
++                      DONE=1
++                      return
++              fi
++
+               # Calculate the symbol size.
+               #
+               # Unfortunately we can't use the ELF size, because kallsyms
+@@ -174,10 +195,10 @@ __faddr2line() {
+               sym_size=0x$(printf %x $sym_size)
+-              # Calculate the section address from user-supplied offset:
+-              local addr=$(($sym_addr + $offset))
++              # Calculate the address from user-supplied offset:
++              local addr=$(($sym_addr + $func_offset))
+               if [[ -z $addr ]] || [[ $addr = 0 ]]; then
+-                      warn "bad address: $sym_addr + $offset"
++                      warn "bad address: $sym_addr + $func_offset"
+                       DONE=1
+                       return
+               fi
+@@ -191,9 +212,9 @@ __faddr2line() {
+               fi
+               # Make sure the provided offset is within the symbol's range:
+-              if [[ $offset -gt $sym_size ]]; then
++              if [[ $func_offset -gt $sym_size ]]; then
+                       [[ $print_warnings = 1 ]] &&
+-                              echo "skipping $sym_name address at $addr due to size mismatch ($offset > $sym_size)"
++                              echo "skipping $sym_name address at $addr due to size mismatch ($func_offset > $sym_size)"
+                       continue
+               fi
+@@ -202,11 +223,13 @@ __faddr2line() {
+               [[ $FIRST = 0 ]] && echo
+               FIRST=0
+-              echo "$sym_name+$offset/$sym_size:"
++              echo "$sym_name+$func_offset/$sym_size:"
+               # Pass section address to addr2line and strip absolute paths
+               # from the output:
+-              local output=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;")
++              local args="--functions --pretty-print --inlines --exe=$objfile"
++              [[ $is_vmlinux = 0 ]] && args="$args --section=$sec_name"
++              local output=$(${ADDR2LINE} $args $addr | sed "s; $dir_prefix\(\./\)*; ;")
+               [[ -z $output ]] && continue
+               # Default output (non --list):
+-- 
+2.35.1
+
diff --git a/queue-4.19/irqchip-gic-realview-fix-refcount-leak-in-realview_g.patch b/queue-4.19/irqchip-gic-realview-fix-refcount-leak-in-realview_g.patch
new file mode 100644 (file)
index 0000000..2b6377f
--- /dev/null
@@ -0,0 +1,37 @@
+From 49cd1da0e31359a1ce216ab09eafd8a09af384cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Jun 2022 12:09:25 +0400
+Subject: irqchip/gic/realview: Fix refcount leak in realview_gic_of_init
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit f4b98e314888cc51486421bcf6d52852452ea48b ]
+
+of_find_matching_node_and_match() returns a node pointer with refcount
+incremented, we should use of_node_put() on it when not need anymore.
+Add missing of_node_put() to avoid refcount leak.
+
+Fixes: 82b0a434b436 ("irqchip/gic/realview: Support more RealView DCC variants")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/20220601080930.31005-2-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/irqchip/irq-gic-realview.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/irqchip/irq-gic-realview.c b/drivers/irqchip/irq-gic-realview.c
+index b4c1924f0255..38fab02ffe9d 100644
+--- a/drivers/irqchip/irq-gic-realview.c
++++ b/drivers/irqchip/irq-gic-realview.c
+@@ -57,6 +57,7 @@ realview_gic_of_init(struct device_node *node, struct device_node *parent)
+       /* The PB11MPCore GIC needs to be configured in the syscon */
+       map = syscon_node_to_regmap(np);
++      of_node_put(np);
+       if (!IS_ERR(map)) {
+               /* new irq mode with no DCC */
+               regmap_write(map, REALVIEW_SYS_LOCK_OFFSET,
+-- 
+2.35.1
+
diff --git a/queue-4.19/irqchip-gic-v3-fix-refcount-leak-in-gic_populate_ppi.patch b/queue-4.19/irqchip-gic-v3-fix-refcount-leak-in-gic_populate_ppi.patch
new file mode 100644 (file)
index 0000000..152565a
--- /dev/null
@@ -0,0 +1,46 @@
+From 83033bcdf76e3b28e9cfb287b711b87f64950e2f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Jun 2022 12:09:29 +0400
+Subject: irqchip/gic-v3: Fix refcount leak in gic_populate_ppi_partitions
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit fa1ad9d4cc47ca2470cd904ad4519f05d7e43a2b ]
+
+of_find_node_by_phandle() returns a node pointer with refcount
+incremented, we should use of_node_put() on it when not need anymore.
+Add missing of_node_put() to avoid refcount leak.
+
+Fixes: e3825ba1af3a ("irqchip/gic-v3: Add support for partitioned PPIs")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/20220601080930.31005-6-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/irqchip/irq-gic-v3.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
+index 05b9a4cdc8fd..8d8b8d192e2e 100644
+--- a/drivers/irqchip/irq-gic-v3.c
++++ b/drivers/irqchip/irq-gic-v3.c
+@@ -1205,12 +1205,15 @@ static void __init gic_populate_ppi_partitions(struct device_node *gic_node)
+                               continue;
+                       cpu = of_cpu_node_to_id(cpu_node);
+-                      if (WARN_ON(cpu < 0))
++                      if (WARN_ON(cpu < 0)) {
++                              of_node_put(cpu_node);
+                               continue;
++                      }
+                       pr_cont("%pOF[%d] ", cpu_node, cpu);
+                       cpumask_set_cpu(cpu, &part->mask);
++                      of_node_put(cpu_node);
+               }
+               pr_cont("}\n");
+-- 
+2.35.1
+
index 62ff7d193847709d9678b2ebb32ec7c302296a2e..25b64a54ecb0a525676e33e562c86cb9da7f5eed 100644 (file)
@@ -206,3 +206,6 @@ mlxsw-spectrum_cnt-reorder-counter-pools.patch
 net-bgmac-fix-an-erroneous-kfree-in-bgmac_remove.patch
 arm64-ftrace-fix-branch-range-checks.patch
 certs-blacklist_hashes.c-fix-const-confusion-in-cert.patch
+faddr2line-fix-overlapping-text-section-failures-the.patch
+irqchip-gic-realview-fix-refcount-leak-in-realview_g.patch
+irqchip-gic-v3-fix-refcount-leak-in-gic_populate_ppi.patch