]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mei: make a local copy of client uuid in connect
authorAlexander Usyskin <alexander.usyskin@intel.com>
Thu, 18 Sep 2025 13:04:32 +0000 (16:04 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Sep 2025 16:29:33 +0000 (18:29 +0200)
Connect ioctl has the same memory for in and out parameters.
Copy in parameter (client uuid) to the local stack to avoid it be
overwritten by out parameters fill.

Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20250918130435.3327400-3-alexander.usyskin@intel.com
drivers/misc/mei/main.c

index f37f9b8b1f518708b9fc2b2e70263376a4ac4932..2d41a05b8694ff32286945355689ad1ebfdc8a85 100644 (file)
@@ -646,7 +646,7 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data)
        struct mei_cl *cl = file->private_data;
        struct mei_connect_client_data conn;
        struct mei_connect_client_data_vtag conn_vtag;
-       const uuid_le *cl_uuid;
+       uuid_le cl_uuid;
        struct mei_client *props;
        u8 vtag;
        u32 notify_get, notify_req;
@@ -674,18 +674,18 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data)
                        rets = -EFAULT;
                        goto out;
                }
-               cl_uuid = &conn.in_client_uuid;
+               cl_uuid = conn.in_client_uuid;
                props = &conn.out_client_properties;
                vtag = 0;
 
-               rets = mei_vt_support_check(dev, cl_uuid);
+               rets = mei_vt_support_check(dev, &cl_uuid);
                if (rets == -ENOTTY)
                        goto out;
                if (!rets)
-                       rets = mei_ioctl_connect_vtag(file, cl_uuid, props,
+                       rets = mei_ioctl_connect_vtag(file, &cl_uuid, props,
                                                      vtag);
                else
-                       rets = mei_ioctl_connect_client(file, cl_uuid, props);
+                       rets = mei_ioctl_connect_client(file, &cl_uuid, props);
                if (rets)
                        goto out;
 
@@ -707,14 +707,14 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data)
                        goto out;
                }
 
-               cl_uuid = &conn_vtag.connect.in_client_uuid;
+               cl_uuid = conn_vtag.connect.in_client_uuid;
                props = &conn_vtag.out_client_properties;
                vtag = conn_vtag.connect.vtag;
 
-               rets = mei_vt_support_check(dev, cl_uuid);
+               rets = mei_vt_support_check(dev, &cl_uuid);
                if (rets == -EOPNOTSUPP)
                        cl_dbg(dev, cl, "FW Client %pUl does not support vtags\n",
-                               cl_uuid);
+                               &cl_uuid);
                if (rets)
                        goto out;
 
@@ -724,7 +724,7 @@ static long mei_ioctl(struct file *file, unsigned int cmd, unsigned long data)
                        goto out;
                }
 
-               rets = mei_ioctl_connect_vtag(file, cl_uuid, props, vtag);
+               rets = mei_ioctl_connect_vtag(file, &cl_uuid, props, vtag);
                if (rets)
                        goto out;