staging: vchiq_dev: Avoid unnecessary alloc in vchiq_ioc_create_service
authorStefan Wahren <stefan.wahren@i2se.com>
Sun, 23 Jan 2022 20:02:23 +0000 (21:02 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Jan 2022 15:30:16 +0000 (16:30 +0100)
There is no need to allocate the user service in case there is a VCHIQ
connection required, but not available. So simply check the error conditions
before doing an expensive memory allocation.

Reviewed-by: Nicolas Saenz Julienne <nsaenz@kernel.org>
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Link: https://lore.kernel.org/r/1642968143-19281-19-git-send-email-stefan.wahren@i2se.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c

index 2325844..b41c2a2 100644 (file)
@@ -146,15 +146,14 @@ static int vchiq_ioc_create_service(struct vchiq_instance *instance,
        struct vchiq_service_params_kernel params;
        int srvstate;
 
+       if (args->is_open && !instance->connected)
+               return -ENOTCONN;
+
        user_service = kmalloc(sizeof(*user_service), GFP_KERNEL);
        if (!user_service)
                return -ENOMEM;
 
        if (args->is_open) {
-               if (!instance->connected) {
-                       kfree(user_service);
-                       return -ENOTCONN;
-               }
                srvstate = VCHIQ_SRVSTATE_OPENING;
        } else {
                srvstate = instance->connected ?