From: Greg Kroah-Hartman Date: Tue, 19 Nov 2019 17:24:34 +0000 (+0100) Subject: drop queue-4.19/devlink-disallow-reload-operation-during-device-cleanup.patch X-Git-Tag: v5.3.12~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d6151242304b848000fec691e43dc666661f2037;p=thirdparty%2Fkernel%2Fstable-queue.git drop queue-4.19/devlink-disallow-reload-operation-during-device-cleanup.patch and another 4.19 patch --- diff --git a/queue-4.19/devlink-disallow-reload-operation-during-device-cleanup.patch b/queue-4.19/devlink-disallow-reload-operation-during-device-cleanup.patch deleted file mode 100644 index 90db13878d9..00000000000 --- a/queue-4.19/devlink-disallow-reload-operation-during-device-cleanup.patch +++ /dev/null @@ -1,183 +0,0 @@ -From foo@baz Mon 18 Nov 2019 09:16:01 AM CET -From: Jiri Pirko -Date: Sat, 9 Nov 2019 11:29:46 +0100 -Subject: devlink: disallow reload operation during device cleanup - -From: Jiri Pirko - -[ Upstream commit 5a508a254bed9a2e36a5fb96c9065532a6bf1e9c ] - -There is a race between driver code that does setup/cleanup of device -and devlink reload operation that in some drivers works with the same -code. Use after free could we easily obtained by running: - -while true; do - echo "0000:00:10.0" >/sys/bus/pci/drivers/mlxsw_spectrum2/bind - devlink dev reload pci/0000:00:10.0 & - echo "0000:00:10.0" >/sys/bus/pci/drivers/mlxsw_spectrum2/unbind -done - -Fix this by enabling reload only after setup of device is complete and -disabling it at the beginning of the cleanup process. - -Reported-by: Ido Schimmel -Fixes: 2d8dc5bbf4e7 ("devlink: Add support for reload") -Signed-off-by: Jiri Pirko -Signed-off-by: David S. Miller -Signed-off-by: Greg Kroah-Hartman ---- - drivers/net/ethernet/mellanox/mlx4/main.c | 3 ++ - drivers/net/ethernet/mellanox/mlxsw/core.c | 4 ++ - drivers/net/netdevsim/netdev.c | 5 +++ - include/net/devlink.h | 3 ++ - net/core/devlink.c | 39 ++++++++++++++++++++++++++++- - 5 files changed, 53 insertions(+), 1 deletion(-) - ---- a/drivers/net/ethernet/mellanox/mlx4/main.c -+++ b/drivers/net/ethernet/mellanox/mlx4/main.c -@@ -3982,6 +3982,7 @@ static int mlx4_init_one(struct pci_dev - if (ret) - goto err_params_unregister; - -+ devlink_reload_enable(devlink); - pci_save_state(pdev); - return 0; - -@@ -4093,6 +4094,8 @@ static void mlx4_remove_one(struct pci_d - struct devlink *devlink = priv_to_devlink(priv); - int active_vfs = 0; - -+ devlink_reload_disable(devlink); -+ - if (mlx4_is_slave(dev)) - persist->interface_state |= MLX4_INTERFACE_STATE_NOWAIT; - ---- a/drivers/net/ethernet/mellanox/mlxsw/core.c -+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c -@@ -1054,6 +1054,8 @@ int mlxsw_core_bus_device_register(const - if (err) - goto err_driver_init; - } -+ if (!reload) -+ devlink_reload_enable(devlink); - - return 0; - -@@ -1088,6 +1090,8 @@ void mlxsw_core_bus_device_unregister(st - { - struct devlink *devlink = priv_to_devlink(mlxsw_core); - -+ if (!reload) -+ devlink_reload_disable(devlink); - if (mlxsw_core->reload_fail) { - if (!reload) - /* Only the parts that were not de-initialized in the ---- a/drivers/net/netdevsim/netdev.c -+++ b/drivers/net/netdevsim/netdev.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - #include "netdevsim.h" - -@@ -221,6 +222,8 @@ static int nsim_init(struct net_device * - goto err_unreg_dev; - - nsim_ipsec_init(ns); -+ if (ns->devlink) -+ devlink_reload_enable(ns->devlink); - - return 0; - -@@ -243,6 +246,8 @@ static void nsim_uninit(struct net_devic - { - struct netdevsim *ns = netdev_priv(dev); - -+ if (ns->devlink) -+ devlink_reload_disable(ns->devlink); - nsim_ipsec_teardown(ns); - nsim_devlink_teardown(ns); - debugfs_remove_recursive(ns->ddir); ---- a/include/net/devlink.h -+++ b/include/net/devlink.h -@@ -35,6 +35,7 @@ struct devlink { - struct device *dev; - possible_net_t _net; - struct mutex lock; -+ u8 reload_enabled:1; - char priv[0] __aligned(NETDEV_ALIGN); - }; - -@@ -477,6 +478,8 @@ struct ib_device; - struct devlink *devlink_alloc(const struct devlink_ops *ops, size_t priv_size); - int devlink_register(struct devlink *devlink, struct device *dev); - void devlink_unregister(struct devlink *devlink); -+void devlink_reload_enable(struct devlink *devlink); -+void devlink_reload_disable(struct devlink *devlink); - void devlink_free(struct devlink *devlink); - int devlink_port_register(struct devlink *devlink, - struct devlink_port *devlink_port, ---- a/net/core/devlink.c -+++ b/net/core/devlink.c -@@ -2643,7 +2643,7 @@ static int devlink_nl_cmd_reload(struct - struct devlink *devlink = info->user_ptr[0]; - int err; - -- if (!devlink->ops->reload) -+ if (!devlink->ops->reload || !devlink->reload_enabled) - return -EOPNOTSUPP; - - err = devlink_resources_validate(devlink, NULL, info); -@@ -3889,6 +3889,8 @@ EXPORT_SYMBOL_GPL(devlink_register); - void devlink_unregister(struct devlink *devlink) - { - mutex_lock(&devlink_mutex); -+ WARN_ON(devlink->ops->reload && -+ devlink->reload_enabled); - devlink_notify(devlink, DEVLINK_CMD_DEL); - list_del(&devlink->list); - mutex_unlock(&devlink_mutex); -@@ -3896,6 +3898,41 @@ void devlink_unregister(struct devlink * - EXPORT_SYMBOL_GPL(devlink_unregister); - - /** -+ * devlink_reload_enable - Enable reload of devlink instance -+ * -+ * @devlink: devlink -+ * -+ * Should be called at end of device initialization -+ * process when reload operation is supported. -+ */ -+void devlink_reload_enable(struct devlink *devlink) -+{ -+ mutex_lock(&devlink_mutex); -+ devlink->reload_enabled = true; -+ mutex_unlock(&devlink_mutex); -+} -+EXPORT_SYMBOL_GPL(devlink_reload_enable); -+ -+/** -+ * devlink_reload_disable - Disable reload of devlink instance -+ * -+ * @devlink: devlink -+ * -+ * Should be called at the beginning of device cleanup -+ * process when reload operation is supported. -+ */ -+void devlink_reload_disable(struct devlink *devlink) -+{ -+ mutex_lock(&devlink_mutex); -+ /* Mutex is taken which ensures that no reload operation is in -+ * progress while setting up forbidded flag. -+ */ -+ devlink->reload_enabled = false; -+ mutex_unlock(&devlink_mutex); -+} -+EXPORT_SYMBOL_GPL(devlink_reload_disable); -+ -+/** - * devlink_free - Free devlink instance resources - * - * @devlink: devlink diff --git a/queue-4.19/net-devlink-select-net_devlink-from-drivers.patch b/queue-4.19/net-devlink-select-net_devlink-from-drivers.patch deleted file mode 100644 index 8b7b424558a..00000000000 --- a/queue-4.19/net-devlink-select-net_devlink-from-drivers.patch +++ /dev/null @@ -1,61 +0,0 @@ -From f6b19b354d50c5ae46ad66b5273f92e563fbc847 Mon Sep 17 00:00:00 2001 -From: Jiri Pirko -Date: Sun, 24 Mar 2019 11:14:38 +0100 -Subject: net: devlink: select NET_DEVLINK from drivers - -From: Jiri Pirko - -commit f6b19b354d50c5ae46ad66b5273f92e563fbc847 upstream. - -Some drivers are becoming more dependent on NET_DEVLINK being selected -in configuration. With upcoming compat functions, the behavior would be -wrong in case devlink was not compiled in. So make the drivers select -NET_DEVLINK and rely on the functions being there, not just stubs. - -Signed-off-by: Jiri Pirko -Signed-off-by: David S. Miller -[only backport 3 select NET_DEVLINK lines of original patch, to resolve - build issues - gregkh] -Cc: Guenter Roeck -Cc: Chris Paterson -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/net/ethernet/mellanox/mlx4/Kconfig | 1 + - drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 2 +- - drivers/net/ethernet/mellanox/mlxsw/Kconfig | 2 +- - 3 files changed, 3 insertions(+), 2 deletions(-) - ---- a/drivers/net/ethernet/mellanox/mlx4/Kconfig -+++ b/drivers/net/ethernet/mellanox/mlx4/Kconfig -@@ -27,6 +27,7 @@ config MLX4_EN_DCB - config MLX4_CORE - tristate - depends on PCI -+ select NET_DEVLINK - default n - - config MLX4_DEBUG ---- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig -+++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig -@@ -4,8 +4,8 @@ - - config MLX5_CORE - tristate "Mellanox 5th generation network adapters (ConnectX series) core driver" -- depends on MAY_USE_DEVLINK - depends on PCI -+ select NET_DEVLINK - imply PTP_1588_CLOCK - imply VXLAN - imply MLXFW ---- a/drivers/net/ethernet/mellanox/mlxsw/Kconfig -+++ b/drivers/net/ethernet/mellanox/mlxsw/Kconfig -@@ -4,7 +4,7 @@ - - config MLXSW_CORE - tristate "Mellanox Technologies Switch ASICs support" -- depends on MAY_USE_DEVLINK -+ select NET_DEVLINK - ---help--- - This driver supports Mellanox Technologies Switch ASICs family. - diff --git a/queue-4.19/series b/queue-4.19/series index 2bc732b7660..bcb9fc4c51c 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -6,8 +6,6 @@ ipmr-fix-skb-headroom-in-ipmr_get_route.patch net-gemini-add-missed-free_netdev.patch net-usb-qmi_wwan-add-support-for-foxconn-t77w968-lte-modules.patch slip-fix-memory-leak-in-slip_open-error-path.patch -devlink-disallow-reload-operation-during-device-cleanup.patch -net-devlink-select-net_devlink-from-drivers.patch alsa-usb-audio-fix-missing-error-check-at-mixer-resolution-test.patch alsa-usb-audio-not-submit-urb-for-stopped-endpoint.patch alsa-usb-audio-fix-incorrect-null-check-in-create_yamaha_midi_quirk.patch