Check all three possible situations in which two software nodes for a
single platform device can be created/assigned in
platform_device_register_full() and bail-out early.

Signed-off-by: Bartosz Golaszewski <[email protected]>
---
 drivers/base/platform.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 
75b4698d0e582e67adafa78c312d75c72fd654cf..18f33bec36726490255bc7ca3c4ab07d9b7606b0
 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -848,7 +848,13 @@ struct platform_device 
*platform_device_register_full(const struct platform_devi
        int ret;
        struct platform_device *pdev;
 
-       if (pdevinfo->swnode && pdevinfo->properties)
+       /*
+        * Only one software node per device is allowed. Make sure we don't
+        * accept or create two.
+        */
+       if ((pdevinfo->swnode && pdevinfo->properties) ||
+           (pdevinfo->swnode && is_software_node(pdevinfo->fwnode)) ||
+           (pdevinfo->properties && is_software_node(pdevinfo->fwnode)))
                return ERR_PTR(-EINVAL);
 
        pdev = platform_device_alloc(pdevinfo->name, pdevinfo->id);

-- 
2.47.3


Reply via email to