]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Apr 2021 07:06:31 +0000 (09:06 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Apr 2021 07:06:31 +0000 (09:06 +0200)
added patches:
clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch
net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch

queue-4.19/clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch [new file with mode: 0644]
queue-4.19/net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch b/queue-4.19/clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch
new file mode 100644 (file)
index 0000000..0a3beb2
--- /dev/null
@@ -0,0 +1,39 @@
+From 2867b9746cef78745c594894aece6f8ef826e0b4 Mon Sep 17 00:00:00 2001
+From: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
+Date: Sun, 14 Mar 2021 12:07:09 +0100
+Subject: clk: socfpga: fix iomem pointer cast on 64-bit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
+
+commit 2867b9746cef78745c594894aece6f8ef826e0b4 upstream.
+
+Pointers should be cast with uintptr_t instead of integer.  This fixes
+warning when compile testing on ARM64:
+
+  drivers/clk/socfpga/clk-gate.c: In function ‘socfpga_clk_recalc_rate’:
+  drivers/clk/socfpga/clk-gate.c:102:7: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
+
+Fixes: b7cec13f082f ("clk: socfpga: Look for the GPIO_DB_CLK by its offset")
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
+Acked-by: Dinh Nguyen <dinguyen@kernel.org>
+Link: https://lore.kernel.org/r/20210314110709.32599-1-krzysztof.kozlowski@canonical.com
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/clk/socfpga/clk-gate.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/clk/socfpga/clk-gate.c
++++ b/drivers/clk/socfpga/clk-gate.c
+@@ -107,7 +107,7 @@ static unsigned long socfpga_clk_recalc_
+               val = readl(socfpgaclk->div_reg) >> socfpgaclk->shift;
+               val &= GENMASK(socfpgaclk->width - 1, 0);
+               /* Check for GPIO_DB_CLK by its offset */
+-              if ((int) socfpgaclk->div_reg & SOCFPGA_GPIO_DB_CLK_OFFSET)
++              if ((uintptr_t) socfpgaclk->div_reg & SOCFPGA_GPIO_DB_CLK_OFFSET)
+                       div = val + 1;
+               else
+                       div = (1 << val);
diff --git a/queue-4.19/net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch b/queue-4.19/net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch
new file mode 100644 (file)
index 0000000..a2fa669
--- /dev/null
@@ -0,0 +1,83 @@
+From 6855e8213e06efcaf7c02a15e12b1ae64b9a7149 Mon Sep 17 00:00:00 2001
+From: Kumar Kartikeya Dwivedi <memxor@gmail.com>
+Date: Tue, 30 Mar 2021 04:23:23 +0530
+Subject: net: sched: bump refcount for new action in ACT replace mode
+
+From: Kumar Kartikeya Dwivedi <memxor@gmail.com>
+
+commit 6855e8213e06efcaf7c02a15e12b1ae64b9a7149 upstream.
+
+Currently, action creation using ACT API in replace mode is buggy.
+When invoking for non-existent action index 42,
+
+       tc action replace action bpf obj foo.o sec <xyz> index 42
+
+kernel creates the action, fills up the netlink response, and then just
+deletes the action after notifying userspace.
+
+       tc action show action bpf
+
+doesn't list the action.
+
+This happens due to the following sequence when ovr = 1 (replace mode)
+is enabled:
+
+tcf_idr_check_alloc is used to atomically check and either obtain
+reference for existing action at index, or reserve the index slot using
+a dummy entry (ERR_PTR(-EBUSY)).
+
+This is necessary as pointers to these actions will be held after
+dropping the idrinfo lock, so bumping the reference count is necessary
+as we need to insert the actions, and notify userspace by dumping their
+attributes. Finally, we drop the reference we took using the
+tcf_action_put_many call in tcf_action_add. However, for the case where
+a new action is created due to free index, its refcount remains one.
+This when paired with the put_many call leads to the kernel setting up
+the action, notifying userspace of its creation, and then tearing it
+down. For existing actions, the refcount is still held so they remain
+unaffected.
+
+Fortunately due to rtnl_lock serialization requirement, such an action
+with refcount == 1 will not be concurrently deleted by anything else, at
+best CLS API can move its refcount up and down by binding to it after it
+has been published from tcf_idr_insert_many. Since refcount is atleast
+one until put_many call, CLS API cannot delete it. Also __tcf_action_put
+release path already ensures deterministic outcome (either new action
+will be created or existing action will be reused in case CLS API tries
+to bind to action concurrently) due to idr lock serialization.
+
+We fix this by making refcount of newly created actions as 2 in ACT API
+replace mode. A relaxed store will suffice as visibility is ensured only
+after the tcf_idr_insert_many call.
+
+Note that in case of creation or overwriting using CLS API only (i.e.
+bind = 1), overwriting existing action object is not allowed, and any
+such request is silently ignored (without error).
+
+The refcount bump that occurs in tcf_idr_check_alloc call there for
+existing action will pair with tcf_exts_destroy call made from the
+owner module for the same action. In case of action creation, there
+is no existing action, so no tcf_exts_destroy callback happens.
+
+This means no code changes for CLS API.
+
+Fixes: cae422f379f3 ("net: sched: use reference counting action init")
+Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/sched/act_api.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/net/sched/act_api.c
++++ b/net/sched/act_api.c
+@@ -900,6 +900,9 @@ struct tc_action *tcf_action_init_1(stru
+               return ERR_PTR(-EINVAL);
+       }
++      if (!bind && ovr && err == ACT_P_CREATED)
++              refcount_set(&a->tcfa_refcnt, 2);
++
+       return a;
+ err_mod:
index 2c59cfe3fc2b206606366b000546385b3e63c049..281d43eb6fa8a16dbb9562c4efe208a82b52f8ce 100644 (file)
@@ -48,3 +48,5 @@ s390-cpcmd-fix-inline-assembly-register-clobbering.patch
 net-mlx5-fix-placement-of-log_max_flow_counter.patch
 net-mlx5-fix-pbmc-register-mapping.patch
 rdma-cxgb4-check-for-ipv6-address-properly-while-des.patch
+clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch
+net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch