From: Greg Kroah-Hartman Date: Mon, 12 Apr 2021 07:06:31 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v4.19.187~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d681350edb2ee4b90a2d0efaeaeabad020903270;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch --- 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 index 00000000000..0a3beb2d27d --- /dev/null +++ b/queue-4.19/clk-socfpga-fix-iomem-pointer-cast-on-64-bit.patch @@ -0,0 +1,39 @@ +From 2867b9746cef78745c594894aece6f8ef826e0b4 Mon Sep 17 00:00:00 2001 +From: Krzysztof Kozlowski +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 + +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 +Acked-by: Dinh Nguyen +Link: https://lore.kernel.org/r/20210314110709.32599-1-krzysztof.kozlowski@canonical.com +Signed-off-by: Stephen Boyd +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..a2fa6696375 --- /dev/null +++ b/queue-4.19/net-sched-bump-refcount-for-new-action-in-act-replace-mode.patch @@ -0,0 +1,83 @@ +From 6855e8213e06efcaf7c02a15e12b1ae64b9a7149 Mon Sep 17 00:00:00 2001 +From: Kumar Kartikeya Dwivedi +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 + +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 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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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: diff --git a/queue-4.19/series b/queue-4.19/series index 2c59cfe3fc2..281d43eb6fa 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -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