From: Greg Kroah-Hartman Date: Wed, 20 Oct 2021 12:39:53 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.4.290~80 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0320d6b54c3b158e89059592a055a6141b5e7ce0;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch tee-optee-fix-missing-devices-unregister-during-optee_remove.patch --- diff --git a/queue-5.4/net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch b/queue-5.4/net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch new file mode 100644 index 00000000000..5de589e38b9 --- /dev/null +++ b/queue-5.4/net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch @@ -0,0 +1,65 @@ +From 07c6f9805f12f1bb538ef165a092b300350384aa Mon Sep 17 00:00:00 2001 +From: Russell King +Date: Wed, 26 Feb 2020 17:14:21 +0000 +Subject: net: switchdev: do not propagate bridge updates across bridges + +From: Russell King + +commit 07c6f9805f12f1bb538ef165a092b300350384aa upstream. + +When configuring a tree of independent bridges, propagating changes +from the upper bridge across a bridge master to the lower bridge +ports brings surprises. + +For example, a lower bridge may have vlan filtering enabled. It +may have a vlan interface attached to the bridge master, which may +then be incorporated into another bridge. As soon as the lower +bridge vlan interface is attached to the upper bridge, the lower +bridge has vlan filtering disabled. + +This occurs because switchdev recursively applies its changes to +all lower devices no matter what. + +Reviewed-by: Ido Schimmel +Tested-by: Ido Schimmel +Signed-off-by: Russell King +Reviewed-by: Florian Fainelli +Signed-off-by: David S. Miller +Cc: Fabian Bläse +Signed-off-by: Greg Kroah-Hartman +--- + net/switchdev/switchdev.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/net/switchdev/switchdev.c ++++ b/net/switchdev/switchdev.c +@@ -476,6 +476,9 @@ static int __switchdev_handle_port_obj_a + * necessary to go through this helper. + */ + netdev_for_each_lower_dev(dev, lower_dev, iter) { ++ if (netif_is_bridge_master(lower_dev)) ++ continue; ++ + err = __switchdev_handle_port_obj_add(lower_dev, port_obj_info, + check_cb, add_cb); + if (err && err != -EOPNOTSUPP) +@@ -528,6 +531,9 @@ static int __switchdev_handle_port_obj_d + * necessary to go through this helper. + */ + netdev_for_each_lower_dev(dev, lower_dev, iter) { ++ if (netif_is_bridge_master(lower_dev)) ++ continue; ++ + err = __switchdev_handle_port_obj_del(lower_dev, port_obj_info, + check_cb, del_cb); + if (err && err != -EOPNOTSUPP) +@@ -579,6 +585,9 @@ static int __switchdev_handle_port_attr_ + * necessary to go through this helper. + */ + netdev_for_each_lower_dev(dev, lower_dev, iter) { ++ if (netif_is_bridge_master(lower_dev)) ++ continue; ++ + err = __switchdev_handle_port_attr_set(lower_dev, port_attr_info, + check_cb, set_cb); + if (err && err != -EOPNOTSUPP) diff --git a/queue-5.4/series b/queue-5.4/series index 256897b0c38..5d41042cde1 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -1 +1,3 @@ parisc-math-emu-fix-fall-through-warnings.patch +net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch +tee-optee-fix-missing-devices-unregister-during-optee_remove.patch diff --git a/queue-5.4/tee-optee-fix-missing-devices-unregister-during-optee_remove.patch b/queue-5.4/tee-optee-fix-missing-devices-unregister-during-optee_remove.patch new file mode 100644 index 00000000000..519e185dcba --- /dev/null +++ b/queue-5.4/tee-optee-fix-missing-devices-unregister-during-optee_remove.patch @@ -0,0 +1,90 @@ +From 7f565d0ead264329749c0da488de9c8dfa2f18ce Mon Sep 17 00:00:00 2001 +From: Sumit Garg +Date: Tue, 12 Oct 2021 13:01:16 +0530 +Subject: tee: optee: Fix missing devices unregister during optee_remove + +From: Sumit Garg + +commit 7f565d0ead264329749c0da488de9c8dfa2f18ce upstream. + +When OP-TEE driver is built as a module, OP-TEE client devices +registered on TEE bus during probe should be unregistered during +optee_remove. So implement optee_unregister_devices() accordingly. + +Fixes: c3fa24af9244 ("tee: optee: add TEE bus device enumeration support") +Reported-by: Sudeep Holla +Signed-off-by: Sumit Garg +Signed-off-by: Jens Wiklander +[SG: backport to 5.4, dev name s/optee-ta/optee-clnt/] +Signed-off-by: Sumit Garg +Signed-off-by: Greg Kroah-Hartman +--- + drivers/tee/optee/core.c | 3 +++ + drivers/tee/optee/device.c | 22 ++++++++++++++++++++++ + drivers/tee/optee/optee_private.h | 1 + + 3 files changed, 26 insertions(+) + +--- a/drivers/tee/optee/core.c ++++ b/drivers/tee/optee/core.c +@@ -582,6 +582,9 @@ static struct optee *optee_probe(struct + if (sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) + pool = optee_config_dyn_shm(); + ++ /* Unregister OP-TEE specific client devices on TEE bus */ ++ optee_unregister_devices(); ++ + /* + * If dynamic shared memory is not available or failed - try static one + */ +--- a/drivers/tee/optee/device.c ++++ b/drivers/tee/optee/device.c +@@ -65,6 +65,13 @@ static int get_devices(struct tee_contex + return 0; + } + ++static void optee_release_device(struct device *dev) ++{ ++ struct tee_client_device *optee_device = to_tee_client_device(dev); ++ ++ kfree(optee_device); ++} ++ + static int optee_register_device(const uuid_t *device_uuid, u32 device_id) + { + struct tee_client_device *optee_device = NULL; +@@ -75,6 +82,7 @@ static int optee_register_device(const u + return -ENOMEM; + + optee_device->dev.bus = &tee_bus_type; ++ optee_device->dev.release = optee_release_device; + dev_set_name(&optee_device->dev, "optee-clnt%u", device_id); + uuid_copy(&optee_device->id.uuid, device_uuid); + +@@ -158,3 +166,17 @@ out_ctx: + + return rc; + } ++ ++static int __optee_unregister_device(struct device *dev, void *data) ++{ ++ if (!strncmp(dev_name(dev), "optee-clnt", strlen("optee-clnt"))) ++ device_unregister(dev); ++ ++ return 0; ++} ++ ++void optee_unregister_devices(void) ++{ ++ bus_for_each_dev(&tee_bus_type, NULL, NULL, ++ __optee_unregister_device); ++} +--- a/drivers/tee/optee/optee_private.h ++++ b/drivers/tee/optee/optee_private.h +@@ -175,6 +175,7 @@ void optee_fill_pages_list(u64 *dst, str + size_t page_offset); + + int optee_enumerate_devices(void); ++void optee_unregister_devices(void); + + /* + * Small helpers