]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Oct 2021 12:39:53 +0000 (14:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Oct 2021 12:39:53 +0000 (14:39 +0200)
added patches:
net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch
tee-optee-fix-missing-devices-unregister-during-optee_remove.patch

queue-5.4/net-switchdev-do-not-propagate-bridge-updates-across-bridges.patch [new file with mode: 0644]
queue-5.4/series
queue-5.4/tee-optee-fix-missing-devices-unregister-during-optee_remove.patch [new file with mode: 0644]

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 (file)
index 0000000..5de589e
--- /dev/null
@@ -0,0 +1,65 @@
+From 07c6f9805f12f1bb538ef165a092b300350384aa Mon Sep 17 00:00:00 2001
+From: Russell King <rmk+kernel@armlinux.org.uk>
+Date: Wed, 26 Feb 2020 17:14:21 +0000
+Subject: net: switchdev: do not propagate bridge updates across bridges
+
+From: Russell King <rmk+kernel@armlinux.org.uk>
+
+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 <idosch@mellanox.com>
+Tested-by: Ido Schimmel <idosch@mellanox.com>
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Fabian Bläse <fabian@blaese.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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)
index 256897b0c3824790b6de060d23bf4eeca44d62c6..5d41042cde185809d38ffa98f54bb84c87f0b2c0 100644 (file)
@@ -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 (file)
index 0000000..519e185
--- /dev/null
@@ -0,0 +1,90 @@
+From 7f565d0ead264329749c0da488de9c8dfa2f18ce Mon Sep 17 00:00:00 2001
+From: Sumit Garg <sumit.garg@linaro.org>
+Date: Tue, 12 Oct 2021 13:01:16 +0530
+Subject: tee: optee: Fix missing devices unregister during optee_remove
+
+From: Sumit Garg <sumit.garg@linaro.org>
+
+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 <sudeep.holla@arm.com>
+Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
+Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
+[SG: backport to 5.4, dev name s/optee-ta/optee-clnt/]
+Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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