diff mbox series

[1/2] firmware: arm_ffa: Add missing remove callback to ffa_bus_type

Message ID 20210924092859.3057562-1-sudeep.holla@arm.com (mailing list archive)
State New, archived
Headers show
Series [1/2] firmware: arm_ffa: Add missing remove callback to ffa_bus_type | expand

Commit Message

Sudeep Holla Sept. 24, 2021, 9:28 a.m. UTC
Currently the arm_ffa firmware driver can be built as module and hence
all the users of FFA driver. If any driver on the ffa bus is removed or
unregistered, the remove callback on all the device bound to the driver
being removed should be callback. For that to happen, we must register
a remove callback on the ffa_bus which is currently missing. This results
in the probe getting called again without the previous remove callback
on a device which may result in kernel crash.

Fix the issue by registering the remove callback on the FFA bus.

Fixes: e781858488b9 ("firmware: arm_ffa: Add initial FFA bus support for device enumeration")
Reported-by: Jens Wiklander <jens.wiklander@linaro.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/firmware/arm_ffa/bus.c | 8 ++++++++
 1 file changed, 8 insertions(+)

--
2.25.1

Comments

Jens Wiklander Oct. 4, 2021, 10:09 a.m. UTC | #1
On Fri, Sep 24, 2021 at 11:29 AM Sudeep Holla <sudeep.holla@arm.com> wrote:
>
> Currently the arm_ffa firmware driver can be built as module and hence
> all the users of FFA driver. If any driver on the ffa bus is removed or
> unregistered, the remove callback on all the device bound to the driver
> being removed should be callback. For that to happen, we must register
> a remove callback on the ffa_bus which is currently missing. This results
> in the probe getting called again without the previous remove callback
> on a device which may result in kernel crash.
>
> Fix the issue by registering the remove callback on the FFA bus.
>
> Fixes: e781858488b9 ("firmware: arm_ffa: Add initial FFA bus support for device enumeration")
> Reported-by: Jens Wiklander <jens.wiklander@linaro.org>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/firmware/arm_ffa/bus.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

Tested-by: Jens Wiklander <jens.wiklander@linaro.org>
Sudeep Holla Oct. 5, 2021, 9:42 a.m. UTC | #2
On Fri, 24 Sep 2021 10:28:58 +0100, Sudeep Holla wrote:
> Currently the arm_ffa firmware driver can be built as module and hence
> all the users of FFA driver. If any driver on the ffa bus is removed or
> unregistered, the remove callback on all the device bound to the driver
> being removed should be callback. For that to happen, we must register
> a remove callback on the ffa_bus which is currently missing. This results
> in the probe getting called again without the previous remove callback
> on a device which may result in kernel crash.
> 
> [...]


Applied to sudeep.holla/linux (for-next/ffa), thanks!




[1/2] firmware: arm_ffa: Add missing remove callback to ffa_bus_type
      https://git.kernel.org/sudeep.holla/c/244f5d597e
[2/2] firmware: arm_ffa: Fix __ffa_devices_unregister
      https://git.kernel.org/sudeep.holla/c/eb7b52e6db

--

Regards,
Sudeep
diff mbox series

Patch

diff --git a/drivers/firmware/arm_ffa/bus.c b/drivers/firmware/arm_ffa/bus.c
index 00fe595a5bc8..f01348e6cf1c 100644
--- a/drivers/firmware/arm_ffa/bus.c
+++ b/drivers/firmware/arm_ffa/bus.c
@@ -49,6 +49,13 @@  static int ffa_device_probe(struct device *dev)
 	return ffa_drv->probe(ffa_dev);
 }

+static void ffa_device_remove(struct device *dev)
+{
+	struct ffa_driver *ffa_drv = to_ffa_driver(dev->driver);
+
+	ffa_drv->remove(to_ffa_dev(dev));
+}
+
 static int ffa_device_uevent(struct device *dev, struct kobj_uevent_env *env)
 {
 	struct ffa_device *ffa_dev = to_ffa_dev(dev);
@@ -86,6 +93,7 @@  struct bus_type ffa_bus_type = {
 	.name		= "arm_ffa",
 	.match		= ffa_device_match,
 	.probe		= ffa_device_probe,
+	.remove		= ffa_device_remove,
 	.uevent		= ffa_device_uevent,
 	.dev_groups	= ffa_device_attributes_groups,
 };